본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 1-2. 인젝션 [HTML 인젝션 (POST)]

by Robert8478 2023. 12. 11.

이번에는 POST 요청 메소드를 이용하여 HTML 인젝션을 해볼 것이다.
POST로 하기 때문에 서버로 전송하는 변수값이 URL창에 노출되지 않는다.


[난이도 하]

프록시 서버를 설정하거나 버프 슈트의 proxy 탭에 open browser를 눌러 버프슈트용 브라우저를 연뒤 bWAPP으로 이동한다.
bWAPP으로 이동 시에는 intercept is on 을 off로 바꿔놔야한다. on은 상태를 얻을 때에만 잠깐 틀어둬야한다.

이동 후 post로 가서 인터셉트 on 시킨 뒤 Go 버튼을 눌러보면 Content-type, User-agent 등 HTTP 요청 정보가 나온다.

여기서 밑의 firstname 부분에 전에 입력했던 html 태그를 입력한 뒤 Forward를 눌러서 POST로 요청을 보내보자.

그러면 정상적으로 html 태그가 적용되게 된다.

[난이도 중]
전 문제와 똑같이 해보겠다.
<>가 필터링 되는 거라면 각각 %3C와 %3E로 URL 인코딩하여 보내준다.
%3Ch1%3EHelloWorld%3C%2Fh1%3E 와
%3Ch2%3EHIHI%3C%2Fh2%3E 를 넣어보았다.

그런데 이번에는 문자열이 출력되었다.
그 이유를 확인하기 위해서 Firstname 입력칸에 태그를  입력한 뒤 그걸 인터셉트 해보았다.
firstname에 넣은 값이 인터셉트 했을때 다른 값으로 잡힌다면 서버가 어떠한 방식으로 인코딩 하는 것인지 볼 수 있다.

확인해 보았는데 버프슈트에 뜬 firstname값이 뭔가 이상하다.
난 분명 %3C를 넣었는데 %253C 가 되어있다.
이는 서버가 %3C 에서 %를 %25로 인코딩시키는 더블 인코딩이다.
그러니 %253C로 변경해서 넣으면 아마 정상적으로 동작할 것이다.


%253Ch1%253EHelloWorld%253C%252Fh1%253E 를 first name에
%253Ch2%253EHIHI%253C%252Fh2%253E 를 last name에 넣고 post 요청해보자.

그랬더니 성공적으로 적용된 것을 볼 수 있다.


[난이도 상]
이번에는 %3Ch1%3EHelloWorld%3C%2Fh1%3E 구문을 넣고 인터셉트를 해보았다.

그랬더니 %3C가 %253C로 변해있었다. 그래서 전에 사용했던 구문을 사용했더니 이번에는 %25253C가 되어있었다.
이는 특수문자 자체를 모두 필터링해버리는 htmlspecialchars를 사용하고 있다고 볼 수 있다.
GET 문제와 똑같이 htmlspecialchars를 사용하고 있어서 html 인젝션으로는 풀이하기 어렵다고 볼 수 있다.