Здравствуйте. Хотел бы рассказать про спам-уязвимость форума 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.
Комментарии (49)
WhiteBlackGoose
02.10.2019 17:53О, я игрался с пикабу. От имени пикабушников я конечно заявлю: пикабу НЕ форум. Ну а по делу: я считывал свои комментарии и состовлял список тех, с кем чаще всего пересекаюсь в комментариях. А еще пытался сделать отправлялку тегов на голосование, вроде все хедеры отправлял, но пикабу не пускал. В общем, не получилось, не знаю почему. Может кто запилит?
doctorw
02.10.2019 17:55+3Может стоило это и постить на самом Пикабу, а не Хабре?
OneStoper Автор
02.10.2019 19:34На Пикабу меня не поймут. Это не форум — стадо бездумных кликеров.
Anton23
02.10.2019 19:47+1Это смотря в какие темы заходить. Очень даже поймут.
P.S. Смотря на голоса статьи я скорее вижу что тут вас не понялиdartraiden
02.10.2019 19:59+2«Да как же тебя понять, коли ты ничего не говоришь». Тут дело не в аудитории, а в материале.
OneStoper Автор
02.10.2019 22:24-13Голоса статьи: -17.
50% ставят \/ из-за того что она из «Песочницы»
25% Не понимают о чем статья
А еще 25% таких как ты. Не ценящих труд, и без юмора.WhiteBlackGoose
02.10.2019 23:10+11) Обычно статья из песочницы набирает больше, чем следующие статьи. Посмотрите мой профиль, первая статья остается одной из лучших моих. И это далеко не единственный случай.
2) Сложно тут что-то не понять
3) Ну как бы не зашло. Тут нужно не только минут много потратить, а угадать в аудиторию. И вы не угадали
Я плюс статье поставил, если что. Но вот большинству не зашло. Попробуйте еще, больше ничего не посоветую)
Tihon_V
03.10.2019 10:12+2OneStoper,
Во-первых, почему requests и threading, ведь это — не лучшая связка для скраппинга?
Во-вторых, хабр техническое общество — ему нужны детали, а у Вас — «Ее я подробно объяснять не буду, просто выложу код». ИМХО: Хабр, может выполнять функции Твиттера, но не в это случае.
В-третьих, с точки зрения проф. этики — стоило писать сначала сюда.
ИМХО: Стиль кода сильно хромает.
Wexter
02.10.2019 22:16+1Не поймут потому что уже слили первый пост про школьный ддос на питоне?
OneStoper Автор
02.10.2019 22:29-13Здравствуй. Ты о чем?
Я знаю питон достаточно хорошо, если ты не понял тему-не значит что она бессмысленна. Научись пользоваться тем что есть. Пока ты даже головой не пользуешься))Не буду с тобой прирекаться. Может ты лучше знаешь кто здесь — кто. Но я считаю что возможно тебе вернутся обратно к себе на пикабушечку, и чекать постики про аниме.Wexter
02.10.2019 22:39+3Я про этот позор pikabu.ru/story/unichtozhenie_sayta_skriptom_na_python_v_polovinu_stranichki_6826578
Думаю вам всё-же стоит обращаться к незнакомым людям на «вы», ну и шутить более уместно, а не повторять шутки бати-алкашаOneStoper Автор
02.10.2019 22:41-11OneStoper — известный soft-крякер по типу PC-RET. Его ник носит каждый 10 кодер.
Если ты будешь кидать пруфы оскорблений каждого человека с таким ником-тебя забанят за спам))Wexter
02.10.2019 22:43+5Общий ник, общий интерес к питону, общий стиль говнокода, общее желание что-нибудь взломать, общее высокомерное отношение к другим, да ещё и обидка на пикабу где вполне справедливо слили пост.
Действительно мне показалось…GavriKos
02.10.2019 23:06+2До кучи — одинаковые подписки на сообщества в профиле и на скрине из статьи. Даже не из под фейка скрипт тестировался…
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
Автор действительно рассчитывал, что его неумелое враньё не удастся разоблачить?
roscomtheend
03.10.2019 14:36+1Его ник носит каждый 10 кодер.
Стоило добавить "в его мечтах". Так мы узнали имя ещё одного никому неизвестного анонимуса.
OneStoper Автор
02.10.2019 22:47-8Я не выложил ни одной статьи на поганом pikabu и не собираюсь это делать))
И да, статья у чела норм. При нужных ресурсах можно снести что угодно, даже этим.
Крепись. Аниме ждет.
Уверен, ты даже это не напишешь))
Стиль говнокода… да нет код у меня чистый. Пикабу с древне говно. OneStoper пишет на питоне. Чекни BHFWexter
02.10.2019 22:53+4То-то я смотрю комменты на пикабу от вас сильно похожи на строчки из второго скрипта
dmitryrublev
02.10.2019 23:05+2Может автор этого поста — и есть скрипт?
Тогда другое дело, и заминусовали его пост зря, не оценив достижений программизма :)
0xf0a00
03.10.2019 10:31Чекни BHF
Так вот откуда ты. Ну зарабатывал бы себе на обеды там, зачем пошел в мир то?
OneStoper Автор
02.10.2019 22:34-9Да, у меня только 2 статьи. И DDOS(A) среди них нет. Прости товарищ, ты немного ошибся
vilgeforce
02.10.2019 17:58Подозреваю что это не баг, а фича :-)
ne_kotin
02.10.2019 18:06APIшка для нужных ботов? )
vilgeforce
02.10.2019 18:07Для пущего веселья, а не для ботов :-)
ne_kotin
02.10.2019 18:10прозреваю, что ежели там 'vote' поменять на -1 — можно уже будет в минуса валить, а это уже не столько веселье, сколько конкретный такой ruining.
vilgeforce
02.10.2019 18:10А если +-5/10/1000? Это же тоже веселье!
ne_kotin
02.10.2019 18:12+1Ну, такое. Если хотфикса не будет — найдутся скрипт-кидди, которые задизлайкают всё подряд.
Часть авторов тупо уйдет после такого.dartraiden
02.10.2019 19:50А как минусы, расставляемые массово с одного аккаунта, могут кому-то обрушить рейтинг?
Вот, скажем, на Хабре у моего поста рейтинг +80. Что мне от того, что пришёл человек, который минусует всё подряд. Станет +79? Ужас какой.
На Пикабу есть защита от регистрации клонов (потому что желающие побампать себе рейтинг неизменно находятся), поэтому мечта нарегать кучу ботов не прокатит. А от возни с одного аккаунта ресурсу ни жарко, ни холодно.ne_kotin
02.10.2019 22:13Ну вон же, уязвимость. Возможно, если копнуть — еще найдутся.
Ну и защита от регистрации твинков — неидеальная.
WhiteBlackGoose
02.10.2019 23:22На хабре у тебя лучшая статья недели — 150 плюсцов, а на пикабу — 20к. Правда, на хабр сложнее попасть, чем на пикабу
polearnik
02.10.2019 18:52уже давно есть пользователи «боги добра» и «боги зла» У них есть огромное количество количетсво плюсов и минусов. Явно не ручками ставили
Пост пикабу с статистикойvladkorotnev
03.10.2019 05:47Причём, не помню уже где слышал от админов, что в день можно поставить всего-лишь 10-20 значащих плюсоминусов — т.е. всё, что ставится дальше, будет попадать в стату в профиле и в счётчик, но на рейтинге сказываться не будет, таким образом слить неугодного с одного аккаунта подобным скриптом затруднительно.
dartraiden
02.10.2019 19:43+2«Накрутка комментариев» не совсем понятна: за такие комментарии вы будете понемножку отхватывать минусцов. Не каждый раз, но рано или поздно — да. Кроме того, число комментариев не даёт на Пикабу ровным счётом ничего. Два минуса за комментарий = один минус к рейтингу вашей учётки, при минус 200 вы отлетаете в перманентный бан.
Вообще, не вижу тут уязвимости, плюсовать/минусовать рандомные посты можно и руками, это опять же, ни на что не влияет.dmitryrublev
02.10.2019 23:08Судя по скрину, плюсов у него больше, чем минусов.
G0nZaleZ
02.10.2019 23:19Скрин — фотошоп. В реальном профиле рейтинг -80: pikabu.ru/@OneStoper
Обратите внимание, что совпадает список сообществ, количество минусов, подписчиков и постов)dmitryrublev
04.10.2019 10:00Боже, какое позорище.
Спасибо, что показали — я как-то даже не подумал, что автор будет таким заниматься.
Akuma
02.10.2019 22:56+4Пост на хабре про отправку HTTP запросов?
В чем тут уязвимость? Вы можете эмулировать хоть запросы в свой интернет-банк и спамить там в чат. Смысла мало.
yaroslavche
03.10.2019 02:31+1Для начала создадим .py файл
Отличный скриншот! Внёс ясности.
vladkorotnev
03.10.2019 05:45Создаём py-файл и засовываем его с такими идеями себе в картинка с улыбающимся негром.жпг
Alesh
03.10.2019 08:36Не понял с начала, ну чего так-то школьнега минусовать. Но комменты, особенно его собственные, все прояснили :)
loony_dev
03.10.2019 15:59+1Дальше сделаем скрипт чуточку быстрее(ровно в 55 раз).
Если бы вы поработали с потоками в питоне чуть больше, чем просто первая ссылка в гугл, то знали бы, что потоки так не работают. Особенно в питоне. Никакого ускорения в 55 раз, та даже в 5 раз тут нет.
Советую почитать habr.com/ru/post/84629
zoldaten
03.10.2019 21:47-3Сколько минусов! Эффект толпы.
Тем не менее, поддержал бы автора.
Строки кода, написанные самостоятельно, все лучше чем слепые переводы статей с англ. и тем более статей ака «Как я в хх лет не стал программистом».
Трансляция опыта, даже школьного, это все равно трансляция опыта.
Да, репутация Хабра может пострадать от таких постов, но для этого можно просто не оценивать статью.
И автору: постарайтесь не светить «уязвимости», которые находите, напрямую. Тем самым вы закрываете двери, в которые кто-то давно ходит. Новые двери будут надежнее.G0nZaleZ
04.10.2019 00:23Автора заминусили по той причине, что весь его пост — обман. Никакой уязвимости нет, никаких тысяч плюсов и комментариев ему поставить не удалось, а первый скрин — фотошоп.
ne_kotin
запасся попкорном и ушел в «свежее», ждать воплей