[A-1 Injection]HTML Injection - Reflected (URL)
본 실습에 들어가기 앞서 해당 실습 내용인 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태그를 삽입하여 실습을 하였다.