bWAPP - 1. HTML injection - Reflected (GET)

Web hacking|2022. 1. 23. 13:48

                                1. bWAPP - HTML Injection - Reflected (GET)

 

 

 

HTML Injection - Reflected (GET)

-> URL에 악의적인 HTML 태그를 삽입하여 링크를 클릭한 사용자의 PC에서 HTML 태그가 실행되게 하는 공격

 

 

 

HTML Injection - Reflected (GET)

HTML 인젝션은 코드 인젝션 공격의 하위 개념으로, 취약한 매개변수에 악의적인 HTML 코드를 삽입하는 공격입니다.

공격자는 사용자가 연결을 요청한 페이지에 HTML 태그를 삽입하여 의도하지 않은 내용을 보게 하거나 악의적인 사이트에 연결 시킬수 있습니다.

 

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

특히 GET 방식은 데이터를 전송할 경우 URL에 변수명과 입력 값을 노출하게 됩니다.

 

 

 

 

헤딩 태그 - 제목 표기에 많이 사용

<h1> HTML Injection TEST </h1>

 

이미지 태그 - src 속성에 입력한 경로의 이미지 출력

<img src=http://127.0.0.1/bWAPP/images/nsa.jpg>

 

 

 

GET 메서드로 요청하기 때문에 웹 브라우저의 URL 입력 부분에 변수가 노출되고, URL 입력란의 'firstname' 'lastname'이라는 변수에 입력한 HTML 태그가 보이게 됩니다.

 

HTML 인젝션 결과로 웹브라우저에서 'Welcome' 메시지 밑에 삽입한 헤딩 태그와 이미지 태그 내용이 출력이 되면 삽입이 성공한 것입니다.

 

- Low 레벨 -

 

First name: qdqdqd

Last name : qfqfqf 입력 시

GET 방식으로 URL에 모두 노출되는 것을 알 수 있다.

 

- Low 결과 및 입력 값 -

First name: qdqdqd

Last name : <h1> qfqfqf </h1>

결과 : 제목 표기에 많이 사용하는 헤딩 태그를 이용하여 Low 레벨을 통과하였다.

 

 

 

 

 

- Medium 레벨 -

 

Medium 난이도에서는 HTML 태그를 입력 값으로 주게 되면 HTML 태그로 해석하지 않고 문자열로 준다.

 

First name: qdqdqd

Last name : <h1> qfqfqf </h1>

Low 레벨과 같이 입력을 했지만 문자열로 나타나는 것을 확인

 

해당 페이지 소스 확인 결과

submit 버튼을 눌렀을때 /bWAPP/htmli_get.php aciton이 일어나는 것을 확인했다.

 

vi /var/www/html/bWAPP/htmli_get.php

 

low 레벨은 no_check,

medium 레벨은 xss_check_1()

high 레벨은 xss_check_3() 이라는 함수로 데이터를 받는 것을 확인.

 

해당 php에 해당 함수들이 정의되어 있는 것을 확인할 수 있다.

 

vi functions_external.php

 

str_replace() 함수를 이용해서 < 또는 > 문자가 존재하면 &lt;, &gt; 로 변환하는 것을 확인

urldecode 를 이용해서 url 인코딩된 문자를 디코딩한다.

하지만 urldecode( )가 한번 사용되어 있기 때문에, 공격 코드에url인코딩을 해서 공격이 가능해진다.

 

<h1> qfqfqf </h1>

->

%3Ch1%3E%20qfqfqf%20%3C%2Fh1%3E

인코딩을 진행

 

- Medium결과 및 입력 값 -

First name: qdqdqd

Last name: %3Ch1%3E%20qfqfqf%20%3C%2Fh1%3E

해당 입력을 하게될 시 이번에는 성공하게된다.

 

 

 

 

 

 

 

 

 

 

- High 레벨 -

high 레벨에서는 xss_check_3 함수를 functions_external.php에서 정의내리고있다.

 

 

vi /var/www/html/bWAPP/functions_external.php

 

htmlspecialchars 함수로 입력값을 우회

 

 

htmlspecialchars 함수란

-  이 함수는 문자열에서 특정한 특수 문자를 HTML 엔티티로 변환한다. 이함수를 사용하면 악성 사용자로 부터 XSS 공격을 방지 할 수 있다. 변환되는 문자는 아래와 같다.

&(앰퍼샌드) -  &amp;

""(겹따옴표) -  &quot;

''(홑따옴표)  - &#039;

<(미만)      -   &lt;

>(이상)       -  &gt;

ENT_COMPAT : 기본모드로, 겹따옴표만 변환

ENT_QUOTES : ''(홑따옴표)  ""(겹따옴표) 둘다 변환

ENT_NOQUOTES : ''(홑따옴표)  ""(곁따옴표) 둘다 변환하지 않음


결국 HTML 태그를 방지하기위해서는 해당 htmlspecialchars 함수를 사용하여,

필터링하면 방지가 가능하다.

특수한 기능을 갖는 문자를 일반문자로 취급하기때문에 url encoding 방식을 인식을 할 수 없고

 

해당 high 레벨은 목표를 달성할 수 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글()