power-girl0-0

HTML 인젝션 - 반사기법(GET & POST) 본문

웹해킹/Bee-Box

HTML 인젝션 - 반사기법(GET & POST)

power-girl0-0 2020. 3. 24. 11:07
728x90

안녕하세요-!! 오늘은 드디어 실습을 해보는 날입니다.

이번 글에서는 HTML인젝션 중 반사기법에 대해 실습할 예정입니다-!!

 

혹시 이론을 보지 못하신 분이 계시다면 이전 글을 참고해주세요-!! >.<

https://power-girl0-0.tistory.com/12

 

HTML 인젝션(Injection) 이론

안녕하세요-!! 이번에는 HTML 인젝션에 대해서 알아볼거예요😎 신나죠~~?? 저도 너무 너무 신나요-!! 오늘은 어떤 지식을 보따리에 담을지 다함께 출발~~!! 그전에-!!! Injection에 대해서 알아야겠죠?? 간단하게..

power-girl0-0.tistory.com

 


 

지금부터 실습을 진행하겠습니다.

먼저 로그인을 해야겠죠??

저번 블로그의 글을 보고 오신 분들은 벌써 로그인을 하셨을 거라고 생각이 듭니다.

만약 못보신 분들을 위해 아래에 링크 따라 보고 오시면 됩니당😁

https://power-girl0-0.tistory.com/13?category=763631

 

Bee-Box 실습 로그인

안녕하세요-!! bee-box실습전 간단하게 로그인 하는 법과 어떻게 접속하는지에 대해서 알려드리려고 왔습니다-!! 정말 간단해요-!! 눈 깜짝할 사이에 끝나니 눈깜박 조심하시고 출발---!! ① bee-box가상환경에서..

power-girl0-0.tistory.com


<GET>

 

먼저 레벨 순으로 실습하며 알아가 보도록 하겠습니다.

1. low

① 저희가 실습하려는 것은 반사기법의 Get방식이므로 다음과 같이 설정 후 Hack를 눌러줍니다.

 

② 클릭시 다음과 같은 화면이 출력되었습니다.

 

 

③ first name과 last name칸에 아무 내용이나 넣어보았습니다. (first : 1234 / last : 5555)

 

 

-> 그 결과 파라미터에 입력한 값이 출력되는 것을 확인할 수 있었으며 하단 끝에 welcome 뒤로 입력값이  그대로 출력되는 것도 확인할 수 있습니다.

 

④ 이번에는 html태그값을 넣어서 실행되는지 확인해보았습니다.

(first : <h1>hello<h1> / last : <img src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png>)

 

-> 결과 :  HTTP태그가 삽입되어도 정상으로 인식하고 삽입된 HTTP태그를 출력해줍니다.

 

==> 이와 같은 상황이 발생시 악성코드를 삽입하여도 정상으로 인식하고 출력해줌으로써

        사용자를 해킹할 수 있습니다.

 

2. medium

① level을 medium으로 바꿔줍니다.

 

 

② medium단계에서도 low단계와 같이 HTTP태그를 그대로 입력해보겠습니다.

(first : <h1>hello<h1> / last : <img src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png>)

 

->  결과 :  low단계와는 다르게 입력된 태그가 실행되지 않고 화면에 문자열이 그대로 출력되는 것을 확인할 수 있습니다.

 

③ 원인을 알기 위해 소스(htmli_get.php)를 확인해보았습니다.

( 경로 : /var/www/bWAPP )

 

더보기

selections.php 소스를 확인한 결과 case 1이 medium레벨에 속하다는 것을 알 수 있었습니다.

 

-> 결과 : 데이터 값에 함수가 적용된 것을 확인할 수 있습니다.

 

④ 어떤 함수인지 함수가 정의된 functions_external.php를 확인해 봅시다.

-> 결과 : medium단계에서는 태그가 필터링 되기 때문입니다-!!

            대책 방안으로는 태그에 사용된 것을 URL 인코딩하는 것 입니다. 

*  URL 인코딩이란?

: 아스키 코드의 HEX(=16진수) 값에서 %를 붙인 값을 의미합니다.

 

더보기
출처: https://super-cert.tistory.com/entry/url-인코딩-표

 

⑤ 태그에 사용된 '<'와 '>'를 URL 인코딩하여 입력하여 봅시다.

 

*  '<' = %3c    /    '>' = %3e 

 

(first : %3ch1%3ehello%3ch1%3e /

last : %3cimg src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png%3e)

 

-> 결과 : 태그가 실행되어 출력됨을 확인할 수 있었습니다.

 


high단계는 POST방식에 대해 실습하고 마지막 대응방안 때 실습해보도록 하겠습니다.


< POST >

 

POST도 단계별로 실습해보도록 하겠습니다-!!👍💖

 

이번에는 POST방식이라서 프록시 도구인 burp suite를 사용해서 변수값을 전달하겠습니다.

 

1. low

 

 먼저 로그인 후 post방식의 실습에 접속하여줍니다.

 

 

Bee-Box 실습 로그인

안녕하세요-!! bee-box실습전 간단하게 로그인 하는 법과 어떻게 접속하는지에 대해서 알려드리려고 왔습니다-!! 정말 간단해요-!! 눈 깜짝할 사이에 끝나니 눈깜박 조심하시고 출발---!! ① bee-box가상환경에서..

power-girl0-0.tistory.com

 

② 이제 burp suite 사용을 준비해주세요-!!

 

 burp suite 사용준비 방법 : https://power-girl0-0.tistory.com/16?category=763631

 

window에 프록시 도구인 burp suite 설치하기

