ICO: Дикая охота Затраты:0$, Профит:742$

Введение

В данной статье я расскажу реально рабочий кейс как поднять бабла практически без вложений и в короткие сроки, каждый этап будет рассмотрен детально дабы не осталось никаких вопросов, однако если такие будут, то велком в комментарии. Мы будем искать уязвимые ICO, дампить их и выводить с них токены на биржу, там уже куда вам захочется. Тем кто занимается дампами данная статья покажется очень знакомой, однако даже они найдут здесь что-то новенькое для себя, поскольку тут будет практический план действий. Я уверен, что обязательно найдутся хейтеры у которых я забираю хлеб этой статьей.

Поиск цели

Правильно подобранная цель это уже пол дела, именно от этого зависит насколько наша затея окажется удачной. Нам нужны ICO проекты c небольшой, но и немаленькой посещаемостью, примерно 20к просмотров в месяц будет достаточно, информацию по просмотрам вы можете посмотреть на соответствующих сайтах [1]

Следующий критерий это условия вывода с ICO, нам нужно найти икошку где не нужна валидная почта для вывода, а если и нужна то ее можно изменить без каких либо затруднений, желательно что бы для вывода требовался какой нибудь пинкод или код двухфакторной аутентификации, так же в целом неплохо будет если для вывода не нужно будет никаких подтверждений и т.д., но лучше всего что бы был 6 значный пинкод.

И так, где же все-таки найти такую цель? Цели мы позаимствует у наших собратьев хацкеров, которые в основном занимаются брутом, думаю все знают такие софты как кипер, булит и юбц, на этих платформах пишут бруты и чекеры на всякие сервисы, в том числе и на ico. Я буду искать на одном из соседних бордов, в следующей ветке.

1.jpg.ffe1d01596fee04f5fff78a21bb4e8fd.jpg

Собственно заходим и смотрим топики, обычно в них есть описание этих самых сайтов, когда они выводят и что нужно для вывода, вообщем ищем икошки по критериям которые я перечислил выше, в некоторых топиках будет хайд, можем попросить личный, возможно вам его дадут. Собираем названия всех ico-сайтов в один текстовик.

Веб сканнеры

Теперь когда мы собрали нормальное количество икошек, нам нужно проверить каждую из целей в веб сканере.

Больше всего распространены следующие сканеры: Netsparker, Acunetix, Owasp Zap, burp suite. Как видите сканеров тут на любой вкус и цвет, однако же я советую использовать все сканеры по очереди, то что пропустил Спаркер может найти Акуша, или то что пропустили оба из этих сканеров может найти бурп, я использовал все эти сканеры и больше всего из них мне нравится спарки, овасп немного слабоват, а бурп даст прикурить им всем. Однако стоит заметить, что разные версии спаркера ведут себя по разному и одна версия спарки может найти дыру, а другая нет, я же использую следующие версии: 4.9.5.18523 и 5.9.1.29030.

2.jpg.9453eeb9c27910cea9b405bbfde54b99.jpg

Нам нужно настроить сканеры под поиск Sql injection, я буду показывать на примере Netsparker, в других сканерах ситуация практически аналогичная, отличия лишь в незначительных деталях.

Сначало нажимаем Scan Policy Editor, дублируем главный пресет, после переименовываем его как вам угодно и в Security Check Group оставляем галочку напротив Sql injection, так же вы можете использовать сканеры для поиска других уязвимостей, LFI, XSS, XXE и т.д. однако нам сейчас это не интересно, просто сохраняем настройки.

3.jpg.398a7d8a68ef1394a3e56bbbe24e8f15.jpg

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

4.jpg.da36afc1b7c4291af070971eba6456b0.jpg

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

5.jpg.d16df9a70add3d0e96b772df88107d19.jpg

Итак, вы можете кликнуть по уязвимому месту(“/auth/email_chk (val2 (POST),val1)”) правой кнопкой, выйдет контекстное меню, где смело читается строчка «Copy sqlmap Command», логично она копирует команду для мапы в буфер обмена, давайте же посмотрим что у нас скопировалось.

