Здравствуйте. Хотел бы рассказать про спам-уязвимость форума 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.

Комментарии (49)


  1. ne_kotin
    02.10.2019 17:51
    +2

    запасся попкорном и ушел в «свежее», ждать воплей


  1. WhiteBlackGoose
    02.10.2019 17:53

    О, я игрался с пикабу. От имени пикабушников я конечно заявлю: пикабу НЕ форум. Ну а по делу: я считывал свои комментарии и состовлял список тех, с кем чаще всего пересекаюсь в комментариях. А еще пытался сделать отправлялку тегов на голосование, вроде все хедеры отправлял, но пикабу не пускал. В общем, не получилось, не знаю почему. Может кто запилит?


  1. doctorw
    02.10.2019 17:55
    +3

    Может стоило это и постить на самом Пикабу, а не Хабре?


    1. OneStoper Автор
      02.10.2019 19:34

      На Пикабу меня не поймут. Это не форум — стадо бездумных кликеров.


      1. Anton23
        02.10.2019 19:47
        +1

        Это смотря в какие темы заходить. Очень даже поймут.

        P.S. Смотря на голоса статьи я скорее вижу что тут вас не поняли


        1. dartraiden
          02.10.2019 19:59
          +2

          «Да как же тебя понять, коли ты ничего не говоришь». Тут дело не в аудитории, а в материале.


        1. OneStoper Автор
          02.10.2019 22:24
          -13

          Голоса статьи: -17.
          50% ставят \/ из-за того что она из «Песочницы»
          25% Не понимают о чем статья
          А еще 25% таких как ты. Не ценящих труд, и без юмора.


          1. WhiteBlackGoose
            02.10.2019 23:10
            +1

            1) Обычно статья из песочницы набирает больше, чем следующие статьи. Посмотрите мой профиль, первая статья остается одной из лучших моих. И это далеко не единственный случай.
            2) Сложно тут что-то не понять
            3) Ну как бы не зашло. Тут нужно не только минут много потратить, а угадать в аудиторию. И вы не угадали


            Я плюс статье поставил, если что. Но вот большинству не зашло. Попробуйте еще, больше ничего не посоветую)


          1. Tihon_V
            03.10.2019 10:12
            +2

            OneStoper,

            Во-первых, почему requests и threading, ведь это — не лучшая связка для скраппинга?
            Во-вторых, хабр техническое общество — ему нужны детали, а у Вас — «Ее я подробно объяснять не буду, просто выложу код». ИМХО: Хабр, может выполнять функции Твиттера, но не в это случае.
            В-третьих, с точки зрения проф. этики — стоило писать сначала сюда.

            ИМХО: Стиль кода сильно хромает.


      1. Wexter
        02.10.2019 22:16
        +1

        Не поймут потому что уже слили первый пост про школьный ддос на питоне?


        1. OneStoper Автор
          02.10.2019 22:29
          -13

          Здравствуй. Ты о чем?
          Я знаю питон достаточно хорошо, если ты не понял тему-не значит что она бессмысленна. Научись пользоваться тем что есть. Пока ты даже головой не пользуешься))Не буду с тобой прирекаться. Может ты лучше знаешь кто здесь — кто. Но я считаю что возможно тебе вернутся обратно к себе на пикабушечку, и чекать постики про аниме.


          1. Wexter
            02.10.2019 22:39
            +3

            Я про этот позор pikabu.ru/story/unichtozhenie_sayta_skriptom_na_python_v_polovinu_stranichki_6826578
            image
            Думаю вам всё-же стоит обращаться к незнакомым людям на «вы», ну и шутить более уместно, а не повторять шутки бати-алкаша


            1. OneStoper Автор
              02.10.2019 22:41
              -11

              OneStoper — известный soft-крякер по типу PC-RET. Его ник носит каждый 10 кодер.
              Если ты будешь кидать пруфы оскорблений каждого человека с таким ником-тебя забанят за спам))


              1. Wexter
                02.10.2019 22:43
                +5

                Общий ник, общий интерес к питону, общий стиль говнокода, общее желание что-нибудь взломать, общее высокомерное отношение к другим, да ещё и обидка на пикабу где вполне справедливо слили пост.
                Действительно мне показалось…


                1. GavriKos
                  02.10.2019 23:06
                  +2

                  До кучи — одинаковые подписки на сообщества в профиле и на скрине из статьи. Даже не из под фейка скрипт тестировался…


                  1. G0nZaleZ
                    02.10.2019 23:16
                    +1

                    А вот и его комментарии:
                    pikabu.ru/story/mnogie_ottsyi_i_materi_poymut_4221896?cid=147233322
                    pikabu.ru/story/klubnyak_nashey_molodosti_3827327?cid=147233320
                    pikabu.ru/story/ne_razdrazhay_zhirafa_3859504?cid=147233315

                    Автор действительно рассчитывал, что его неумелое враньё не удастся разоблачить?


              1. roscomtheend
                03.10.2019 14:36
                +1

                Его ник носит каждый 10 кодер.

                Стоило добавить "в его мечтах". Так мы узнали имя ещё одного никому неизвестного анонимуса.


            1. OneStoper Автор
              02.10.2019 22:47
              -8

              Я не выложил ни одной статьи на поганом pikabu и не собираюсь это делать))
              И да, статья у чела норм. При нужных ресурсах можно снести что угодно, даже этим.
              Крепись. Аниме ждет.
              Уверен, ты даже это не напишешь))
              Стиль говнокода… да нет код у меня чистый. Пикабу с древне говно. OneStoper пишет на питоне. Чекни BHF


              1. Wexter
                02.10.2019 22:53
                +4

                То-то я смотрю комменты на пикабу от вас сильно похожи на строчки из второго скрипта





                1. dmitryrublev
                  02.10.2019 23:05
                  +2

                  Может автор этого поста — и есть скрипт?
                  Тогда другое дело, и заминусовали его пост зря, не оценив достижений программизма :)


              1. 0xf0a00
                03.10.2019 10:31

                Чекни BHF

                Так вот откуда ты. Ну зарабатывал бы себе на обеды там, зачем пошел в мир то?


        1. OneStoper Автор
          02.10.2019 22:34
          -9

          Да, у меня только 2 статьи. И DDOS(A) среди них нет. Прости товарищ, ты немного ошибся


  1. vilgeforce
    02.10.2019 17:58

    Подозреваю что это не баг, а фича :-)


    1. ne_kotin
      02.10.2019 18:06

      APIшка для нужных ботов? )


      1. vilgeforce
        02.10.2019 18:07

        Для пущего веселья, а не для ботов :-)


        1. ne_kotin
          02.10.2019 18:10

          прозреваю, что ежели там 'vote' поменять на -1 — можно уже будет в минуса валить, а это уже не столько веселье, сколько конкретный такой ruining.


          1. vilgeforce
            02.10.2019 18:10

            А если +-5/10/1000? Это же тоже веселье!


            1. ne_kotin
              02.10.2019 18:12
              +1

              Ну, такое. Если хотфикса не будет — найдутся скрипт-кидди, которые задизлайкают всё подряд.
              Часть авторов тупо уйдет после такого.


              1. vilgeforce
                02.10.2019 18:14

                Велика потеря? Ну и такое веселье быстро наскучит


              1. dartraiden
                02.10.2019 19:50

                А как минусы, расставляемые массово с одного аккаунта, могут кому-то обрушить рейтинг?

                Вот, скажем, на Хабре у моего поста рейтинг +80. Что мне от того, что пришёл человек, который минусует всё подряд. Станет +79? Ужас какой.

                На Пикабу есть защита от регистрации клонов (потому что желающие побампать себе рейтинг неизменно находятся), поэтому мечта нарегать кучу ботов не прокатит. А от возни с одного аккаунта ресурсу ни жарко, ни холодно.


                1. ne_kotin
                  02.10.2019 22:13

                  Ну вон же, уязвимость. Возможно, если копнуть — еще найдутся.
                  Ну и защита от регистрации твинков — неидеальная.


                1. WhiteBlackGoose
                  02.10.2019 23:22

                  На хабре у тебя лучшая статья недели — 150 плюсцов, а на пикабу — 20к. Правда, на хабр сложнее попасть, чем на пикабу


  1. polearnik
    02.10.2019 18:52

    уже давно есть пользователи «боги добра» и «боги зла» У них есть огромное количество количетсво плюсов и минусов. Явно не ручками ставили
    Пост пикабу с статистикой


    1. vladkorotnev
      03.10.2019 05:47

      Причём, не помню уже где слышал от админов, что в день можно поставить всего-лишь 10-20 значащих плюсоминусов — т.е. всё, что ставится дальше, будет попадать в стату в профиле и в счётчик, но на рейтинге сказываться не будет, таким образом слить неугодного с одного аккаунта подобным скриптом затруднительно.


  1. AVX
    02.10.2019 18:58

    Автор с ЯПа, не иначе :-)


  1. dartraiden
    02.10.2019 19:43
    +2

    «Накрутка комментариев» не совсем понятна: за такие комментарии вы будете понемножку отхватывать минусцов. Не каждый раз, но рано или поздно — да. Кроме того, число комментариев не даёт на Пикабу ровным счётом ничего. Два минуса за комментарий = один минус к рейтингу вашей учётки, при минус 200 вы отлетаете в перманентный бан.

    Вообще, не вижу тут уязвимости, плюсовать/минусовать рандомные посты можно и руками, это опять же, ни на что не влияет.


    1. dmitryrublev
      02.10.2019 23:08

      Судя по скрину, плюсов у него больше, чем минусов.


      1. G0nZaleZ
        02.10.2019 23:19

        Скрин — фотошоп. В реальном профиле рейтинг -80: pikabu.ru/@OneStoper
        Обратите внимание, что совпадает список сообществ, количество минусов, подписчиков и постов)


        1. dmitryrublev
          04.10.2019 10:00

          Боже, какое позорище.
          Спасибо, что показали — я как-то даже не подумал, что автор будет таким заниматься.


  1. polyakov_andrey
    02.10.2019 19:46
    -4

    Пикабу — помойка, сродни яплакал, фишек и прочего


  1. Akuma
    02.10.2019 22:56
    +4

    Пост на хабре про отправку HTTP запросов?

    В чем тут уязвимость? Вы можете эмулировать хоть запросы в свой интернет-банк и спамить там в чат. Смысла мало.


  1. yaroslavche
    03.10.2019 02:31
    +1

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

    Отличный скриншот! Внёс ясности.


    1. vladkorotnev
      03.10.2019 05:45

      Создаём py-файл и засовываем его с такими идеями себе в картинка с улыбающимся негром.жпг


  1. Alesh
    03.10.2019 08:36

    Не понял с начала, ну чего так-то школьнега минусовать. Но комменты, особенно его собственные, все прояснили :)


  1. p_fox
    03.10.2019 08:51

    Безграмотного школьника заминусовали на Пикабу и он нагуглил "хитрый план мести".
    Куда катится Хабр…
    *ушел искать кнопку cntr"


    1. Anton23
      03.10.2019 09:37

      Причем тут хабр? С Хабром все нормально, посмотрите на рейтинг статьи, на Карму автора, и на комментарии.


  1. loony_dev
    03.10.2019 15:59
    +1

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

    Если бы вы поработали с потоками в питоне чуть больше, чем просто первая ссылка в гугл, то знали бы, что потоки так не работают. Особенно в питоне. Никакого ускорения в 55 раз, та даже в 5 раз тут нет.
    Советую почитать habr.com/ru/post/84629


  1. zoldaten
    03.10.2019 21:47
    -3

    Сколько минусов! Эффект толпы.
    Тем не менее, поддержал бы автора.
    Строки кода, написанные самостоятельно, все лучше чем слепые переводы статей с англ. и тем более статей ака «Как я в хх лет не стал программистом».
    Трансляция опыта, даже школьного, это все равно трансляция опыта.
    Да, репутация Хабра может пострадать от таких постов, но для этого можно просто не оценивать статью.

    И автору: постарайтесь не светить «уязвимости», которые находите, напрямую. Тем самым вы закрываете двери, в которые кто-то давно ходит. Новые двери будут надежнее.


    1. G0nZaleZ
      04.10.2019 00:23

      Автора заминусили по той причине, что весь его пост — обман. Никакой уязвимости нет, никаких тысяч плюсов и комментариев ему поставить не удалось, а первый скрин — фотошоп.