HTML Injection 이란 웹 어플리케이션의 보안 취약점 중 하나로 이름 그대로 HTML 구문을 사용하여 공격자가 악의적인 HTML 또는 javaScript 코드를 웹 페이지에 입하는 공격이다. 이를 통해 웹페이지의 동작을 방해하거나 중요한 정보를 탈취 하는 등 사용자에게 피해를 주는 공격이다.
HTML Injection의 종류
웹 애플리케이션의 입력 처리 방식에 따라 HTML 인젝션의 유형이 두 가지로 나뉜다.
1. Reflected(반사)
URL에 악의적인 HTML 태그를 삽입하여 링크를 클링한 사용자의 PC에서 HTML태그가 실행 되게 하는 공격 종류
Refelcted는 또 데이터를 담는 방식에 따라 GET 방식 POST 방식 두 가지 방식으로 나뉜다.
1-1 GET
GET 방식은 주로 서버에서 리소스를 요청할 때 사용 하는 방식으로 정보 조회나 데이터 요청에 사용하며 요청할 때 데이터가 URL 에 포함된다.
1-2 POST
POST 방식은 주로 데이터를 전송할 떄 사용 되는 방식으로 정보를 제출하거나 데이터를 생성 시에 사용되며 데이터는 URL에 나타나는 GET 과 달리 BODY 부분에 데이터가 노출? 담겨진다
쉽고 간단하게 말하면 GET 은 요청하려는 데이터나 변수가 URL 에 그대로 나타나는 것이고 POST는 요청하는 데이터나 변수가 URL에 나타나지 않는다.
2. Stored(저장)
악의적인 HTML 태그를 데이터베이스에 저장하여 저장된 태그 내용을 확인한 사용자의 PC 에 HTML 태그가 실행되게 하는 공격이다.
Ex) 게시판에 악의적인 Script 구문을 게시하여 많은 사람들이 게시글을 봤을 때 악성 코드가 실행됨
Reflected 와 Stored 의 차이점
Reflected는 악성코드가 서버에 저장되지 않고 해당 URL으로 이동한 사람에게만 악성코드가 실행되지만
Stored는 악성 코드가 서버에 저장되어 다른 사용자들 에게도 영향을 끼친다.
HTML Injection -Reflected(GET) level --low

처음 화면에 들어가면 URL에 아무것도 없고 http://192.168.0.17/bWAPP/htmli_get.php 로만 써 있다.
이름을 입력해 보면

이름을 입력하니 위에 주소창이 길어졌다.
URL을 보면
http://192.168.0.17/bWAPP/htmli_get.php?firstname=kim&lastname=ji+min&form=submit
내가 입력한 내용이 URL에 그대로 반영이 되는 것을 볼 수 있다.
이것이 위에서 말한 GET 방식으로 내가 요청하는 데이터가 URL 에 포함이 된다.
이번에는 URL을 입력하지말고 URL으로 다른 이름을 입력해 보면
http://192.168.0.17/bWAPP/htmli_get.php?firstname=kang&lastname=jisu&form=submit

입력 바에 입력하지 않고도 내가 원하는 데이터를 입력할 수 있다.
http://192.168.0.17/bWAPP/htmli_get.php?firstname=<h1>kim</h1>&lastname=<h2>jisu</h2>&form=submit
이런식으로 HTML 기본 태그들도 입력하면 적용이 되는것을 알 수 있다.

http://192.168.0.17/bWAPP/htmli_get.php?firstname=<script>alert(document.cookie);</script>&lastname=jisu&form=submit
도 적용된다.
<script>alert(document.cookie);</script> ----- 자신의 쿠키를 보여주는 Script 구문
HTML Injection -Reflected(GET) level --midum
<h1>kim</h1>
<h1>kim</h1>
이렇게 입력하면

Low 레벨 처럼 HTML 태그가 적용이 안되는 것을 볼 수 있다.
직접 서버에가서 어떻게 차단하고 있는지 보면

입력 창에 < 혹은 > 가 들어가면 < , > (Html 엔티티) 로 대체 되도록 설정 되어 있다.
HTML 엔티티란 원래 < > 이런걸 치면 태그로 적용되는데 Html 엔티티는 컴퓨터가 읽을 때 < > 의 모습으로 보이지만 태그로 적용이 안된다. < > 나 & 같은 HTML 구문으로 오해해서 적용 될 특수 문자들을 컴퓨터가 오직 문자열 형식으로 읽음
URL 디코딩을 한 내용을 넣어보자
%3Ch1%3Ekim%3C/h1%3E

%3C = "<"
%3E = ">"
< ,>를 입력하면 HTML 엔티티로 변형되게 되어 있지만 HTML 엔티티와 다르게 인코딩을 한 언어로
컴퓨터에게 글을 보내면 컴퓨터가 읽을 때 %3C 를 < 으로 읽어서 HTML 태그로 적용된다.
HTML Injection -Reflected(GET) level --HIGH

위에 시도했던 모든 방식으로 해봐도 이건 그냥 못 뚫는다. ㅅㄱ
htmlspecialchars() : < > 이거 외에도 다른 특수문자 모두 HTML 엔티티로 변경
HTML Injection - Reflected (POST)

POST 는 GET 과 달리 URL에 내가 입력한 값이 노출되지 않는다.
그래서 Burp suite 로 프록시를 가로채 보면

이런식 으로 BODY 부분에 URL에서 나오던 입력한 데이터 값이 보인다.

이런식으로 위에 GET 방식으로 했던 것과 같이 다 적용된다.
HTML Injection - Stored (Blog)

입력하면 밑에 부분에 저장되는 방식
이것도 위에 한 html 적용되는 문구를 입력하면

이런 식으로 적용된다.
'모의해킹' 카테고리의 다른 글
| SQL Injection (0) | 2025.01.24 |
|---|---|
| PHP Code Injection (0) | 2025.01.23 |
| Server-Side Includes (SSI) Injection (0) | 2025.01.21 |
| OS Command Injection (0) | 2025.01.21 |
| iFrame injection (0) | 2025.01.20 |