6.jpg.26fb270a0736be7e2969d97465af7d40.jpg

Как видим картинка не очень красивая, я больше предпочитаю составлять реквест файл и уже его пихать в мапу, как по мне так команда получается красивая и более лаконичная. Для составления реквест файла жмякаем по уязвимому месту(“/auth/email_chk (val2 (POST),val1)”), выбираем таб HTTP Request /Response, копирем все эти данные в какой нибуть текстовой файл и обязательно убираем пейлоуд который автоматом подставил спаркер (т.к. мапа должна подставить свой собственный) и убираем лишние и прочие мусорные заголовки которые являются лишними, можете сравнить скрин со спаркера выше и скрин с текстовика, сами все поймете.

7.jpg.ccc61454af2f99b358b2010b19898019.jpg

Сохраняем все это в удобном нам месте и переходим к следующей части.

Sqlmap

8.jpg.1c428c9a949f248e53c91603763e2850.jpg

В данной части я уже непосредственно расcмотрю как слить базу данных сайта, прежде чем приступить к дампингу обязательно обновите мапу[2] до последней версии. И так, команда которую нам дал спаркер выглядит следующим образом:

sqlmap.py -u “https://master.*****.com/auth/email_chk” -p “val2″ –risk=”3″ –level=”3″ –method=”POST” –data=”val1=netsparker%40example.com&val2=test” –user-agent=”Mozilla/5.0 (Windows NT 10.0; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.0 Safari/537.36″ –cookie=”__zlcmid=13IjuPSLHgWcLj8; ci_session=76vvdh8ren0vgikibjpvhe0mm9bspb5r” –headers=”Host:master.***.com\nAccept:application/json, text/javascript, */*; q=0.01\nAccept-Encoding:gzip, deflate\nAccept-Language:en-us,en;q=0.5\nCache-Control:no-cache\nContent-Type:application/x-www-form-urlencoded; charset=UTF-8\nOrigin:https://master.****.com\nReferer:https://master.****.com/auth/signup\nX-Requested-With:XMLHttpRequest” –dbms=”MySQL” –batch

После наших шаманских усилий с реквест файлом она приобразовывается в следующее:

sqlmap.py -r target.txt -p val2 –risk=3 –level=3 –dbms=MySQL –batch –dbs

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

