웹 진단/bWAPP 실습

[A-1 Injection]HTML Injection - Reflected (URL)

보안개구리 2024. 6. 14. 11:34

 본 실습에 들어가기 앞서 해당 실습 내용인 htmli_current_url.php에 대한 정보를 먼저 확인해보겠다.

 

 해당 내용을 살펴보면 $url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];가 있다.

 $_SERVER["HTTP_HOST"] 라는 것은 사이트 도메인을 말하고 $_SERVER["REQUEST_URI"]는 현재 페이지에서 사이트 도메인을 제외한 것을 말한다.

 현재 실습사이트를 예로 들면 http://192.162.200.130/bWAPP/htmli_current_url.php가 있다고 할 시 http://192.162.200.130 부분이 HTTP_HOST이고 bWAPP/htmli_current_url.php를 포함해 뒤에 나올 파라미터 값들이 REQUEST_URI값이다.

 

 [Low Level]

  low level로 하여서 실습을 시작하면 따로 입력 창 없이 저 화면만 보이게 된다.

 혹시 몰라 기존 GET방식 처럼 주소창에 img 태그를 삽입해보겠다.

 

 별 다른 수확은 없다.

 그렇다면 이번에도는 버프스위트라는 툴을 이용하여 살펴보겠다.

 

 버프스위트를 통해 다시 접속해보면 처음 POST 요청을 한 후 302가 떨어진 후 다시 GET 방식으로 요청한다.

 이 때 헤더 정보에 h 태그를 삽입해보겠다.

 

 이번에는 정상적으로 실행되는 것을 확인하였다.

 

 

[Medium Level]

 Low level과 마찬가지로 버프스위트를 사용하여 h태그를 삽입했더니 아무런 정보가 나오지 않는다.

 case 1에 대해 보면

 case "1" :
        $url = "<script>document.write(document.URL)</script>";
        break;

  식으로 나오는데 document.write는 출력하라는 의미이고 (document.URL)은 주소를 말한다.

 현재 실습창에서 F12를 눌러 Console로 접근 후 document.write(document.URL)을 입력하면

 위와 같이 현재 주소가 나오는 것을 확인할 수 있다.

 Medium Level 같은 경우는 스크립트 구문으로 주소가 나오는 방식인데 우회방법을 찾지 못했다.

 

 

[High Level] 

case "0" :
        // $url = "http://" . $_SERVER["HTTP_HOST"] . urldecode($_SERVER["REQUEST_URI"]);
        $url = "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
        break;

case "2" :
        $url = "http://" . $_SERVER["HTTP_HOST"] . xss_check_3($_SERVER["REQUEST_URI"]);
        break;

 case 0과 2를 비교한다면 기존 $_SERVER["REQUEST_URI"])부분에 xss_check_3가 적용된 것을 확인할 수 있는데 xss_check_3은 예전에 실습했던 것으로 htmlspecialchars를 사용하여 여러 특수문자들을 html 로 변환했었다.

 여기서 문제는 URI 부분만 체크를 하고 HOST부분은 따로 검증이 없다는 것이다.

 버프스위트를 통해서 HOST부분에 h 태그를 삽입해보겠다.

위에 보이는것처럼 Host 부분에 <h1> 태그를 앞쪽만 삽입하면 그걸 받은 서버 측에서는 <h1> 태그를 삽입한 상태로 응답 값을 보내주고 우리는 <h1> 태그를 받은 asds부터 그 이후 REQUEST_URI부분까지 전부 <h1> 태그상태로 볼 수 있다.

 여기서 Host 값에 h태그를 열기만 하고 닫지 않은 이유는 Host 값에서 h태그를 닫아주게 되면 오류가 발생하는 이유도 있고 사실 h태그는 닫는 게 중요하지 않기 때문에 이러이러한 이유로 앞쪽에만 작성하였다.

 물로 Low Level에서도 같은 방식으로 실습을 할 수 있다.

 

 정리하자면 High Level의 경우 Low Level과는 다르게 뒤쪽 REQUEST_URI부분에 xss_check_3 함수가 적용되어 있어 injection을 적용하지 못하나 Host는 검증하는게 없기 때문에 Host부분에 h태그를 삽입하여 실습을 하였다.