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

htmli_get.php 페이지에서 GET 메서드로 HTTP 요청을 하였다면 htmli_post.php에서는 POST 메소드를 사용하여 데이터를 전송한다.
따라서 서버로 전송하는 변수 값이 URL에 노출되지 않는다.
따라서 burp suite를 이용하여 분석을 해야 한다.
이번 실습에서 목표로 하는 것은 다음과 같은 화면을 출력하는 것이다.

burp suite
웹 프록시 툴이다.
웹 브라우저만으로는 통신 간의 정보를 상세히 보기가 힘든데, 프록시를 사용하면 클라이언트의 요청 정보, 서버의 응답 정보를 확인할 수 있다.
또한 서버로 전송되는 정보를 변경하여 취약점 분석에 사용할 수 있다.
설치 참고
해킹툴 Burp Suite 설치 및 간단한 사용법 알아보기 :: 호빵둥이 IT Blog
허락받지 않은 해킹은 불법행위입니다. 본 포스트는 해당 프로그램의 사용법을 알려주는 것이며 법에 어긋나는 행위를 했을 경우 책임지지 않습니다. 안녕하세요! 이번에 Webhacking.kr 8번 문제를
h-bread.tistory.com
난이도 low

HTML Injection – Reflected(GET)에서 사용했던 태그를 입력해 보았다.
<h1>success</h1>
<img src="./images/bee_1.png">

방해 없이 성공할 수 있었다.
burp suite를 통해 클라이언트가 보낸 HTTP 요청 정보를 확인해 보았다.

<h1>success</h1> → %3ch1%3esuccess%3c%2fh1%3e
<img src="./images/bee_1.png"> → %ef%bb%bf%3cimg+src%3d%22.%2fimages%2fbee_1.png%22%3e
인코딩이 완료된 상태로 출력되는 것을 볼 수 있다.
난이도 medium
아까와 같은 입력을 주었다.

그랬더니 태그가 실행되지 않고 그대로 문자열로 출력된 것을 확인할 수 있었다.
원인을 확인하기 위해 버프스위트를 통해 프록시를 가로채 보았다.

security_level이 0에서 1로 상승한 것을 확인할 수 있었다.
security_level에 관한 것은 이전에 확인한 것처럼 functions_external.php에서 확인할 수 있다.

보안 레벨이 1(medium)면 xss_check_1($data)는 "<"를 "<"로, ">"를 ">"로 변환한 뒤 디코딩을 통해 데이터를 출력하는 것을 확인할 수 있다.
따라서 url 인코딩을 통해 이를 회피할 것이다.
<h1>success</h1> → %3ch1%3esuccess%3c%2fh1%3e
<img src="./images/bee_1.png"> → %ef%bb%bf%3cimg+src%3d%22.%2fimages%2fbee_1.png%22%3e
인코딩이 완료되었다.

이번에도 버프스위트를 통해 프록시를 가로채 보았다.

firstname과 lastname에 더블 인코딩이 되어서 한 번은 디코딩을 통해 상쇄되고 제대로 된 인코딩 값이 들어가서 의도대로 출력할 수 있었다.
난이도 high

인코딩한 값을 넣어보았지만 그것마저도 그대로 출력된다.
원인을 알아보기 위해서 프록시를 확인해 보았다.

이번에는 security_level이 2이다.
해당하는 코드를 살펴보았다.

htmlspecialchars라는 기본함수를 이용해서 입력값을 우회한다.
htmlspecialchars 함수는 문장내에 HTML코드가 들어가는 특수문자를 포함시켜 입력하고 화면으로 출력할 때, HTML의 특수문자가 HTML태그로 적용되는 것이 아니라 일반 문자로 인식되어 그대로 출력한다.
따라서 HTML 코드를 이용한 방법을 사용할 수 없게 되었기 때문에 원하는 대로 출력할 수 없다.