안녕하세요-!! 이번에는 프록시 도구인 burp suite를 설치해보록 하겠습니다. 그 전에 간단하게 용어 설명하고 넘어갈게용-!! 프록시(Proxy)란? 클라이언트와 서버 사이에서 데이터를 전달하는 서버입니다. Burp s..

power-girl0-0.tistory.com

 

 

 

③ 먼저 아무 값이나 넣어서 burp suite로 잡아보았습니다.  (first : aaa   / last : bbb)

-> 결과 : burp suite에 전송한 패킷이 잡힌 것을 확인할 수 있습니다.

 

 잡힌 패킷 값을 http 태그로 변조 후 전송(response)해보도록 하겠습니다.

 

(수정 후 forward버튼을 클릭하여 response한다.)

(first : <h1>hello<h1> / last : <img src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png>)

 

⑤ 다음과 같이 burp suite를 이용하여 값을 변조시킨 결과 http태그로 변조되어 출력되었습니다.

 

 

2. medium

 

① level을 medium으로 바꿔줍니다.

 

 

② 먼저 HTTP태그를 입력해보도록 하겠습니다.

(first : <h1>hello<h1> / last : <img src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png>)

 

 

③ 다음과 같은 결과값이 나옵니다.

 

④ 원인을 알기 위해 소스를 확인해보았습니다.

 

-> 결과 :  get방식에서 사용한 함수가 사용되고 있다는 것을 알 수 있었습니다.

 

⑤ 따라서 url인코딩을 하여서 결과값을 다시 입력해보도록 하겠습니다.

(first : <h1>hello<h1> / last : <img src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png>)

 

* 그런데 전송되는 값을 잡아본 결과 공격자가 입력한 값과 다르다는 것을 알 수 있습니다.

Why? 왜그럴까요??

더보기

다음 사진처럼 위에 소스를 확인해보면 이해할 수 있습니다-!!

content-type이란 자원형식을 명시하기 위해 헤더에 실리는 정보라고 생각하시면 됩니다.

즉, request에 실어 보내는 데이터(body)의 type의 정보를 표현한 것입니다.

 

소스에 있는 content-type은  applicaation/x-www-form-urlencoded입니다.

이 타입은 content-type의 defualt type으로 body 내용을 인코딩해준다는 의미입니다.

-> 결과 : content타입이 application/x-www-form-urlencoded로 인하여 전송되는 값이 더블인코딩이 되어서 사진과 같은 결과값이 출력되었습니다.

더보기

더블 인코딩이 되는 이유?

url은 올바른 정보를 하기위해 특수문자를 인코딩을 해서 전송을 합니다.

따라서 post방식은 content-type에서 인코딩을 해주도록 설정되어있습니다.

그러므로 본문의 태그필터링을 피하기 위해서 인코딩을 1번해주고 content-type에 의해 인코딩이 한번 더 되어서 더블 인코딩이 되는 것입니다.

 

 

-> 결과 : 다음과 같이 url인코딩을 하니 태그가 출력된 것을 확인할 수 있습니다.

 

3. 대책방안 (high레벨 참고)

: HTML태그에 사용되는 문자들을 인식하지 않고 인코딩되도록 htmlspecialchars함수를 이용하여 HTML 인젝션을 방어합니다.

 

htmlspecialchars함수가 어떻게 사용되었는지 get방식의 high레벨을 통해서 알아보도록 하겠습니다.

 

① 레벨을 high로 바꿔줍니다.

 

 

② 바로 URL인코딩한 것을 입력해보도록 하겠습니다.

(first : %3ch1%3ehello%3ch1%3e /

last : %3cimg src = http://본인의 beebox의 ip주소/bWAPP/images/bee_1.png%3e)

 

-> 결과 : 태그를 URL인코딩해도 문자열로 출력되는 것을 확인할 수 있습니다.

 

 

③ 그럼 high레벨의 소스(htmli_get.php)를 한 번 확인해보도록 하겠습니다.

( 경로 : /var/www/bWAPP )

 

-> 결과 : 데이터 값에 함수가 적용된 것을 확인할 수 있습니다.

 

 

④ 어떤 함수인지 알기 위해 함수가 정의된 functions_external.php를 확인해 봅시다.

 

-> 결과 :  high레벨에서는 htmlspecialchars 함수로 입력값을 우회하고 있음을 알 수 있었습니다.

 

 

잠깐-!! htmlspecialchars함수란?

PHP에서 제공하는 기본 함수로, HTML에서 사용하는 특수문자를 UTF-8로 반환해주는 함수입니다.

UTF-8이란 1바이트부터 4바이트까지 인코딩해주며 아스키코드도 호환이 가능합니다.

이 함수에서 변환하는 특수문자로는 &, " , ' , < , > 가 있습니다.

--> 따라서 아까 번에서 인코딩된 특수 문자를 입력시에도 파라미터 값에서는 htmlspecialchars함수가 적용되어 출력된 것을 확인할 수 있습니다.

 

post방식의 소스도 get방식과 같이 htmlspecialchars함수로 우회되고 있음을 확인할 수 있습니다.

 

->get과 같은 함수를 사용하고 있음을 확인할 수 있습니다.

 

 

=> 결론

     : 대책방안은 htmlspecialchars함수를 이용하여 태그가 인식되지 않게 UTF-8로

       인코딩을 하자-!!

 


 

이것으로 반사기법에 대한 실습을 마치겠습니다-!!

다들 재미있었나요?? 다음은 반사기법에 대한 실습을 가지고 올게용~!!

그때까지 bye-!!🖐

728x90
Comments