Как то вечером моя подруга (она же и нарисовала обложку для этой статьи) переслала мне скриншот уведомления из вконтакта с вопросом "Меня пытаются взломать?". Да, это было сообщение от лица администрации с просьбой подтвердить учетные данные и с ссылкой на фишинговую страницу. Дело было вечером, делать было нечего. А я придумал себе новое развлечение...
Мне пришла в голову идея немного осложнить жизнь злоумышленникам, засорив им ложными учетными данными базу (или куда там они их кладут). Первое, что я сделал - сгенерировал файлы с логинами и паролями, более или менее похожими на настоящие:
$ cat ./LOGINS.txt
+79089672515
89025062502
89044251958
89023782243
+79041365572
+79227628906
89772794819
...
$ cat ./PASSWORDS.txt
20ddхfgk2d19kf
лал11Ёрyлфp
EMTk99хkd19kf
dgkgfАоmа5Ь
аhg9хhхk;
a600_hd12f0j
...
Да, на самом деле у большей части пользователей в паролях присутствуют слова или даже целые выражения, а не случайный набор символов. И тем не менее, мне сложно представить скрипт, с помощью которого можно отличить случайный набор символов от чего-то похожего на пароль.
Ок, мусор у нас есть. Но как этот мусор отправить на фишинговый сайт? Открыв код страницы я нашел форму отправки:
<form method="POST" action="" novalidate>
<dl class="fi_row">
<dd>
<input type="text" class="textfield" name="email" value="" placeholder="Телефон или email" />
</dd>
</dl>
<dl class="fi_row">
<dd>
<input type="password" class="textfield" name="pass" placeholder="Пароль" />
</dd>
</dl>
<div class="fi_row_new">
<input class="button wide_button" type="submit" name="submit" value="Войти" />
</div>
</form>
</div>
</div>
Ага, тут используется POST-запрос с такими параметрами, как email (последнее время вместо email используется номер телефона) и password. Ничего неожиданного, будем отправлять наши данные curl'ом. На коленках я набросал следующий скрипт:
while true
do
# Берем исходные списки логинов и паролей, перемешиваем и кладем в другой файл
# Это позволит передавать их каждый раз в новом порядке
tail LOGINS.TXT | sort -R > logins.txt
tail PASSWORDS.txt | sort -R > passwords.txt
for password in $(cat passwords.txt) do
for login in $(cat logins.txt) do
curl -d "email=$login&pass=$password" -X POST http://mvkcomo...ir/index2.php
done
done
done
Однако после запуска скрипта я столкнулся с проблемой: curl сообщал о 403 ошибке. Но после обращений к гуглу и консультации с моим товарищем @Jho00, я выяснил: некоторые web-сервера смотрят на заголовки (client, referer), и если по заголовкам видят, что запрос пришел от скрипта, а не от пользователя - запрос отклоняется.
Тогда я добавил в заголовках firefox в качестве клиента, и адрес той же самой страницы в качестве реферера. Зачем то эта страничка создавала еще и куки, тогда я выдернул куки из своего браузера и также передал curl'ом. В итоге вызов curl'а получился таким:
curl \
--cookie "sc_is_visitor_unique=rx9692532.1625826968.8A8EF5E926DD4F1158782565371F53D8.1.1.1.1.1.1.1.1.1&__test=0519c1a3df7c6a27eb6bcecadb3fa821"\
-A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" -d "email=$login&pass=$password" -H 'Referer: http://mvkcomo.co6.ir/index2.php'\
-X POST http://mvkcomo...ir/index2.php
После этого сообщение о 403 пропало. А через 2 часа непрерывной работы скрипта я обнаружил, что сайт перестал работать: при попытке открыть ссылку открывалась страница хостинга доменных имен. А попытки достучаться по ip-адресу были безуспешны.
Да, данное деяние ни как не поможет бороться со злоумышленниками, однако при совершении его я получил немного удовольствия.