Quest. HTML Injection이 무엇인지 정리하시오.
공격자가 서버에 전달되는 정보에 악의적인 코드를 삽입하여 의도하지 않은 동작이 수행되거나 서버 또는시스템 등 중요정보를 획득할 수 있는 공격이다.
Quest. 아래 화면을 출력하시오.
① level low
먼저 이 페이지가 어떻게 동작하는지 보기 위해 아무 단어나 입력해봤다. 그런 후 검사를 통해 HTML소스코드를 확인해봤더니 입력 데이터가 HTML 코드사이에 그대로 삽입이 되는 걸 확인할 수 있었다.
따라서 입력에 <h1>SUCCESS</h1>와 <img>태그를 주었고, 위 사진처럼 원하는 결과를 도출했다.
② level medium
low level일 때와 같은 방법으로 시도한 결과 태그를 인식하지 못하고 문자열이 출력되는 것을 볼 수 있다.
level low와의 차이점을 알아보기 위해 url의 htmli_get.php 파일을 확인해봤다.
htmli_get.php 파일을 확인해보니 난이도 별로 동작 함수가 다르다는 걸 알 수 있었다. level medium은 case가 1인 경우로 xss_check_1 함수를 확인해봤다.
위 함수를 보면 $data 변수에 입력된 문자열 중 <, >을 <, >로 인코딩 하는 것을 알 수 있다. 이때문에 태그가 정상적으로 인식이 되지 않아 단순 문자열로 출력된 것이다.
이럴 땐 <를 %3C, >를 %3E로 변환하면 원하는 결과를 얻을 수 있다.
③ level high
htmli_get.php에서 htmli 함수를 보면 level high(case 2)일 때 xss_check_3 함수가 실행되는 것을 확인할 수 있다.
xss_check_3 함수에서 htmlspecialchars 함수가 사용되는 것을 확인할 수 있다. htmlspecialchars 함수는 문자열에서 특정한 특수 문자를 HTML 엔티티로 변환하는 함수다. 이때 HTML 엔티티는 일정한 기능이 있는 문자를 단순한 일반 문자로 출력하기 위해 사용하는 코드다.
특수 문자 | 변환된 문자 |
& | & |
"" | " |
'' | ' |
< | < |
> | > |
이처럼 특수한 기능을 갖는 문자를 일반 문자로 취급하기 때문에 태그나 url encode 방식을 인식할 수 없게 된다. 따라서 level high에서는 실행목표를 달성할 수 없다.
때문에 htmlspecialchar함수를 사용하면 악성 사용자로부터 XSS 공격을 방지 할 수 있다.
* htmlspecialchars 구조
string htmlspecialchars ( string $string [, int $quote_style [, string $charset [, bool $double_encode ]]] )
*인자(paramiter)
string $string : HTML 엔티티로 변환할 문자열
int $quote_style : 이 값은 ''(홑따옴표) 와 ""(겹따옴표) 의 처리방식을 지정한다. 이 값을 생략 시 기본값은 ENT_COMPAT 를 갖는다. 이 값으로 올 수 있는 상수들은 아래와 같다.
ENT_COMPAT | 기본모드로, 겹따옴표만 변환 |
ENT_QUOTES | ''(홑따옴표) 와 ""(겹따옴표) 둘다 변환 |
ENT_NOQUOTES | ''(홑따옴표) 와 ""(곁따옴표) 둘다 변환하지 않음 |
string $charset : 이 값에는 변환에 사용할 문자셋을 지정할 수 있다. 이값을 생략하면 기본 문자셋 값으로 ISO-8859-1 을 갖는다.
bool $double_encode : 이 값은 이미 존재하는 HTML 엔티티를 encode 할지 않을 지를 true 와 false 값으로 지정할 수 있다. 이 값을 생략할 시 기본값은 true 를 갖는다.
'Study > Web Hacking' 카테고리의 다른 글
[bWAPP] Broken Auth. - Insecure Login Forms/Robots File (0) | 2020.10.31 |
---|---|
[bWAPP] SQL Injection (Login Form/Hero) (0) | 2020.10.04 |
[bWAPP] SQL Injection (GET/Search) (0) | 2020.09.25 |
[bWAPP] HTML Injection - Stored (Blog) (0) | 2020.09.20 |
[bWAPP] HTML Injection - Reflected (POST) (0) | 2020.09.19 |