Code::Security/비박스(BWAPP)

비박스(bWAPP) HTML Injection - Reflected (GET)

태군 코드 2018. 12. 27. 17:38
반응형

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

 

 

비박스를 로그인하면 위와 같은 화면이 나옵니다. 이번에는 OWASP 항목 중 하나인 인젝션에 대해서 살펴보도록 하겠습니다.

 

A1 - Injection

인젝션은 공격자가 악의적으로 주입한 데이터를 웹 애플리케이션에서 데이터베이스의 정상적인 쿼리 일부로 인식하고 실행할 때에 발생하는 취약점으로, 데이터를 입력받거나 데이터베이스 정보를 요청하는 곳에는 인젝션 공격이 가능합니다.

 

공격 방법이나 사용 언어에 따라 인젝션의 종류가 달라지는데, 대표적인 유형으로 SQL 인젝션, HTML 인젝션, OS Command 인젝션, LDAP 인젝션 등이 있습니다. 인젝션 공격 중 SQL 인젝션은 데이터베이스 언어인 SQL문을 사용하기 때문에 데이터베이스 내의 정보를 유출 또는 수정하거나 데이터베이스에 악성코드를 주입하여 사용자의 컴퓨터를 공격할 수 있습니다.

 

HTML 인젝션

HTML 인젝션은 코드 인젝션 공격의 하위 개념으로, 취약한 매개변수에 악의적인 HTML 코드를 삽입하는 공격입니다. 공격자는 사용자가 연결을 요청한 페이지에 HTML 태그를 삽입하여 의도하지 않은 내용을 보게 하거나 악의적인 사이트에 연결시킬 수 있습니다.

 

HTML 인젝션 중에 반사(Reflected) 기법은 URL에 악의적인 HTML 태그를 삽입하여 링크를 클릭한 사용자의 PC에서 HTML 태그가 실행되게 하는 공격입니다.

특히 GET 방식은 데이터를 전송할 경우 URL에 변수명과 입력 값을 노출하게 됩니다.

 

A1 - HTML Injection - Reflected (GET)

 

 

bWAPP에 로그인한 후 'HTML Injection - Reflected (GET)' 항목을 선택 후 [Hack] 버튼을 누르시면 다음과 같이 'html_get.php'라는 페이지가 나옵니다.

 

참고 사이트 - https://sql--injection.blogspot.co.uk

 

 

해당 사이트를 참고하시고 살펴보시기 바랍니다.

 

 

HTML 인젝션 공격을 위한 HTML 태그를 텍스트 필드에 입력합니다. 해당 입력한 HTML 태그 이외에도 인젝션 공격에 사용할 수 있는 다양한 태그가 있으니 테스트를 해보시기 바랍니다.

 

 

<script>alert(1)</script> 스크립트 구문 입력 시 팝업창입니다.

 

 

헤딩 태그 - 제목 표기에 많이 사용

<h1> HTML Injection TEST </h1>

 

이미지 태그 - src 속성에 입력한 경로의 이미지 출력

<img src=http://127.0.0.1/bWAPP/images/nsa.jpg>

 

 

위와 같이 입력하고 [Go] 버튼을 클릭하면 HTML 태그가 삽입된 페이지를 정상적인 페이지로 출력을 해줍니다.

 

http://127.0.0.1/bWAPP/htmli_get.php?firstname=%3Ch1%3E+HTML+Injection+TEST+%3C%2Fh1%3E&lastname=%3Cimg+src%3Dhttp%3A%2F%2F127.0.0.1%2FbWAPP%2Fimages%2Fnsa.jpg%3E&form=submit

 

GET 메서드로 요청하기 때문에 웹 브라우저의 URL 입력 부분에 변수가 노출되고, URL 입력란의 'firstname'과 'lastname'이라는 변수에 입력한 HTML 태그가 보이게 됩니다.

 

HTML 인젝션 결과로 웹브라우저에서 'Welcome' 메시지 밑에 삽입한 헤딩 태그와 이미지 태그 내용이 출력이 되면 삽입이 성공한 것입니다.

 

 

난이도를 중으로 올리고 페이지의 HTML 인젝션 취약점 여부를 확인해 보도록 하겠습니다.

 

 

동일하게 First name과 Last name에 HTML 구문을 입력 후 [Go] 버튼을 눌러보았습니다.

 

 

아까와는 다르게 입력한 태그가 실행되지 않고 화면에 문자열이 그대로 출력되는 것을 확인할 수 있습니다. 또한 GET 방식이기 때문에 URL 부분에는 동일하게 변수가 노출이 됩니다.

 

여기서 확인해볼 수 있는 것은 태그를 필터링한다는 것을 알 수 있습니다. 태그를 인코딩한 후 다시 입력을 해보도록 하겠습니다.

 

 

버프 스위트의 Decoder 메뉴를 이용하여 인코딩을 하였습니다.

 

 

Last name 부분에 인코딩한 값을 입력한 후 [Go] 버튼을 눌러보았습니다.

 

 

정상적으로 스크립트가 실행이 되는 것을 확인할 수 있습니다.

 

이번에는 참고사이트에 있는 스크립트 구문을 이용하여 공격을 수행해 보도록 하겠습니다.

 

공격 구문 (인코딩 필요)

"><h1><IFRAME width="420" height="315" SRC="https://www.daum.net" frameborder="0" onmouseover="alert('Welcome')"></IFRAME>123 </h1>

 

 

해당 공격 구문을 입력 후 [Go] 버튼을 눌러보았습니다. IFRAME 태그는 해당 페이지 내의 다른 페이지를 호출할 때 사용되는 태그입니다.

 

 

공격 구분 입력 후 페이지의 모습입니다. 다음 페이지가 호출된 것을 확인할 수 있습니다. 일단 에디트 박스 안에 값을 입력 시 값 입력수 길이 제한이 없어 쉽게 공격을 수행할 수 있었습니다.

 

bWAPP 폴더의 'functions_external.php' 파일을 살펴보면 'xss_check_3' 함수로 입력 데이터를 우회하는 것을 확인할 수 있습니다. htmlspecialchars 함수는 PHP에서 제공하는 기본 함수로, HTML에서 사용하는 특수 문자를 UTF-8로 반환합니다.

 

난이도 상

난이도 상에서는 xss_check_3 함수로 입력 데이터를 우회하고 있습니다. xss_check_3 함수는 functions_external.php에 정의 되어 있고, htmlspecialchars 함수로 입력값을 우회 합니다.

 

 htmlspecialchars 함수는 PHP에서 제공하는 기본 함수로, HTML에서 사용하는 특수 문자를 UTF-8로 반환합니다.

 htmlspecialchars 함수에서 반환하는 함수는 특수문자 &, ", ', <, > 입니다. 따라서 HTML 인젝션을 막으려면 htmlspecialchars 함수를 사용하여 HTML 태그에 사용되는 문자들을 인식하지 않게 인코딩 해줍니다.

 

 

 

반응형