2015-12-31 4 views
1

Я тестирую атаки XSS-уязвимости в Android. Для этого я разработал веб-представление, где я загружаю html-файл, который содержит простую форму для ввода имени и электронной почты. Содержимое файла HTML являются:XSS - Выполнение Javascript с PHP

<html> 
<body> 

<form action="search.php" method="get"> 
Name: <input type="text" name="name"><br> 
E-mail: <input type="text" name="email"><br> 
<input type="submit"> 
</form> 

</body> 
</html> 

Я отправить данные через получить к PHP-файл, который повторяет все, что написано в поле имени. Содержимое файла PHP являются:

<html> 
<head> 
<title> You searched for: </title> 
</head> 
<body> 
<?php 
    echo $_GET['name']; 
?> 
</body> 
</html> 

Теперь мое намерение состоит в том, чтобы написать Javascript внутри имя поля , так что, когда я повторяю это, скрипт выполняется. Нормальные строки, переданные в поле имени, успешно повторяются, поэтому я знаю, что php-код действительно работает.

Работает на: Mozilla Firefox.

Не работает: Chrome, Android Emulator, Android реального устройства.

EDIT: Я пропустил вход. Я добавляю Javascript в поле . Таким образом, вход может быть простой скрипт, такие как:

<script language="Javascript">alert("Hello");</script> 

Поскольку я не дезинфицировать вход, я ожидаю, что сценарий для выполнения. Вы можете обратиться к этому link за дополнительной информацией.

Но вывод представляет собой пустую страницу без вывода, что означает, что скрипт не выполняется.

Любые идеи?

Примечание: Я обеспокоен тем, что это не работает с эмулятором/устройством Android, поэтому, пожалуйста, не отвечайте за Chrome.

+0

Не знаете, в чем ваш вопрос. Что вы проходите? Что вы ожидаете, и что на самом деле происходит? –

+0

ну ваш вопрос непонятен. –

+0

Мой ответ был для Chrome, но в целом вы можете проверить, что происходит с описанной мной техникой. Многие современные браузеры нашли отражение в методах предотвращения XSS, поэтому вы можете проверить, попали ли вы с помощью XSS-предупреждения, если регулярный HTML-рендеринг, в то время как javascript будет отклонен. – Gray

ответ

1

Попробуйте использовать что-то иное, кроме тегов сценариев, например, некоторых html, таких как <b>hello</b>, и посмотреть, если они выделены полужирным шрифтом. В Chrome есть аудитор XSS, который блокирует отраженные атаки XSS. Проверьте консоль, чтобы убедиться, что это так.

Chrome будет иметь отметку в консоли, которая говорит:

Аудитор XSS отказался выполнить скрипт в «< странице >», потому что его исходный код был найден в запросе. Аудитор был включен, поскольку сервер не отправил ни заголовок «X-XSS-Protection», ни «Content-Security-Policy».

Вот родственная статья о security.se на нем: https://security.stackexchange.com/questions/53474/is-chrome-completely-secure-against-reflected-xss

Я только что видел вашу правку. Я отвечаю за хром, но я подозреваю, что ваше устройство Android использует аналогичную технику (у меня нет возможности тестировать). Если вы хотите, чтобы обойти аудитор, вы можете сделать что-то вроде:

<html> 
    <head> 
     <title> You searched for: </title> 
    </head> 
    <body> 
     <script> 
     <?php 
      echo $_GET['name']; 
     ?> 
     <script> 
    </body> 
</html> 

Затем вы можете сделать запрос как имя = тревога (1), и аудитор, вероятно, не будет блокировать его?.

+0

Привет, Серый, спасибо за ваши предложения. Вы правы, и ваши предложения работали в Chrome, а также в эмуляторе. Я подозреваю, что у эмулятора также есть тот же механизм для отклонения Javascript. Но для злоумышленника сервер php недоступен, поэтому я хотел бы знать, есть ли способ сделать это без изменения файла сервера. Для демонстрационных целей это просто отлично, но я действительно хотел бы, чтобы это можно было сделать с использованием первого способа, подобного тому, который указан в ссылке. +1 для входов. –

+0

Как злоумышленник (ну, имитированный), аудитор XSS может быть настоящей болью, но точно так же, как брандмауэр веб-приложений, вы не можете вставлять программное обеспечение безопасности поверх незащищенного кода и ожидать безопасности. Часто существует множество вариантов вокруг аудитора, но это зависит от того, как написан код. Нет универсального обхода (о котором я знаю), и Google, вероятно, заплатит вам щедрость за ошибку, если вы ее найдете (в зависимости от того, насколько она тяжелая). Вы можете сделать демоверсию, в которой вы выходите из атрибута, который не кодируется с помощью кавычек; Я уверен, что аудитор этого не поймет. например ' Gray

+0

и полезная нагрузка может быть чем-то вроде' x 'onload = alert1(); alt = "x' – Gray

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