HTML Injection
Injection
인젝션 : 공격자가 악의적으로 주입한 데이터를 웹 애플리케이션에서 데이터베이스의 정상적인 쿼리 일부로 인식하고 실행할 때에 발생하는 취약점
데이터를 입력받거나 데이터베이스 정보를 요청하는 곳에는 인젝션 공격이 가능하다. 공격 방법이나 사용 언어에 따라 인젝션의 종류가 달라지는데, 대표적인 유형으로 SQL 인젝션, HTML 인젝션, OS Command 인젝션, LDAP 인젝션 등이 있다.
HTML 인젝션
HTML 인젝션 : 코드 인젝션 공격의 하위 개념으로, 취약한 매개변수에 악의적인 HTML 코드를 삽입하는 공격
공격자는 사용자가 연결을 요청한 페이지에 HTML 태그를 삽입하여 의도하지 않은 내용을 보게 하거나 악의적인 사이트에 연결 시킬 수 있다.
HTML 인젝션 중에 반사(Reflected) 기법은 URL에 악의적인 HTML 태그를 삽입하여 링크를 클릭한 사용자의 PC에서 HTML 태그가 실행되게 하는 공격이다.
Reflected(URL)

HTML Injectino-Reflected(URL) 항목을 선택하면 나오는 htmli_current_url.php는 현재 접속 중인 URL 주소를 출력하는 페이지이다.
이번 실습에서 목표로 하는 것은 쿠키 값을 출력하는 것이다.
난이도 low
/var/www/bWAPP/htmli_current_url.php로 접속하여 페이지의 소스 코드를 확인했다.

보안 난이도에 따른 url 변수 변화를 다루는 함수이다.

소스 코드에서는 $url이 출력된다.
현재 level은 low이기 때문에 $url에는 http:// + [HTTP host] + [Request URI] 형태로 입력된다.
burp suite를 이용해서 host와 uri에 cookie를 출력하는 코드를 삽입하면 될 것 같다.

burp suite를 이용해서 htmli_current_url.php에 접속하는 패킷을 가로챈 것이다.
GET 방식을 이용해서 uri를 요청하는데, 이 부분을 수정하면 될 것 같다.
url에 다음과 같은 스크립트를 삽입했다.
?<script>document.write(document.cookie)</script>
burp suite 화면은 다음과 같다.

forward를 하면 다음 화면을 확인할 수 있다.

cookie가 출력된 것을 확인할 수 있었다.
난이도 hard
난이도 medium은 host 혹은 uri로 입력을 받지 않는다.
따라서 medium을 넘어가고 hard를 확인했다.

현재 level은 high이기 때문에 $url에는 http:// + [HTTP host] + [Request URI] 형태로 입력되느데, uri는 htmlspecialchars를 통해 필터링이 발생한다.

역시나 스크립트가 필터링 된 상태로 출력된다.
html 코드만 이용해서는 우회를 할 수 없다.