С наступающим новым годом и рождеством.
Суть данной статьи показать еще один вектор атаки которая не сложна в реализации но достаточно эффективная при правильном использовании. Постараюсь максимально простыми словами описать как самому написать спамер web form.
Бывает случаи когда нужно подпортить бизнес в интернете. Ситуации когда такое может случиться бывают разные. Речь пойдет о сайтах такого рода как интернет магазины или сервисы по бронированию чего либо, суть которых обработка заказов через свой сайт. Одним из вектором атаки может стать спам. Суть которого заключалась сделать так чтобы стало невыносимо обрабатывать заказы. В свою очередь это приведет к ухудшению работы сервиса так как скорость ответа реальным клиентам упадет, а когда они начнут бороться со спамом и усложнять форму это приведет к потери реальных клиентов.
В данной статье рассмотрим простой пример без усложнений в виде капчи, подтверждение по телефону и т.д. Я хочу показать общий принцип реализации, если вам данная тема будет интересна то можно будет в нее углубиться.
Для того чтобы реализовать задуманное нам понадобиться
Ссылка скрыта от гостей
и библиотека
Ссылка скрыта от гостей
.Предположим сайт который мы хотим заспамить находиться по адресу
Ссылка скрыта от гостей
на нем есть форма "заказа трансфера". Она включает в себя четыре поля:![24523 24523](https://codeby.net/data/attachments/21/21129-f72cd7a16c040f061f02bf0573a106e9.jpg)
Перед тем как начать писать код нам надо собрать некоторые данные о самой форме.
Для того чтобы понять куда нам надо отсылать данные и какие данные нужны воспользуемся devtools который входит в состав любого браузера. В chrome его можно открыть нажав F12.
Перейдем на вкладку Network и очистим все запросы чтобы легче было найти нужный запрос после отправки формы.
![24524 24524](https://codeby.net/data/attachments/21/21130-da483674f31f831e7e5972735a6cbb49.jpg)
Не закрываем devtools заполняем форму и нажимаем отправить. После того как нажали отправить сразу побегут запросы. Наша задача найти нужный. Для более быстрого поиска отфильтруйте по методам, post методы должны быть сверху.
![24525 24525](https://codeby.net/data/attachments/21/21131-b832479ecaf4eb96cd878139b8b2f957.jpg)
Если данной колонки нет нажимаем правой кнопкой мыши на status и выбираем method. Затем начинаем искать запрос. Нажимаем на каждый запрос и ищем содержимое form data которое будет соответствовать заполненным данным при оправке.
![24526 24526](https://codeby.net/data/attachments/21/21132-654310b8015eb7fa0a37ea0731a50451.jpg)
В Form Data мы видим какие данные нам потребуется передать чтобы все конкретно отработало. Чуть выше во вкладке General показано на какой url был отправлен запрос.
![24527 24527](https://codeby.net/data/attachments/21/21133-ad1394ea1bcdd413a89baf785a472bf6.jpg)
Позже он нам понадобиться как и имена параметров в Form Data. Также на вкладке Response мы можем увидеть ответ сервера. На каждой форме ответ может быть разные. В моем случаи это json который содержит
{"status":true,"title":"Мы получили ваше сообщение","message":"Мы свяжемся с вами как можно скорее. спасибо"}
. В последующем я воспользуюсь данным ответом что бы понять успешно ли был выполнен запрос.Request URL:
Response:
Form Data:
https://site.local/contact
Response:
{"status":true,"title":"Мы получили ваше сообщение","message":"Мы свяжемся с вами как можно скорее. спасибо"}
Form Data:
ContactForm[subject], ContactForm[name], ContactForm[phone], ContactForm[email], ContactForm[body]
И так на этом сбор данных закончен. Теперь у нас есть все что бы приступить к написанию спамера.
Python:
import json
import requests
# Объявляем url на который будет отправляться данные
url = "https://site.local/contact"
# Формируем post данные требуемые для отправки формы
post_data = {'ContactForm[subject]': 'Трансфер', 'ContactForm[name]': 'Даниил Аль', 'ContactForm[phone]': '7318293112', 'ContactForm[email]': 'pocecuyoro@cliptik.net', 'ContactForm[body]': 'Test'}
# Количество запросов
lime = 5
# Количество выполненных запросов
inc = 0
while lime > inc:
# Выполняем запрос
r = requests.post(url, data=post_data)
# Декодируем json который пришел к нам в ответ
data = json.loads(r.text)
# Проверяем статус ответа, если true тогда пишем в консоль ОК
# если false то выводим содержимое ответа в консоль и прерываем цикл
if data['status']:
inc += 1
print('OK')
else:
print(r.text)
break
Вот и готов наш спамер) занял он менее 30 строк кода с комментариями. Для реальной задачи этого будет недостаточно, потребуется генерировать уникальные правдоподобные данные что бы их не могли отличить от реального клиента. Но суть статьи не в этом. Я хотел ознакомить вас с принципом реализации подобных вещей так как если он вам будет понятен то реализовать грамотный спамер не составит труда.
В какой то момент данный спамер перестанет работать, так как добавят капчу или подтверждение по sms. Но это не проблема, подобные меры защиты обходяться в считанные минуты или часы, в зависимости от задачи и требует небольших вложений на оплату таких сервисов как
Ссылка скрыта от гостей
.Для того что бы бота было сложнее вычислить можно имитировать поведения человека с использованиям
Ссылка скрыта от гостей
. Если будет интересно могу описать как сделать простой спамер web form с использованием
Ссылка скрыта от гостей
.
Последнее редактирование: