Code::Security/비박스(BWAPP)

비박스(bWAPP) A3 XSS - Reflected (POST)

태군 코드 2022. 7. 20. 14:17
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
 

A3 - XSS - Reflected (POST)

 

xss_post.php

'xss_post.php' 페이지는 POST 메서드를 사용하여 HTTP 연결 요청을 하는 페이지입니다. First name, Last name 칸에 값을 입력 후 Go 버튼을 누르면 GET 방식과 달리 URL 부분에 매개변수가 없는 것을 확인할 수 있습니다. 그 이유는 POST 메서드는 메시지 본문에 데이터를 포함하여 전송하기 때문입니다.

 

스크립트 코드 입력

먼저 XSS 취약점이 있는지 알아보기 위하여 First name 입력란에 스크립트 코드를 입력해 보도록 하겠습니다.

스크립트 코드가 실행되면 자신의 쿠키 값이 표시된 경고창을 확인할 수 있습니다.

 

<script>alert(document.cookie)</script>

 

쿠키값이 포함된 경고창 확인

 

경고창에 있는 확인 버튼을 클릭하면 원래 페이지를 보여주고 First name에는 스크립트 코드를 입력하였기 때문에 Last name에 입력한 값만 화면에 출력되는 것을 알 수 있습니다.

 

반응형

난이도 중

 

난이도 중

난이도 중에서도 XSS 취약점이 있는지 확인하기 위하여 First name 입력란에 스크립트 코드를 입력하고 Go 버튼을 누르면 동일하게 쿠키 정보가 나오는 것을 확인할 수 있습니다.

 

<script>alert('TEST');</script>

 

하지만 난이도 하와는 다르게 위의 스크립트 코드를 입력하면 스크립트 코드가 실행되지 않는다는 것을 알 수 있고, 특수 문자를 필터링을 한다는 것을 알 수 있습니다.

 

각각의 스크립트 코드를 살펴보면 문자열을 출력하는 스크립트 코드에는 작은따옴표가 있지만 쿠키 값 출력 스크립트 코드에는 작은따옴표가 없습니다.

 

하지만 작은따옴표를 사용하지 않고도 문자열을 출력하는 스크립트 코드가 있습니다. 스크립트 코드에 사용하는 'String.fromCharCode' 함수를 사용하여 아스키코드나 유니코드를 문자열로 반환할 수 있습니다.

 

<script>alert(String.fromCharCode(84,69,83,84))</script>

 

버프스위트를 사용하지 않아도 스크립트 코드가 실행되는 것을 알 수 있으나, POST 메서드를 사용하기 때문에 테스트시에는 버프스위트도 같이 사용해 보시기를 추천드립니다.

 

xss_post.php 소스코드 일부

xss.post.php 페이지의 소스 코드를 확인하 보면 난이도 중에서는 xss_check_4 함수를 사용하여 입력 데이터를 우회하는 것을 알 수 있습니다.

 

xss_check_4 함수

 

난이도 하 - 모든 스크립트 코드 실행

난이도 중 - ', ", \, NULL 문자를 포함하지 않는 스크립트 코드 실행

 

난이도 상에서는 xss_check_3 함수를 사용하는 것을 알수 있으며 xss_check_3 함수는 functions_external.php에 정의되어 있고 htmlspecialchars() 함수를 호출하여 문자열에서 특수문자를 HTML 코드 형식으로 변환합니다. htmlspecialchars 함수를 살펴보면 두 번째 인자에 ENT_QUOTES를 추가하여 XSS에 사용되는 문자들을 HTML 엔티티 코드로 변환하기 때문에 스크립트 코드를 입력하여도 웹 브라우저에서는 문자로 인식하게 됩니다.

반응형