관리 메뉴

FU11M00N

2-2. bee-box 를 사용하여 HTML Injection 알아보기! 본문

Web Hacking/bee-box

2-2. bee-box 를 사용하여 HTML Injection 알아보기!

호IT 2020. 3. 16. 18:40

저번 포스팅에서는 GET방식의 Reflected 공격으로 html injection을 시현시켰는데요,

 

이번에는 POST 방식의 Reflected 공격으로 html injection을 시현해보겠습니다!

 

먼저 GET 메서드로 HTTP 요청하는 것과 POST 메서드로 HTTP의 차이점을 알아야 하는데요,

저번 포스팅에서 보셨듯이 GET 메서드로 HTTP 요청을 하게 되면 URL에 변수가 노출되어

공격자에게 허점을 보일 수 있는데요 POST 방식으로 메서드로 요청하게 되면 URL에 변수들이 URL에 노출이 안됩니다!

 

 

1. 레벨 low

그럼 직접 버프 스위트 프락시 도구를 사용하여 변수 값을 전달하는 구조를 확인해보겠습니다!

 

 

사진 1-1

우선 프락시 도구를 사용하여 확인해보니 firstname과 lastname의 매개변수가 노출되었는데,

이것에 악성코드를 작성하여 주입하여 Forward 버튼을 눌러 요청을 보내면

 

사진 1-2

성공적으로 코드가 주입되었음을 확인할 수 있습니다!

 

2. 레벨 medium

그럼 이번에도 레벨을 medium으로 변경하고 취약점을 확인해보겠습니다.

/var/www/bWAPP 안에서 htmli_post.php의 코드를 확인해보면

사진 1-3

case "1"는 xss_check_1으로 이동하게 되어 있습니다

 

xss_check_1는 get방식과 동일하게 

사진 1-4

GET 메서드의 전송 방식과 동일하게 '<'과 '>'를 각각 &lt , &gt으로 치환되고 있습니다.

 

그럼 burpsuite로 '<'과 '>'를 치환해보겠습니다!

사진 1-5

이렇게 코드를 작성한 뒤 forward를 하게 되면!

사진1-6

어.. 이게 무슨 일일까요 태그 값이 문자열로 그대로 출력되었는데요,,

 

사진 1-7

이를 확인하기 위해서 Firstname 입력 칸에 태그를 입력한 후 버프 스위트로 요청 값을 확인해보겠습니다.

사진 1-8

확인 결과 htmli_post.php 페이지에서는 더블 인코딩을 사용하는데요,

 

더블 인코딩이란 인코딩을 한 것에 또 인코딩을 하여 즉 % 문자도 인코딩하여 %25의 값이 나오게 됩니다.

 

또한! '<' 문자를 인코딩한 값이 % 3C인데, 이것을 한번 더 인코딩하여 % 253C가 되는 것입니다!

 

그럼 이것을 수정하여 다시 악성코드를 주입해보겠습니다!

사진 1-9
사진 1- 10

이렇게 코드를 주입하면

사진1-11

이렇게 코드가 주입이 되어 제가 원하는 hi!! 와 이미지가 html 홈페이지에 나왔습니다!

 

제가 만약 정말 심한 악성코드를 주입하여 이 홈페이지의 URL을 복사하여 다른 사용자에게 정상적인 홈페이지로 보내어

유인하면 피해자에게 막대한 피해를 줄 수 있습니다!

 

 

3. 레벨 High(대응방안) 

사진 1-3을 참고하면 레벨 High는 xss_check_3의 함수로 이동하게 되는데 이것은 이전 포스팅 get 방식과

같은 대응방법으로

사진 1-12

xss_check_3는 htmlspecialchars 함수를 사용하고 이것은 PHP에서 제공하는 기본 함수입니다.

HTML에서 사용되고 있는 특수문자를 UTF-8으로 반환하고 UTF-8은 유니코드의 한 문자를

1바이트로부터 4바이트까지 인코딩하며 아스키코드도 호환이 가능합니다.

 

즉 html injection을 대응하기 위해선 htmlspecialchars 함수를 사용하여 HTML에

사용되는 태그들을 인식되지 않게 해야 합니다.



출처: https://nevertrustbrutus.tistory.com/27 [IT가맛있다]

 

Reference by 비박스 환경을 활용한 웹 모의해킹 완벽실습

Comments