일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 조건문
- property
- 메소드
- xss game 풀이
- 객체
- lord of sql injection
- suninatas 풀이
- 백준 파이썬
- 사칙연산
- 포인터
- document
- 백준 알고리즘
- 함수
- 김성엽 대표님
- 배열
- jQuery
- element 조회
- python
- burp suite
- github
- object
- xss game
- Pwndbg
- window
- 자바스크립트
- 파이썬
- htmlspecialchars
- IF문
- blind sql injection
- sql injection
- Today
- Total
power-girl0-0
HTML 인젝션 - 반사기법(GET & POST) 본문
안녕하세요-!! 오늘은 드디어 실습을 해보는 날입니다.
이번 글에서는 HTML인젝션 중 반사기법에 대해 실습할 예정입니다-!!
혹시 이론을 보지 못하신 분이 계시다면 이전 글을 참고해주세요-!! >.<
https://power-girl0-0.tistory.com/12
지금부터 실습을 진행하겠습니다.
먼저 로그인을 해야겠죠??
저번 블로그의 글을 보고 오신 분들은 벌써 로그인을 하셨을 거라고 생각이 듭니다.
만약 못보신 분들을 위해 아래에 링크 따라 보고 오시면 됩니당😁
https://power-girl0-0.tistory.com/13?category=763631
<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진수) 값에서 %를 붙인 값을 의미합니다.
|
⑤ 태그에 사용된 '<'와 '>'를 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방식의 실습에 접속하여줍니다.
② 이제 burp suite 사용을 준비해주세요-!!
→ burp suite 사용준비 방법 : https://power-girl0-0.tistory.com/16?category=763631
③ 먼저 아무 값이나 넣어서 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-!!🖐
'웹해킹 > Bee-Box' 카테고리의 다른 글
Bee-box를 window에서 사용하는 방법 (0) | 2020.03.25 |
---|---|
window에 프록시 도구인 burp suite 설치하기 (0) | 2020.03.24 |
Bee-Box 실습 로그인 (0) | 2020.03.24 |
HTML 인젝션(Injection) 이론 (1) | 2020.03.23 |
Bee-box 한글 깨짐 해결법 (0) | 2020.03.23 |