XSS Me Warnings - реальные проблемы XSS? - PullRequest
1 голос
/ 20 января 2010

Я использую бесплатное расширение Firefox XSS Me от Security Compass для проверки проблем XSS. Однако, используя то, что я понимаю как безопасную фильтрацию, XSS me по-прежнему выдает предупреждения. Это точные предупреждения или ложные?

Использование кода ниже в качестве тестового примера:

<form method="post" action="">
<input type="text" name="param" value="<?php echo htmlentities($_POST['param'])?>">
<input type="submit">
</form>
<?php echo htmlentities($_POST['param'])?>

Я запускаю некоторые гадости вручную, но ни одна из них не выполняется в браузере, и с помощью Чарльз-прокси отладки Я вижу, что ответ закодирован, как и ожидалось.

Однако XSS Me сообщает о ряде предупреждений, как если бы он мог видеть некодированную строку в источнике HTML: альтернативный текст http://img696.imageshack.us/img696/8850/xss.png

В то же время, глядя на Чарльза, я вижу, что строки закодированы и должны быть в безопасности, например. &lt;IMG SRC=&quot;jav ascript:document.vulnerable=true;&quot;&gt;

  • Есть ли уязвимость, которую я не исправил?
  • Это мошеннические предупреждающие сообщения?
  • И если да, то другое расширение Firefox (Firebug?) Конфликтует с XSS Me?

Ответы [ 4 ]

5 голосов
/ 28 января 2010

Я работаю в Security Compass и являюсь ведущим разработчиком инструментов Exploit Me.

Вы правы, что XSS Me сообщает о предупреждении, поскольку кажется, что эти строки атаки (для XSS Me) вернулись с сервера полностью незашифрованными. Другой механизм синтаксического анализа / JavaScript (например, IE 6/7/8, Safari или Chrome) может выполнить этот код, даже если парсер Firefox и механизм JavaScript этого не делают.

XSS Me отправляет два запроса:

  • Один запрос, в котором мы обнаруживаем эксплуатацию с использованием движка JavaScript FireFox, который мы называем «ошибками»
  • Второй запрос, в котором мы обнаруживаем эксплуатацию, просто подбирая строку атаки на странице ответа HTML

Предупреждение, которое вы получаете, вызвано вторым запросом.

Я могу помочь вам найти причину этой проблемы, если вы можете сделать следующее:

  1. Используйте программное обеспечение для отслеживания пакетов (например, Wireshark http://www.wireshark.org/) для обнаружения строки атаки, а не Чарльза. Иногда прокси-серверы могут модифицировать или иным образом изменять запросы

  2. В Firefox, вы можете зайти в tools-> addons и отключить все расширения, кроме XSS Me? Таким образом, вы можете быть уверены, что никакое другое расширение не изменяет ответ (или запрос), прежде чем оно попадет в XSS Me.

  3. Просмотр исходной страницы ответов в Firefox, чтобы увидеть, появляется ли незашифрованная строка

Если вы хотите отправить мне электронное письмо (tom@securitycompass.com) с этими результатами, я был бы рад помочь выяснить это. Если это ошибка в XSS Me (на которую я, безусловно, надеюсь), тогда я могу ее исправить и получить новую сборку.

Спасибо

Tom

2 голосов
/ 20 января 2010

Я почти уверен, что это ложный позитив. Я думаю, что вы должны получить лучший инструмент для тестирования XSS. Acuentix имеет очень хороший и бесплатный сканер xss: http://www.acunetix.com/cross-site-scripting/scanner.htm. Wapiti и w3af с открытым исходным кодом, а также являются отличными сканерами.

В php лучший xss-фильтр:

htmlspeicalchars($_POST['param'],ENT_QUTOES);

Причина, по которой вам также необходимо декодировать кавычки, заключается в том, что вам не нужно <> использовать некоторые xss. например, это уязвимо для xss:

print('<A HREF="http://www.xssed.com/'.htmlspecialchars($_REQUEST[xss]).'">link</a>');

Вам не нужно <> выполнять javascript в этом случае, потому что вы можете использовать Вот пример атаки:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';

ENT_QUOTES заботится о двойных кавычках.

0 голосов
/ 20 января 2010

Я тестирую его на своем сервере и выглядит как ошибка в расширении. Я не верю, что любое другое расширение конфликтует с расширением "XSS ME".

Кстати, с htmlentities вы не охватите все возможности для вставки XSS, так что рассмотрите возможность использования некоторой анти-библиотеки XSS:)

0 голосов
/ 20 января 2010

Если в поле не предполагается наличие HTML, вы можете попробовать что-то вроде strip_tags($strings). Он удалит (большинство) HTML-тегов из строки.

Я говорю больше всего, потому что считаю, что он не идеален, и, как другие люди скажут вам, парсеры HTML, вероятно, лучше всего подходят для удаления HTML. Но в большинстве случаев этого должно быть достаточно.

...