본문 바로가기
Projects/애플리케이션 보안

[bWAPP] HTML Injection - Reflected (POST) 공격 실습

by rimystory 2025. 8. 18.

실습 환경 구축은 이 글에 설명되어있다. (https://rimystory.tistory.com/18)

 

1. 난이도: low

 

GET 메소드와 달리 POST 메소드를 사용하여 데이터를 전송하면 변수 값이 URL에 노출되지 않는다. (이론)

따라서 프락시 도구인 버프스위트를 사용하여 데이터를 가로채서 매개변수를 수정하여 공격해 볼 것이다.

 

버프스위트 다운로드 방법: (Window용, 칼리리눅스에는 이미 설치되어있어 burpsuite 명령을 사용하면 바로 실행이 가능하다.)

- 자바 JDK가 먼저 설치되어 있어야 함.

- 버프스위트 다운로드 페이지: https://portswigger.net/burp/releases/professional-community-2025-7-3?requestededition=community&requestedplatform=

- 시스템에서 프록시 설정을 켜야 버프스위트를 사용할 수 있다.

 

[설정화면]

 

버프스위트를 설치하고 실행하여 Proxy -> Intercept -> Intercept on 을 클릭한 후 브라우저로 돌아와

비박스 페이지에서 Go 버튼을 누르면 아래 사진처럼 HTTP 요청 정보를 볼 수 있다.

 

[입력화면]

 

인젝션 공격을 위해 빨간 박스 안의 내용을 입력(수정)하고 Forward를 누르면 요청을 전송한다.

firstname=<h1>Success</h1>

lastname= <img src=http://192.168.56.101/bWAPP/images/bee_1.png>

 

[실행화면]

GET 공격 때와 마찬가지로 Success+이미지가 뜬다. 공격 성공.

 

2. 난이도: medium

마찬가지로 버프스위트 인터셉트를 키고 프록시 설정을 키고 Go 버튼을 눌러본다.

 

[실행화면]

 

버프스위트에 뜬 요청을 눌러 변수에 인코딩한 값을 넣고 Forward를 클릭하여 요청을 전송한다.

 

[입력화면]

 

firstname=%3Ch1%3ESuccess%3C%2Fh1%3E
lastname= %3Cimg src=http://192.168.56.101/bWAPP/images/bee_1.png%3E

 

[결과화면]

 

인코딩한 태그가 문자열로 출력된다. (공격실패)

 

공격이 우회된 이유를 찾아보기 위해 처음 페이지에서 인코딩된 태그를 넣고 어떻게 인코딩하는지 알아본다.

 

[입력화면]

 

인터셉트 된 요청을 확인한다.

 

[결과화면]

firstname 값을 보면 더블 인코딩된 결과를 확인할 수 있다.

(더블 인코딩: 인코딩에 사용하는 '%' 문자도 인코딩되는 것)

 

 

따라서 다시 Go 요청을 해서 인터셉트하고 더블 인코딩한 태그를 입력한다.

 

[입력화면]

firstname=%253Ch1%253ESuccess%253C%252Fh1%253E

lastname= %253Cimg src=http://192.168.56.101/bWAPP/images/bee_1.png%253E

 

입력 후 Forward하여 요청을 보내고 홈페이지로 돌아와 확인해보면 공격이 성공하였음을 알 수 있다.

 

[결과화면]

 

3. 난이도: high

GET 방식과 마찬가지로 POST 방식의 소스 코드를 확인해보면

xss_check_3 함수를 통하여 입력 데이터를 우회하는 것을 볼 수 있다.

 

(대응방안)

GET 방식과 마찬가지로 htmlspecialchars 함수를 사용하여 UTF-8로 인코딩하면 HTTP Injection 공격을 막을 수 있다.

 

 

 

출처: [한빛미디어] 비박스 환경을 활용한 웹 모의해킹 완벽 실습