Как то вечером моя подруга (она же и нарисовала обложку для этой статьи) переслала мне скриншот уведомления из вконтакта с вопросом "Меня пытаются взломать?". Да, это было сообщение от лица администрации с просьбой подтвердить учетные данные и с ссылкой на фишинговую страницу. Дело было вечером, делать было нечего. А я придумал себе новое развлечение...
Мне пришла в голову идея немного осложнить жизнь злоумышленникам, засорив им ложными учетными данными базу (или куда там они их кладут). Первое, что я сделал - сгенерировал файлы с логинами и паролями, более или менее похожими на настоящие:
$ 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-адресу были безуспешны.
Да, данное деяние ни как не поможет бороться со злоумышленниками, однако при совершении его я получил немного удовольствия.
Комментарии (36)
kerberos464
20.07.2021 19:05+5Файлик с паролями можно ещё разбавить реальными паролями из топ-100 или топ-500 паролей.
v1000
20.07.2021 19:20+8Еще в свое время народ баловался, выбирая на фишинговом сайте самую большую картинку, и запуская постоянное ее скачивание. Учитывая, что обычно такие сайты делали на дешевом хостинге, то они уходили в оффлайн от перерасходования лимита трафика.
amarao
20.07.2021 21:20+8Выборка в SQL, отсекающая записи, присланные IP адресами, с которых было прислано больше одной строчки.
Благие намерения, тривиально обходятся злоумышленниками. Вы потратили больше времени, чем они, они выиграли.
barbos6
20.07.2021 23:51+3Выборка в SQL, отсекающая записи, присланные IP адресами, с которых было прислано больше одной строчки.
Да, все без исключения хацкеры - дураки, не знающие об изрядных сетях за NAT.
Поэтому они сами себе всё сразу поотсекают на радость грамотным комментаторам... :)
marataziat
22.07.2021 10:35+1Конечно в теории могут попастся несколько человек на NAT, но по факту можно считать что 1 айпи = 1 человек. За NAT нужно расчитывать когда вы лимиты ставите например по запросам на айпи, чтобы когда несколько человек за 1 NAT сидят не получили бан за флуд запросами. Но для фишинга такое ненадо учитывать, тк каждый человек там случаен и NAT в расчет брать ненадо.
amarao
22.07.2021 11:47+1`where count > 100` - и мы имеем разумную фильтрацию.
Если вы, глядя на табличку, можете оттуда фигню выфильтровать, то Вася, налабавший фишинговый сайт, тоже может это сделать.
Т.е. воображать себя принцем на белом коне, повергающих злодеев-идиотов вы можете, но на практике ваш конь-на-палочке серьёзных дядь не впечатлит.
Абуза хостеру тоже малоэффективна, но хотя бы сколько-то эффективна.
Zalechi
27.07.2021 17:08Я так понял сайт лёг, значит эффект таки был достигнут, или?..
Update: прочитал ваше сообщение ниже о том, что сайт мог заблочить хостер по абузу поданному парраллельно акции автора статьи. Так или иначе, прикольно, что люди пытаются. ;) Не смотря на то, что это старый вид забавы, поколения растут, пуст забавляются, а нам материал на почитать пишут. Не все же в теме и то сё:)
mSnus
20.07.2021 22:20+4А через 2 часа непрерывной работы скрипта я обнаружил, что сайт перестал работать: при попытке открыть ссылку открывалась страница хостинга доменных имен. А попытки достучаться по ip-адресу были безуспешны.
Вряд ли вы их завалили, это даже не DDOS. Скорее либо вас забанили по ip, либо хостер их заблокировал за абьюз по чьей-то жалобе.
DVoropaev Автор
20.07.2021 22:26+4Вряд ли вы их завалили, это даже не DDOS.
Ну, я и не говорил. что это был DOS/DDOSСкорее либо вас забанили по ip
Скрипт я запускал на VDS, если бы они его заблочили по IP, то я бы с рабочего хоста видел, что сайт доступенamarao
22.07.2021 11:49+1Пока вы слали скамерам мусор, кто-то слал хостеру абузу, и был много более успешным чем вы.
Как это делать?
dig -t A fishing_site
Для каждого IP делаете whois, там будет адрес для абуз. Пишите абузу туда.
mickvav
21.07.2021 02:35+3Кавычку в поле воткнуть не пробовали?
JerleShannara
21.07.2021 15:02Где-то уже как с год Бобби «Брось Таблицу» стал редко подходить всяким рыболовам.
Pest85
21.07.2021 08:26+5Гораздо быстрее и надежнее связаться с хостинг провайдером и описать ситуацию. Они на фишинг очень оперативно реагируют - 20-30 минут и все заблочено.
Alexus819
21.07.2021 09:49+1И тем не менее, мне сложно представить скрипт, с помощью которого можно отличить случайный набор символов от чего-то похожего на пароль.
нет ничего сложного в валидации логинов паролей выполняя авторизацию скриптом
unsignedchar
21.07.2021 10:26нет ничего сложного в валидации логинов паролей выполняя авторизацию скриптом
Через пару неуспешных логинов в google, например, капчу придется решать, а так ничего сложного, да.Alexus819
21.07.2021 10:38ну речь то не про гугл а про ВК. и к тому же речь не про брут одного аккаунта а про проверку валидных и не валидных, т.е. аккаунты разные. и ни кто не запрещает использовать кучу бесплатных прокси. Хотя может я чего то не знаю про ВК, а такое вполне возможно потому что это просто помойка которую я стараюсь обходит стороной.
unsignedchar
21.07.2021 10:50Простой способ — просто сохранить данные, нарисовать соопчение «ой, неправильный парол» и отредиректить на правильную форму ввода пароля. Добавление прокси только усложняет схему. Я бы так не делал, например ;)
iiwabor
21.07.2021 10:32+1Интересно, что официальные власти фактически разрешают фишинг и тому подобные мошенничества- по телефону, например - преступников особо не ищут, по зомбоящику про это людей не информируют и тп.
Хотя найти и обезвредить мошенников легко, в современном мире все отслеживаеттся - звонки, письма, движение денег, и все механизмы явно есть - случай с ветераном, который сидел рядом с царем и которого обманули мошенники тому пример - нашли их моментально.
Вероятно, власть не считает мошенников серьезной угрозой - они же не ФБК...
firedragon
21.07.2021 12:17+5Вы жертва пропаганды, только с другой стороны.
В каждом магазине висит памятка о телефонных мошенниках, в том числе и фишинг упоминается.
На 1 канале регулярно сообщения как защится от мошенников.
Но вам важно сказать что власти вас в чем то притесняют
event1
21.07.2021 16:17+1Тут двоякая проблема. С одной стороны, вы правы, милиция могла бы и проявить активность. С другой стороны, если бы граждане на каждый случай мошенничества или попытки оного писали бы заявление, то органы были бы вынуждены реагировать. Но гражданам тоже лень.
Я как-то сам хотел было обратиться по такому поводу, но мне предложили распечатать электронную переписку и придти в участок, написать заявление. На этом мой энтузиазм иссяк.
vvzvlad
22.07.2021 13:34Как вы изящно в первом абзаце посетовали на то, что неразумным гражданам лень, а во втором оказалось, что вам тоже лень.
event1
23.07.2021 01:16про неразумных это вы сами присочинили. Я — про обычных. В своё оправдание могу сказать, что мошенники гарантированно находятся за границей и милиция их поймать не сможет. А в Интерпол по таким мелочам наверное не обращаются
ZennoPost
21.07.2021 21:58Хабр для меня всегда был местом, где собираются крутые дядьки, а публикуют статьи гуру своего дела. Не просто самоучки дилетанты, как я, а настоящие учёные, чей авторитет непоколебим, а каждым словом в посте можно зачитываться и получать тонны знаний.
Но чем дальше в лес, тем больше вот такой банальщины на подобии "как я провел выходные". Какой научный вес такой статьи? 0. Этот пост имеет право быть опубликованным на личной странице какой нибудь бабушки в одноклассниках
KizhiFox
21.07.2021 21:59+1О, мне как-то похожее пришло, и я таким же решил заняться. Даже скрипт остался. Копия странички с восстановлением пароля от ВК, из которой скорее всего данные прямо вконтакту и пересылаются.
Там немного больше полей просили отправить, но методом научного тыка выяснилось, что, всё, кроме "ref" (было частью самой ссылки) на результат запроса "окей, всё приняли" не влияет. Скорее всего отсеяли, не зря же уникальное поле добавили, но как минимум немножко удовольствия от самого процесса я получил, да и в асинхронных запросах попробовал разобраться (критика приветствуется).
Код
import requests import random import aiohttp import asyncio captcha = 'QWERTYUIOPASDFGHJKLZXCVBNM1234567890' count = 1 async def bullshit(): async with aiohttp.ClientSession() as session: global count newpass = ''.join([random.choice(captcha) for _ in range(random.randint(5, 20))]) body = { 'captcha_sid': str(random.randint(100000000000, 999999999999)), 'captcha_key': ''.join([random.choice(captcha) for _ in range(random.randint(5, 10))]), 'newpass1': newpass, 'newpass2': newpass, 'twofactor': '', 'login': '+7911' + ''.join([str(random.randint(1, 9)) for _ in range(7)]), 'oldpass': ''.join([random.choice(captcha) for _ in range(random.randint(5, 20))]), 'ref': '785878500', 'type': 'changepass' } async with session.post('https://vkrecovers.com/oauth2', data=body) as res: print(count, res) count += 1 loop = asyncio.get_event_loop() async def tasks_gen(): while True: yield asyncio.ensure_future(bullshit()) async def main(): async for _ in tasks_gen(): await bullshit() loop.run_until_complete(main())
rubyrabbit
23.07.2021 10:38+1Напрашивается создание Цифрового Ордена Белых Плащей для организованного вывода из строя вредоносных сайтов )
SanSYS
Хах, не все рыцари носят плащи )
Может благодаря вашим действиям им и пришлось свернуть кампанию на этом доменчике, авось кому-то и помогли даже (а мусорные данные от настоящих им будет просто отделить, по тем же IP/User-Agent)
DVoropaev Автор
Не думаю, что злоумышленники кладуд в базу с логинами/паролями useragent и ip
unsignedchar
Почему нет? Это не сложно. Я бы и время записывал, и referrer. Идея заливать фейковые данные родилась не вчера. Так что в эту схему нужно добавить tor proxy, и sleep на случайное время.
vrnvorona
Еще пароли брать из базы слитых чтобы было не очевидно.