실습 환경 구축은 이 글에 설명되어있다. (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 공격을 막을 수 있다.
출처: [한빛미디어] 비박스 환경을 활용한 웹 모의해킹 완벽 실습
'Projects > 애플리케이션 보안' 카테고리의 다른 글
| [bWAPP] PHP Code Injection 공격 실습 (0) | 2025.08.21 |
|---|---|
| [bWAPP] OS Command Injection 공격 실습 (0) | 2025.08.21 |
| [bWAPP] iFrame Injection 공격 실습 (0) | 2025.08.21 |
| [bWAPP] HTML Injection - Stored (Blog) 공격 실습 (0) | 2025.08.21 |
| [bWAPP] HTML Injection - Reflected (GET) 공격 실습 (0) | 2025.08.17 |