-u Этим аргументом мы указываем ссылку на нашу цель, которую хотим сдампить, –method соответственно указывает метод запроса, в нашем случае это POST запрос, если же нам попадется уязвимый сайт с GET методом, то в какой-то степени удобней будет указать ссылку на сайт не через реквест файл, а через аргумент -u (например если бы у нас был гет, а не пост: sqlmap.py -u “https://master.*****.com/auth/email_chk.php?val2=test” -p val2 –risk=3 –level=3 –dbms=MySQL –batch –dbs –random-agent), через параметр –data указывается отправляемая Post Data, при гет методе её нету, там дальше уже юзер-агент(–user-agent), хидеры(–headers), куки(–cookie).

Выше перечисленное мы просто запихали в реквест файл, тем самым красиво все оформив, я предпочитаю делать именно так и вам тоже советую.

-p Указывает на уязвимый параметр, в нашем случае это val2, смотрите в спаркере какой параметр у вас, и так же смотрите в спаркере какая DBMS используется на сайте, в моем случае это MySQL.

9.jpg.cfa4c38e395261b15e1af7518d0f13a9.jpg

–batch Никогда не спрашивать пользовательского ввода, использовать поведение по умолчанию

–dbs Выводит базы данных

Про разные уровни –level и –risk вы можете прочитать по ссылке в источниках[3]

Так же есть важный аргумент, которого нет в нашей команде, однако он является обязательным, через который указывается техника sql иньекции, в некоторых случаях мапа может и вовсе не раскрутить скулю без него, у меня было очень много случаев, когда мапа просто не раскручивала скулю без этого параметра так что его лучше добавлять. Аргумент —technique может принимать сразу несколько значений EUQBST, каждая буква означает разную технику, можно указать сразу несколько букв.

Слепые
B: Boolean-based blind
S: Stacked queries
T: Time-based blind
Обычные
E: Error-based
U: Union query-based
Q: Inline queries

В нашем случае я добавляю –technique=E.

Если по итогу вы получите вот такую картину, то значит мапа успешно раскрутила скулю и получила названия баз данных.

10.jpg.e62cff6efd8880c329ba85e1aea37005.jpg

Теперь нам лишь нужно просмотреть таблицы, выбрать нужную и слить из нее данные. Вернемся к нашей команде.

sqlmap.py -r target.txt -p val2 –risk=3 –level=3 –dbms=MySQL –batch –dbs –technique=E

Теперь когда мы получили названия баз данных, аргумент –dbs нам больше не требуется, убираем его и преобразовываем команду следующим образом.

sqlmap.py -r target.txt -p val2 –risk=3 –level=3 –dbms=MySQL –batch –technique=E -D master_wallet –tables

Через -D выбираем базу данных, –tables говорим то что там нужны таблицы.

11.jpg.2aacb2f512c4029eefb04c057e5c8fbc.jpg

Теперь среди таблиц ищем ту, в которой предположительно хранятся данные пользователей, в нашем случае это таблица member, у вас она возможно будет назваться по другому (например users или что-то типо того), нужно смотреть по обстоятельствам, теперь получаем колонки -D master_wallet -T member –columns.

12.jpg.8aae3e2e13a443c59015a81fb6c80e40.jpg

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

sqlmap.py -r target.txt -p val2 –risk=3 –level=3 –dbms=MySQL –batch –technique=E -D master_wallet -T member -C mem_id,email,mem_pw,mem_name,gcc,deal_pw,mem_name,mobile –dump –threads=10

Начнется дампинг сайта, если вам нужно будет вдруг остановить его Ctrl+C

Начать с определенной строки –start=1000

Все что вы сдампили сохраняется в AppData\Local\sqlmap\output однако этот путь можно изменить, указав аргумент –output-dir

Про другие параметры которые есть в мапе можете узнать в документации[4]

Waf’ы и прочая дрочь

Пока наш сайт дампится, хотелось бы сделать небольшое отступление и так же раскрыть главный вопрос, который напрашивался с самого начала – «что же там по тамперам?».

По своему опыту скажу, что если вы использовали спаркер для поиска скули и он выдал вам дыру, то скорее всего никакие тамперы вам не понадобятся, а не раскручивается скуля потому, что сделали что-то неверно, более вероятнее попробовать поиграться с левелами и рисками, так же можно попробоваь добавить аргументы –no-cast или –hex(подробнее в доках).

Sqlmap сам типа умеет определять всякие waf, но тут ключевое слово «типа», лучше всего для определения waf использовать модули whatwaf[5] и wafw00f[6].

Они вам выдадут тамперы, после вам нужно будет лишь добавить их к вашему запросу, если выдает несколько тамперов, то пробуйте каждый по очереди или совместите их.

13.jpg.5776022cce9475d93a24ed244e0afb10.jpg

Касательно тамперов нельзя сказать ничего конкретного какой куда подставлять, поскольку waf’ов очень много и практчески все индивидуальны и им нужен свой подход. Тот же клауд можно обойти если указать настоящий ip адрес сайта (можете нагуглить мануалов куча) и host сайта (-u “ip/auth/email_chk.php?val2” –host=”master.*****.com”).

Если есть желание, можете прочитать дополнительный материал про тамперы[7]

NaviCat И PHPMyAdmin(Full Access)

Все еще отступление…

Вы просто обязаны это прочитать!! Бывает такое что попадается уязвимый сайт, а там скуля слепая или бд такая большая что сливать очень долго, тогда как вариант можно попробовать подключиться к бд напрямую без скули. Если администратор тот еще алешка, то можно найти на сайте и такие артефакты как PHPMyAdmin, просто попробуйте добавить /phpmyadmin/ к сайту, авось окажется что там висит панелька, про которую сисадмин забыл.

14.jpg.17bc3cb153b7dcb76838fc5413b71182.jpg

Если же вы не нашли панельку, то попробуйте просканировать порты (“nmap site.com”), нам нужен порт 3306 на котором висит mysql.

Читайте также:  Skimer skimmer carding atm

15.jpg.02bbe1960cf104ac7afdba213d63c423.jpg

Если же такой порт открыт, то мы может приконнектиться к серваку через NaviCat[8]. Однако теперь нам нужны учетные данные для mysql, где же их взять? Надеюсь вы не забыли про документацию по sqlmap.

16.jpg.5745e9d0a6da43eb75c105f811ff6b79.jpg

Добавляем к команде аргумент –passwords и бум, вот что мы имеем по итогу. Мы получили имена пользователей и хэши их паролей, не спешите отменять мапу, пусть она попробует поломать пароли, вполне вероятно, что какой-либо из них она все таки сломает.

17.jpg.e434bcfdafba8d3dbd4f739d5246289b.jpg

Нас интересует root учетная запись. Здесь у нас пароли хэшированны, для их взлома нужен хэшкет и база паролей, ну про то как это работает вы наверняка должны были слышать. Что же делать дальше, когда вы взломали пароли и получили доступ к учетке? А делать мы можем все, что захотим, поскольку теперь у нас есть полный доступ к базе данных, хоть удалить ее можем, но нас ведь интересует не это. Мы можем сдампить базу данных за очень короткое время, поскольку теперь у нас есть прямой доступ, база выкачивается в формате *.sql, для того что бы потом считать данные можете воспользоваться стареньким как мир софтом SQLRip[9].

18.jpg.c3e21fa01b09231df6473e252300956e.jpg

Для того что бы подрубиться к базе с открыты портом 3306, качаем софтинку NaviCat, жмякаем Connection, в контекстном меню выбираем вашу DBMS, у меня это MySQL, после перед нами предстанет такое окно.

19.jpg.7ab65479132496f1ef1b6c4dd9151109.jpg

Пишем что хотим, можем написать название сайта который мы атакуем
Пингуем в cmd сайт и указываем здесь его айпишник
Юзернейм аккаунта который вы ломанули, на скрине мапы выше посмотрите внимательно, там хэш рут пользователя дублируется с другим юзернеймом, именно этот юзернейм и вводим
Без комментариев

Или же мы можем подкрутить некоторым пользователям баланс и добавить пару нулей. Тут все упирается лишь в знания самого языка sql, сам по себе он очень легкий и если даже вы его не знаете можно тупо нагуглить нужные вам вещи, это если у вас phpmyadmin. Если же у вас NaviCat, то вы просто получите экстаз от того, что там не нужно писать и строчки кода, просто изменяйте сами данные, остальное NaviCat сделает за вас, очень мощная софтина. Касательно того, как сдампить данные в навикэте.

20.jpg.e097c8e745ffb7e956380319306382ee.jpg

Об этом в интернете особо ничего нет, мотайте на ус.

Хэш и два Антипаблика

Давай те же вернемся к нашему ico которое мы сливаем. Поскольму мы живем в 21 веке, это значит что? Правильно! Это значит что мд5 и другие «слабые» хэши уже никто не использует, сейчас практически на всех сайтах пароли зашифрованны бкриптом, что на порядок затрудняет работу дамперам, ведь не все готовы покупать такой материал, бкрипт хэши очень долго ломаются по причине своей специфичности, вот их и используют сейчас все кому не лень, даже самая маленькая шаражкина контора юзает бкрипт, и правильно! Я бы тоже использовал его если бы держал какой-нибудь сайт. Но мы не держим сайт, а атакуем его.

21.jpg.16a235bdc35daab928e7db04b2362fbc.jpg

Итак, в нашем дампе пассы зашифрованны бкриптом, первая мысль которая может вам придти в голову это попробовать ломануть их хэшкетом, но после того как вы увидите сколько времени на это требуется, то вы наверняка подумаете о том, что бы забить на все это дело, однако не тут-то было. Правда заключается в том, что все ебут одни и те же строки, которые имеют не значительные отличия, и вполне вероятно что половина пользователей которые есть у вас в бд(может больше, может меньше), уже где-то оставляли такие же пароли, в результате чего они были слиты в интернет, это основная причина почему следует выбирать ico где для вывода нужен пин или 2fa. Таким образом мы сортируем бд по балансам, берем мыльники и логины, если у вас или ваших друзей есть свой антипаблик, можно вытащить строчки из АП с помощью ItemSearch[10]. Если же такого не водится, то мы можем купить мурз[11] и уже с него вытащить пароли, однако если у нас бомж стартер пак, то там есть триалка на два дня, с возможностью подобрать пороли к 1к почт, собственно я так и сделал поскольку 1к почт мне было вполне достаточно, я взял триалку и написал небольшой скрипт[12] на Delphi который вытягивает пароли.

22.jpg.3b0541f189e76a0147dfcb058e7c6483.jpg

Однако авторизация на сайте только по логину и паролю, тогда я написал еще один скрипт[13], что бы подставить к логинам пароли которые нашлись к почтам.

То есть у меня есть следующее: Login,email,hashpass и email:pass по итогу сравниваются мыльники и подстановкой получаем login:pass. Либо же вы можете просто взять пароли которые найдет мурз, локальный АП и т.д. и просто сделать из них словать для хэшкета. Не буду здесь публиковать код обоих скриптов поскольку статья и так уже получилась объемной, однако оставлю исходники что бы вы могли скачать и ознакомиться. Все ссылки вы можете найти в конце статьи.

Брут

Теперь когда мы сделали подборку, звезды сошлись и у нас есть небольшая базка login:pass, нам нужно проверить ее на гуды. Поскольку мы искали нашу икошку среди проектов на кипер, булет и юбц, то у нас и имеется проект на это икошку, булет[14] идет бесплатный и мы можем просто скачать его и поставить нашу базку брутиться, однако кипер и юбц платные софты, поскольку у нас тут статья идет без затрат 0$, то давайте попробуем написать брут на нашу икошку.

Открываем наш сайт, на который будем писать брут, жмякаем Ctrl+Shift+J(У меня яндекс браузер), перед вами откроется панелька с права, выбираем на ней вкладку Network(Это наш снифер), вводим в поля логин и пароль любые данные и жмякаем войти, слева где Name должна появиться ссылка, также нажимаем на нее, и перед нами выйдет примерно аналогичная картина той, что была в нетспаркере когда мы собирали реквест файл, нам так же надо отсюда взять заголовки и постдату(Form Data это та самая Post Data, где id это наш логин, а pw это пароль). Бывает такое что там еще и токен попадается, тогда нам нужно сначало сделать гет запрос на главную страницу, спарсить токен, а потом вставить его в нашу пост дату, в целом про написание брута можно написать еще одну отдельную статью, т.к. здесь очень много инфы и маленьких деталей, по-этому не будем углубляться в такие детали. Подробнее про то как писать бруты можете найти в интернете. А еще лучше если возьмете с интернета готовые рабочие конфиги открытые для редактирования и смотря на них будете учиться делать проекты.

23.jpg.db0100a6b4758edeac5a8b661681e22c.jpg

Во вкладке Response правее Headers мы можем посмотреть данный которые пришли в ответ.

Это нам пришло на рандомные данные

{“result”:”N”,”msg”:”This ID is not checked.”}

Это на данные где пароль неверный

{“result”:”N”,”msg”:”Please check the input.”}

А вот это уже на гуд

{“result”:”Y”,”msg”:”Login Successful”}

Судя по этим ответам и хидерам мы будем собирать проект. Открываем булет, переходим во вкладку Configs->New Указываем название проекта, слева жмякаем на плюсик, в открывшемся окошке выбираем Request и заполняем согласно данным со снифера.24.jpg.569da9e0565c60fe3e88709fbdde261a.jpg

25.jpg.b85df37457d56d1404ae181484d7ddf3.jpg

Ну я думаю вы поняли что к чему. Сохраняем проект, запускаем и ждем пока наберутся гуды. Эта часть статьи получилась немного скомканной, однако если у вас возникнут вопросы или вам нужно будет помочь с написанием более сложного брута(например на мобильное приложение), то не стесняйтесь задавать вопросы.

Вывод на биржу и с биржи

После того как нашли гуды, нам нужно вывести баланс с ICO на биржу, смотрим на сайте на какие биржи мы можем вывести, и выбираем ту на которой не нужен вериф с доками для вывода, в нашем случае это latoken. Первый раз когда я попытался что-то там сделать у меня выбивало ошибку поскольку я сидел под VPN США, поэтому будьте внимательны, в США душат биток, юзайте впн другой страны.

26.jpg.e0306e020e6758f660cd708c882447a7.jpg

Регаемся на бирже, переходим в кошелек, в поиске вбиваем нашу монету, клацаем депозит и биржа даст нам кошелек на который нужно перевести токены, дальше уже входите под сбрученными аккаунтами в личный кабинет ico и уже от туда выводите токены, я хз как будет у вас, лично у меня выводы были только по средам в определенное время, для подтверждения вывода нужно было ввести временный код который приходит на почту и 6 значный пинкод который был у нас в базе данных. Система такая, что для смены пинкода надо валидное мыло, а для смены мыла пинкод. Поэтому я сначала менял мыло на свое, поскольку знал пинкод, а потом уже подтверждал вывод с помощью кода который приходил на почту и того 6 значного пинкода который был в базе.

27.jpg.7b7f61f8b7ef779a327542c8aca20e06.jpg

Потом когда монеты приходят на биржу(обычно приохдят с задержками, надо немного подождать), просто продаем их за битки и уже выводим на свой кошелек, вот собственно и все.

28.jpg.a0ab4ba97602fe509281c67b8cb93f74.jpg

Пару слов туда сюда да …

Теперь несколько моментов которые я специально пропустил дабы не ломать повествование статьи:

Если вдруг вы найдете в бд куки, то на часть с написание брута и подбором паролей можете сразу забить т.к. коме этих кук вам больше ничего не понадобится для входа.
Вы можете использовать sqlmap для поиска уязвимостей
В случае если у вас слепая скуля, для ускорения дампинга можете использовать технику DNS Exfiltration(–dns-domain), более подробно можете легко нагуглить
В случае если у вас тип инъекции stacked queries и админская учетная запись(–is-dba), вы можете получить шелл (–os-shell)
Если гудов будет мало, вы можете попробовать побрутить сами мыльники и уже по ним восстановить аккаунты
Если у вас сайт с 2фа, то вы должны были обязательно сдампить колонку в которой хранятся ключи для гугл аутентификатора, скачиваете себе на мобилу аутентификатор, добавляете в него ключик (Enter a setup key) используете сгенерированные коды
В бд вполне вероятно могут храниться приватные ключи от разных кошельков, будьте внимательны, иначе можете пропустить большую сумму

Заключение

Вот собственно и подошла к концу статья, я раскрыл один весьма прибыльный кейс для исполнения которого вам не надо и копейки. Некоторые инструменты мы рассмотрели подробно, а некоторые только поверхностно и вскользь, поскольку это очень большая тема, трудно сразу рассказать про все инструменты в рамках одной статьи так, что бы ничего не забыть, как по мне, так каждый инструмент вполне заслуживает отдельной статьи, поскольку информации по ним имеется еще очень много, что хватит и на целую серию статей. Какие бы высококлассные инструменты у вас не были бы, без достаточного опыта и навыков вы не сможете раскрыть весь их потенциал. Я показал основные и самые значимые моменты, однако даже их достаточно, что бы самостоятельно провернуть подобное. Если после прочтения статьи у вас появились вопросы на которые вы не находите ответы, то я буду рад ответить на ваши вопросы, так же могу помочь с раскруткой скули, написанием брута и т.д. Спасибо за внимание!