본문 바로가기

Study records/Web hacking

크로스 사이트 스크립팅 공격

 공격자가 악의적인 스크립트 코드를 웹 애플리케이션에 삽입한 후 웹 사용자의 웹 브라우저에 해당 코드가 실행되도록 만드는 공격이다. 이 공격 방식은 다른 웹 공격들과는 차이가 있는데, 다른 공격들은 취약점을 가지고 있는 서버쪽을 공격하지만 크로스 사이트 스크립팅 공격은 서버의 취약점을 이용하여 클라이언트 쪽을 공격한다는 점이다.

 

리플렉티드 크로스 사이트 스크립팅(Reflected XSS)

 

입력한 값이 그대로 반사되어 출력된다
입력한 스크립트가 실행된다

 

 

쿠키가 출력된다

 

document.cookie 코드로 인해 쿠키의 값이 출력된다. 쿠키 중에서 PHPSESSID라는 쿠키는 PHP에서 생성하는 세션 쿠키이고, 크로스 사이트 스크립팅 공격은 주로 세션 쿠키를 알아내는데 초점을 맞춘다.

 

칼리 리눅스에서 웹 서버를 실행한다

 

access.log 파일 모니터링

access.log 파일은 접근 로그를 기록하는 파일이다. 웹 서버로 들어온 요청 정보가 기록된다.

 

접근 로그에 쿠키 정보가 표시된다

새롭게 기록된 로그중에서 GET /cookie? 문자열 이후 나오는 내용이 document.cookie에 의해 출력된 쿠키 정보이다. 크로스 사이트 스크립팅을 통해 PHPSESSID 세션 쿠키를 탈취한 것이다.

 

리플렉티드 크로스 사이트 스크립팅 공격 시 요청 메시지

 

이 메시지를 참고하여 피싱에 사용할 링크를 만들 수 있다. 요청 메시지의 내용 중 name  파라미터의 값이 <script>가 %3Cscript%3E와 같이 전송된 이유는 웹 브라우저에서는 일부 특수문자를 URL 인코딩으로 자동 변환하기 때문이다.

 

 

 

BeEF 공격 프레임워크

비프 프로그램은 브라우저 익스플로잇 프레임워크 프로그램으로, 자체적으로 제공하는 자바스크립트로 된 후킹 코드를 사용자가 실행하면 그 사용자의 호스트를 대상으로 여러 가지 공격을 실행할 수 있도록 하는 프로그램이다.

 

크로스 사이트 스크립팅 공격과 BeFF 프레임워크를 이용하여 제3 사이트의 계정 정보를 획득해본다.

BeFF 인터페이스

 

후크 스크립트 삽입

 

후크 스크립트 를 실행한 호스트가 표시

 

 

처음에 오프라인 브라우저에 폴더가 생성되서 sudo nano /usr/share/beef-xss/config.yaml에서 host에 내 IP를 넣어줬다.

수정 후 sudo beef-xss --restart

 

공격을 당한 호스트의 정보를 확인할 수 있다

 

쿠키는 물론이고 어디서 후킹되었는지와 같은 페이지 정보와 각종 호스트 정보를 확인할 수 있다. 커맨드(Commands) 탭에서는 해당 호스트에 대해 추가로 공격을 수행할 수 있다.

 

Pretty Theft 공격 기능

 

가짜 페이스북 인터페이스 표시

 

팝업창에는 페이스북을 오랫동안 사용하지 않아서 세션이 종료되었다는 메시지가 표시된다. 만약 사용자가 실제로 페이스북을 웹 브라우저의 다른 탭에 띄어 놓은 후 오랜 시간 동안 놔두었다면, 별다른 의심 없이 다시 로그인하고자 이메일과 패스워드를 입력할지도 모른다. 

 

이메일과 패스워드를 입력하고 Log in 버튼을 누르면 입력한 값이 비프 프로그램을 통해 노출된다.

입력한 계정 정보가 비프 프로그램에 표시된다

 

 

 

 

스토어드 크로스 사이트 스크립팅(Stored XSS) 공격 

maxlength 제한 때문에 스크립트의 내용이 모두 입력되지 않아서 최대길이 제한 설정을 임시로 우회한다

 

클라이언트 쪽에서 입력값을 제한하거나 검증하도록 구현된 인터페이스는 쉽게 우회할 수 있다.

 

maxlength를 수정하여 길이 제한 우회

 

스크립트 실행 화면

 

 

access.log 파일을 확인해보면 쿠키 정보가 담긴 요청 기록이 새롭게 생성되었다.

방명록의 스트립트가 실행된다

 

방명록에 글이 남겨졌기 때문에 이 다음에 방명록을 보는 모든 사용자가 공격에 당할 수 있다.

 

 

 

크로스 사이트 스크립팅 공격 대응

크로스 사이트 스크립팅 공격에 대응하기 위해서는 지금처럼 스크립트가 입력되어도 그것이 실행되지 않도록 하고 단순히 문자열로 표시하도록 만드는 것이 가장 좋은 방법이다.

스크립트가 실행되지 않고 화면에 표시만 된다

 

스토어드 크로스 사이트 스크립팅 임파서블 단계의 소스코드

 

$message = htmlspecialchars( $message );

htmlspecialchars() 함수는 &, ", ', <, >와 같은 특수문자들을 HTML 엔티티로 변환해주는 함수이다. 변환된 문자열은 웹 브라우저가 읽더라도 더 이상 스크립트로 처리하지 않게 된다. 

 

마찬가지로 리플렉티드 크로스 사이트 스크립팅 공격 역시 이와 같은 방법으로 대응할 수 있다. 이렇게 공격을 막기 위해서는 사용자 입력값을 웹 페이지에 출력될 때 지금처럼 특수문자들을 제대로 변환시켜 주어야 한다. 입력값 검증을 통해 파라미터의 입력값에 불필요한 문자열이 포함되지 않도록 하는것 역시 공격을 차단할 수 있다.

'Study records > Web hacking' 카테고리의 다른 글

[Beebox] iframe, OS, PHP, SSI 인젝션  (0) 2024.06.21
[Beebox] HTML 인젝션  (0) 2024.06.20
커맨드 인젝션 공격  (0) 2024.05.25
SQL 인젝션 공격  (1) 2024.05.24
취약한 인증 공격  (0) 2024.05.24