[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 취약점이라고 매번 올라오니 내 입장에서는 아주 미치겠다.

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

카카오톡 플러스친구 채팅 : NCUBE.NET

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.