Code::Security/비박스(BWAPP)

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

태군 코드 2019. 1. 4. 15:08
반응형

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

 

A1 - Injection

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

 

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

 

HTML 인젝션

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

 

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

 

A1 - HTML Injection - Reflected (POST)

 

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

 

'htmli.post.php' 페이지에서는 POST 메서드를 사용하여 데이터를 전송하기 때문에 전송되는 변수 값이 URL에 노출이 되지 않습니다.

 

 

해당 필드에 HTML 태그를 입력한 뒤 [GO] 버튼을 눌러보도록 하겠습니다.

 

 

값을 입력한 후 [GO] 버튼을 누르면 <h1> 태그 문구와 팝업 문구가 실행되는 것을 확인할 수 있습니다. 하지만 URL 정보를 보시면 GET 방식과는 다르게 URL 정보가 노출이 되지 않는다는 것을 확인할 수 있습니다.

 

여기서 프락시 도구인 버프 스위트를 이용하여 변수 값이 어떻게 전달이 되는지 확인을 해보도록 하겠습니다.

버프스위트 설치 - http://securitycode.tistory.com/7?category=753968

 

버프스위트 설치 방법 및 사용법은 위에 링크와 블로그를 참고해 주시기 바랍니다.

 

 

값을 입력 후 버프 스위트를 이용하여 패킷을 잡은 모습입니다. 버프스위트 밑에 쪽에 보시면 fistname 변수 값이 인코딩 되어 값이 전달되는 것을 확인할 수 있습니다.

 

버프 스위트를 이용하여 패킷을 잡으신 후 'firstname' 변수와 'lastname' 변수의 값을 수정한 후 [Forward] 버튼을 클릭하여 요청을 보내면 해당 결괏값이 웹브라우저에 표시가 되니 해당 부분도 변경하면서 확인해 보시기 바랍니다.

 

난이도 중에서는 GET 방식과 마찬가지로 문자를 필터링합니다. GET 방식에서는 해당 부분을 인코딩하여 해결할 수 있었으나, POST 방식에서는 패킷을 확인해보면 이미 인코딩이 되어 있는 것을 확인할 수 있습니다.

 

여기서 취약점을 테스트할 수 있는 부분은 '더블 인코딩'을 사용하시면 됩니다. 더블 인코딩이란 인코딩에 사용하는 % 문자도 인코딩하는 것으로 % 문자의 인코딩 값으로 %25를 사용합니다. '<' 인코딩한 값이 %3C 일 때 더블 인코딩을 하면 %253C가 됩니다.

 

 

 

처음 프락시를 잡은 패킷을 한 번 더 인코딩하여 'firstname' 과 'lastname' 변수 값을 수정하였습니다.

 

 

값을 수정하신 후 버프 스위트에서 [Forward] 버튼을 눌로 값을 넘겨주시면 해당 HTML 태그가 실행되는 것을 확인할 수 있습니다.

 

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


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

 

 

 

 

 

 

반응형