본문 바로가기
Web Hacking/Bee-Box

[ Bee-Box ] HTML Injection - Reflected(POST)

by 코뮤(commu) 2020. 3. 27.
728x90
반응형

 

 

POST 메소드를 사용하면 URL에 전송되는 변수 값이 노출되지 않습니다.

 

이번 포스팅은 버프스위트라는 프록시 툴을 사용해서 취약한 파라미터를 알아내고,

변수값을 전달하는 것을 다뤄보겠습니다!

 

 

 

 

우선 프록시 툴을 사용하려면, 프록시 설정을 먼저 해주어야합니다.

 

 

 

 

 

윈도우 키를 누르고 프록시를 검색하면 프록시 서버를 설정할 수 있습니다.

 

위의 그림과 같이 설정해주세요!

 

반드시 저장을 눌러주셔야 버프스위트가 정상적으로 동작할 수 있습니다.

 

 

다음은 버프스위트를 실행시키고, Proxy 탭에서 intercept is on 을 클릭합니다.

 

 

 

 

 

 

 

 

 

 

이와 같은 화면이 뜨면 됩니다.

 

 

 

 

 

 

 

프록시 서버를 설정하면 인터넷이 되지 않으므로, 프록시는

우리가 요청을 확인하고 싶을 때만 켜주면 됩니다.

 

 

 

 

 

HTML Injection - Reflected(POST) low(하)단계

 

 

 

 

 

 

 

 

첫번째 단계인 low는 get과 마찬가지로

 

 

hello

<h1>world</h1>

 

를 하면 h1태그를 인식합니다.

 

 

 

차이점이 있다면 POST방식에서는 URL에 취약한 변수가 보이지 않는다는 점 입니다.

 

 

버프스위트로 매개변수가 제대로 가는지 확인해보겠습니다.

 

 

 

프록시를 켜주시고,

우선 아무것도 넣지 않고 go를 눌러보겠습니다.

 

 

 

 

 

firstname이라는 매개변수와 lastname 변수가 보입니다.

태그값을 넣어보도록 하겠습니다.

 

 

 

 

 

 

매개변수에 각각 값을 넣고 Forward를 클릭하여 서버측으로 요청을 전달합니다.

 

 

 

 

 

 

 

 

버프스위트와 같은 툴을 통해 취약한 매개변수를 확인할 수 있고, 값도 변경할 수 있습니다.

 

 

 

 

 

 

 

HTML Injection - Reflected(POST) medium(중)단계

 

 

 

 

 

 

 

medium(중)단계는 h1태그를 문자로 인식하고 있는 것을 확인할 수 있습니다.

 

반사 POST 방식도 GET 방식과 같은 함수를 통해 값을 우회합니다.

 

 

GET방식과 같은 방식으로

 

hello

태그를 인코딩한 값을 넘기는 것을 버프스위트로 살펴봅시다.

 

 

 

 

go를 누르고 버프스위트로 요청값을 가로채서 확인해봅시다.

 

 

 

 

 

 

 

 

확인 결과 htmli_post.php 페이지는 더블인코딩을 사용합니다.

 

 

 

더블 인코딩?

 

더블인코딩이란, 인코딩에 사용하는 % 문자 또한 인코딩하는 것으로 % 문자를 인코딩하면 %25입니다.

만약 < 를 더블인코딩하면 %253C가 됩니다.

 

 

 

 

 

더블인코딩한 값을 서버에 넘겨주면 h1태그를 태그로 인식하는 것이 보입니다.

 

 

 

 

HTML Injection - Reflected(POST) high(상)단계

 

 

 

 

 

상단계의 함수도 GET방식과 같은 함수를 써서 서버에 데이터를 리턴해줍니다.

 

 

 

 

 

 

htmlspecialchars를 사용해서 특수문자를 우회하기 때문에 태그로 인식하지 않습니다.

 

 

 

 

 

 

HTML Injection 대응방안

 

 

 

HTML Injection 공격을 방지하려면 htmlspecialchars 함수를 사용해

태그에 사용하는 특수문자들을 인식할 수 없도록 인코딩해줍니다.

 

 

 

728x90
반응형