Как я нашел логическую ошибку у сервиса Taplink, которая раскрывала почту любого аккаунта.
История о том, как меня вообще занесло в Багхантинг и почему я начал с Taplink будет позже, а сейчас хотелось бы поделиться техническими деталями.
В сервисе вы можете добавить по почте в общие проекты любой аккаунт и пользовать появится у вас в группе. Перебирая запросы в браузере, я увидел, что при добавлении аккаунта в json отправляется:
Появилась мысль, а что если я отправлю только заполненный account_id, без указания email. Благодаря сервису Метрика, я нашел id нужного аккаунта, который Яндекс заботливо сохранил в HTML созданной пользователем страницы.
Вставляю id в account_id и о чудо, в разделе совместных проектов мне показывается чужая почта. Думаю очевидно, что таким образом можно было бы собрать все зарегистрированные на сервисе почты.
Из-за следующей истории, мне пришлось ждать почти год до того, как я обратился к создателям сервиса и мне заплатили за это 5000 рублей 😂
|DevsNotes|
История о том, как меня вообще занесло в Багхантинг и почему я начал с Taplink будет позже, а сейчас хотелось бы поделиться техническими деталями.
В сервисе вы можете добавить по почте в общие проекты любой аккаунт и пользовать появится у вас в группе. Перебирая запросы в браузере, я увидел, что при добавлении аккаунта в json отправляется:
{"account_id":null} Появилась мысль, а что если я отправлю только заполненный account_id, без указания email. Благодаря сервису Метрика, я нашел id нужного аккаунта, который Яндекс заботливо сохранил в HTML созданной пользователем страницы.
Вставляю id в account_id и о чудо, в разделе совместных проектов мне показывается чужая почта. Думаю очевидно, что таким образом можно было бы собрать все зарегистрированные на сервисе почты.
Из-за следующей истории, мне пришлось ждать почти год до того, как я обратился к создателям сервиса и мне заплатили за это 5000 рублей 😂
|DevsNotes|
👍3🔥1😁1
Как я для блогера раскрыл личность мошенника в интернете, а меня кинули с оплатой.
10-го мая 2023 года инстраграм-блогер с аудиторией ~300k (@001k.tyt), разместил пост о том, что готов отблагодарить любого, кто предоставит информацию о мошенниках, которые выдают себя за криптообменник этого блогера.
Перебирая множество разных гипотез и возможных решений, за месяц я потратил много часов для того, чтобы всё-таки раскопать информацию. Мошенники использовали сервис Taplink для того, чтобы размещать скам-ссылки и после долгого анализа, я нашел уязвимость, которая позволяет добавить в общую рабочую группу пользователя по account_id, а в списке отображается его email-адрес. Хотя и тут была проблема: первую скам-страницу заблокировали из-за жалоб, а новый адрес почты не всплывал в базах, поэтому пришлось искать старую страницу через кэш от google. Там в json'e метрики я увидел "account_id":8504691.
Таким образом, получив account_id по скам-страничке и отправив GET-запрос на "дружбу", мне показали настоящий email мошенника. Как же я был рад, когда после пробива в боте, мне вылезло его ФИ и номер телефона. Мошенник был сдеанонен.
8-го июня 2023 я уже предвкушая благодарность и звон USDT на кошельке, радостно начала писать по контактным данным, где мне ответили, что им всё нужно проверить. Я прислал видео с процессом и всё подробно описал в письме на почте.
Дальше сотрудники начали меня игнорировать. Я написал Сергею 01k прямо в его личный телеграм, где он мне ответил, что сам лично всё проверит и ответит позже. В итоге, последнее, что я получил, это ответ в духе: "мы думаем, что там стоит целый офис за этим, вы нашли одного сотрудника, но это не решит наши проблемы". И все, после этого Сергей тоже перестал отвечать. Шли месяцы, я периодически писал по контактным данным с надеждой получить какой-то ответ, но всё было тщетно.
Сейчас, когда уже практически прошел год, я решил отпустить эту историю поделившись интересными подробностями с вами.
|DevsNotes|
10-го мая 2023 года инстраграм-блогер с аудиторией ~300k (@001k.tyt), разместил пост о том, что готов отблагодарить любого, кто предоставит информацию о мошенниках, которые выдают себя за криптообменник этого блогера.
Перебирая множество разных гипотез и возможных решений, за месяц я потратил много часов для того, чтобы всё-таки раскопать информацию. Мошенники использовали сервис Taplink для того, чтобы размещать скам-ссылки и после долгого анализа, я нашел уязвимость, которая позволяет добавить в общую рабочую группу пользователя по account_id, а в списке отображается его email-адрес. Хотя и тут была проблема: первую скам-страницу заблокировали из-за жалоб, а новый адрес почты не всплывал в базах, поэтому пришлось искать старую страницу через кэш от google. Там в json'e метрики я увидел "account_id":8504691.
Таким образом, получив account_id по скам-страничке и отправив GET-запрос на "дружбу", мне показали настоящий email мошенника. Как же я был рад, когда после пробива в боте, мне вылезло его ФИ и номер телефона. Мошенник был сдеанонен.
8-го июня 2023 я уже предвкушая благодарность и звон USDT на кошельке, радостно начала писать по контактным данным, где мне ответили, что им всё нужно проверить. Я прислал видео с процессом и всё подробно описал в письме на почте.
Дальше сотрудники начали меня игнорировать. Я написал Сергею 01k прямо в его личный телеграм, где он мне ответил, что сам лично всё проверит и ответит позже. В итоге, последнее, что я получил, это ответ в духе: "мы думаем, что там стоит целый офис за этим, вы нашли одного сотрудника, но это не решит наши проблемы". И все, после этого Сергей тоже перестал отвечать. Шли месяцы, я периодически писал по контактным данным с надеждой получить какой-то ответ, но всё было тщетно.
Сейчас, когда уже практически прошел год, я решил отпустить эту историю поделившись интересными подробностями с вами.
|DevsNotes|
🔥3👍1
Как я нашел уязвимость у Меги и мне заплатили 50 000 рублей.
На тот момент у меня уже месяц висел диалог с Сергеем 01к, которому я помог найти данные мошенника с помощью уязвимости на сайте taplink.
Тогда у Мориарти проходил конкурс на котором можно рассказать свою историю и возможно он поможет. Я решил зайти на сайт и написать всё о том, как я честно выполнил свою работу, а меня игнорируют со всех сторон. Однако, на сайте нельзя написать письмо, пока не купишь что-то. Меня это не устраивало, потому что связываться с подобным не хотелось ни в каком виде и я начал изучать устройство площадки. Через пару дней мне попалась такая особенность, что сообщения отображаются из URL с параметром "e" через зашифрованный в base64 JSON и выглядело это вот так:
Я подумал, а какой шанс, что они экранируют символы внутри закодированного текста и решил проверить кусок с текстом сообщения на наличие XSS. Вставляю JavaScript код с alert’ом в текст сообщения, обратно кодирую, вставляю в параметр ссылки и всё отрабатывает.
Понимаю, что теоретически, так можно было бы украсть куки, хотя у них используется httpOnly, думаю не развивать больше мысль и иду сразу писать в саппорт. Далее было около недели попыток достучаться до саппорта и вот мне отвечают, что уязвимость на их взгляд не серьезная, но они готовы заплатить эквивалент 50 000₽ в биткоинах. Я прислал им новый btс-кошелек и через пару дней деньги дошли. Я прогнал биткоины через миксер и спокойно вывел всю сумму.
Вывод: файлообменник оказался более порядочным, чем инстаграм-блогер.
|DevsNotes|
На тот момент у меня уже месяц висел диалог с Сергеем 01к, которому я помог найти данные мошенника с помощью уязвимости на сайте taplink.
Тогда у Мориарти проходил конкурс на котором можно рассказать свою историю и возможно он поможет. Я решил зайти на сайт и написать всё о том, как я честно выполнил свою работу, а меня игнорируют со всех сторон. Однако, на сайте нельзя написать письмо, пока не купишь что-то. Меня это не устраивало, потому что связываться с подобным не хотелось ни в каком виде и я начал изучать устройство площадки. Через пару дней мне попалась такая особенность, что сообщения отображаются из URL с параметром "e" через зашифрованный в base64 JSON и выглядело это вот так:
eyJtc2ciOiLQodC+0L7QsdGJ0LXQvdC40LUiLCJjbHMiOiJkYW5nZXIifTTlm4kqMA==
{"msg":"Текст сообщения","cls":"danger"} Я подумал, а какой шанс, что они экранируют символы внутри закодированного текста и решил проверить кусок с текстом сообщения на наличие XSS. Вставляю JavaScript код с alert’ом в текст сообщения, обратно кодирую, вставляю в параметр ссылки и всё отрабатывает.
Понимаю, что теоретически, так можно было бы украсть куки, хотя у них используется httpOnly, думаю не развивать больше мысль и иду сразу писать в саппорт. Далее было около недели попыток достучаться до саппорта и вот мне отвечают, что уязвимость на их взгляд не серьезная, но они готовы заплатить эквивалент 50 000₽ в биткоинах. Я прислал им новый btс-кошелек и через пару дней деньги дошли. Я прогнал биткоины через миксер и спокойно вывел всю сумму.
Вывод: файлообменник оказался более порядочным, чем инстаграм-блогер.
|DevsNotes|
🔥4👍2❤1
Как я во время длительного отсутствия озвучки любимого сериала, решил самостоятельно сделать дубляж привычным голосом.
Forwarded from NeuroVoice - озвучка с помощью нейронных сетей
Media is too big
VIEW IN TELEGRAM
Голяк 5 сезон 1 серия.
Дубляж выполнен голосом Кубик в Кубе с помощью нейронных сетей.
Это первая моя работа такого масштаба. В данной версии слышно, что до идеала далеко, но всё приходит со временем.
Я потратил на этот дубляж около 20 часов своего времени, подпишитесь на меня, чтобы поддержать.
|NeuroVoice|
Дубляж выполнен голосом Кубик в Кубе с помощью нейронных сетей.
Это первая моя работа такого масштаба. В данной версии слышно, что до идеала далеко, но всё приходит со временем.
Я потратил на этот дубляж около 20 часов своего времени, подпишитесь на меня, чтобы поддержать.
|NeuroVoice|
🔥5❤2👍2
Уязвимость в казино, которая могла бы стоить много, но не принесла мне ничего.
Лето 2023-го было богато на события, и как раз тогда мне удалось найти уязвимость в одном казино. Оказался я там случайно — это был проект одного инста-блогера, который всячески пиарил своё новоиспеченное детище в соцсетях, а мне было интересно покопаться в новом сервисе, ведь зачастую в таких проектах поначалу много багов, которые можно обнаружить раньше команды.
Времени потратил много, и клад был обнаружен там, где даже не думал искать. В один из дней я случайно заметил, что в консоль браузера при определённых обстоятельствах начинают выводиться такие записи:
Очевидно, что токен здесь — это какая-то чувствительная информация, и я точно не должен был это видеть. Но откуда эти сообщения? Немного изучив запрос, я вижу активное подключение к сокету, который в сообщениях спамит мне токенами чужих аккаунтов.
Судя по всему, для отображения на экране публичных ставок через подключение к wss передавалось не DTO для отображения информации, а вся сущность, где и была чувствительная информация в виде токена.
Естественно, после стольких попыток я уже знал устройство их API, и ничего не мешало мне подставить token+customerId в запрос, чтобы проверить работоспособность этих данных. Конечно же, всё сработало — я вошел в чужой аккаунт. Надо отметить, что это был не совсем личный кабинет пользователя, скорее прослойка между клиентом и игровым кабинетом. Проще говоря, у меня был доступ только к игре от имени игрока и к его балансу. Я мог спустить все его деньги, но не мог их вывести.
Эксплуатировать данную уязвимость я не хотел, поэтому сразу решил сообщить о находке блогеру, благо его телеграм у меня был. Расписав в подробностях, насколько это серьезная уязвимость и то, что это касается господина Ходжаева напрямую, в ответ я получил только "Давай, вперед" и чс в тг.
Дальше было несколько месяцев попыток достучаться до создателей через почту отдела продаж, LinkedIn сотрудников, инстаграм создателя Turbo Games (это компания, которая делала оболочку игры), но везде был игнор. Последнее сообщение было отправлено в сентябре 2023-го, а примерно в октябре-ноябре уязвимость молча закрыли.
В очередной раз я понял, что файлообменник оказался самым порядочным из всех.
|DevsNotes|
Лето 2023-го было богато на события, и как раз тогда мне удалось найти уязвимость в одном казино. Оказался я там случайно — это был проект одного инста-блогера, который всячески пиарил своё новоиспеченное детище в соцсетях, а мне было интересно покопаться в новом сервисе, ведь зачастую в таких проектах поначалу много багов, которые можно обнаружить раньше команды.
Времени потратил много, и клад был обнаружен там, где даже не думал искать. В один из дней я случайно заметил, что в консоль браузера при определённых обстоятельствах начинают выводиться такие записи:
{
"type": "bets",
"diff": [{
"op": "add",
"path": [40],
"val": {
"result": "unknown",
"status": "placed",
"payout": 0,
"payoutSubunits": 0,
"amountUsd": 0.2079,
"payoutUsd": 0,
"amountEur": 0.185,
"payoutEur": 0,
"id": Отредактировано,
"customerId": Отредактировано,
"token": Отредактировано,
"playerId": Отредактировано,
"customerPlayerId": Отредактировано,
"playerName": "Noisy Mink",
"isTest": false,
"gameId": "crash",
"roundId": Отредактировано,
"amount": 1,
"amountSubunits": 100,
"currency": "brl",
"coefficient": 10,
"subPartnerId": "",
"freebetsEnrollmentId": null,
"updatedAt": Отредактировано,
"createdAt": Отредактировано,
"payoutCoefficient": null,
"placedAt": Отредактировано,
"finishedAt": null,
"closedAt": null,
"nickname": "Noisy Mink",
"l": 7,
"index": 0
}
} Очевидно, что токен здесь — это какая-то чувствительная информация, и я точно не должен был это видеть. Но откуда эти сообщения? Немного изучив запрос, я вижу активное подключение к сокету, который в сообщениях спамит мне токенами чужих аккаунтов.
Судя по всему, для отображения на экране публичных ставок через подключение к wss передавалось не DTO для отображения информации, а вся сущность, где и была чувствительная информация в виде токена.
Естественно, после стольких попыток я уже знал устройство их API, и ничего не мешало мне подставить token+customerId в запрос, чтобы проверить работоспособность этих данных. Конечно же, всё сработало — я вошел в чужой аккаунт. Надо отметить, что это был не совсем личный кабинет пользователя, скорее прослойка между клиентом и игровым кабинетом. Проще говоря, у меня был доступ только к игре от имени игрока и к его балансу. Я мог спустить все его деньги, но не мог их вывести.
Эксплуатировать данную уязвимость я не хотел, поэтому сразу решил сообщить о находке блогеру, благо его телеграм у меня был. Расписав в подробностях, насколько это серьезная уязвимость и то, что это касается господина Ходжаева напрямую, в ответ я получил только "Давай, вперед" и чс в тг.
Дальше было несколько месяцев попыток достучаться до создателей через почту отдела продаж, LinkedIn сотрудников, инстаграм создателя Turbo Games (это компания, которая делала оболочку игры), но везде был игнор. Последнее сообщение было отправлено в сентябре 2023-го, а примерно в октябре-ноябре уязвимость молча закрыли.
В очередной раз я понял, что файлообменник оказался самым порядочным из всех.
|DevsNotes|
👍4👨💻3🤝3
Как я сделал бесплатное продвижение своего NFT через баг на сайте NFT-маркетплейса.
В 2021 году мы с друзьями занимались своим стартапом. Это должен был быть сервис для быстрого предзаказа из ритейла через постаматы. В 2022 году, на последней стадии, разработка MVP остановилась. Однако, я не лишен оптимизма и надеюсь, что когда-нибудь мы вернёмся к этому.
Где-то в мае 2021 года я узнал про Non-Fungible Token. Концепция NFT казалась интересной для привлечения денег в стартап через продажу анимированных картинок. За 50$ и 100$ люди с деньгами могли купить NFT, а если проект станет успешным, покупатели бы навсегда остались в истории как первые инвесторы нового единорога.
Очевидно, что для них подобная авантюра связана с рисками, поэтому первые три недели найти желающих проинвестировать было непросто. Однажды, я случайно заметил, что если дописать 0 к текущей цене предмета, его можно выложить еще раз по такой же цене. В то время на сайте была особенность: новые предметы, в том числе и с обновленной ценой, появлялись на главной странице. Тогда решение пришло моментально: я написал простой код, который каждые 3 минуты менял цену товара с 0,45 на 0,450, и мой предмет появлялся на первом месте на главной странице сайта.
К сожалению, это продлилось недолго. Из-за большого количества жалоб от других продавцов баг закрыли через 10 дней. В итоге, я получил 4 продажи и заработал на этом 250$.
В 2021 году мы с друзьями занимались своим стартапом. Это должен был быть сервис для быстрого предзаказа из ритейла через постаматы. В 2022 году, на последней стадии, разработка MVP остановилась. Однако, я не лишен оптимизма и надеюсь, что когда-нибудь мы вернёмся к этому.
Где-то в мае 2021 года я узнал про Non-Fungible Token. Концепция NFT казалась интересной для привлечения денег в стартап через продажу анимированных картинок. За 50$ и 100$ люди с деньгами могли купить NFT, а если проект станет успешным, покупатели бы навсегда остались в истории как первые инвесторы нового единорога.
Очевидно, что для них подобная авантюра связана с рисками, поэтому первые три недели найти желающих проинвестировать было непросто. Однажды, я случайно заметил, что если дописать 0 к текущей цене предмета, его можно выложить еще раз по такой же цене. В то время на сайте была особенность: новые предметы, в том числе и с обновленной ценой, появлялись на главной странице. Тогда решение пришло моментально: я написал простой код, который каждые 3 минуты менял цену товара с 0,45 на 0,450, и мой предмет появлялся на первом месте на главной странице сайта.
К сожалению, это продлилось недолго. Из-за большого количества жалоб от других продавцов баг закрыли через 10 дней. В итоге, я получил 4 продажи и заработал на этом 250$.
👍3🔥2
Как заменить любую фотографию в VK с сохранением лайков и комментариев.
Вряд ли это можно назвать багом или уязвимостью, просто полезный трюк с фоторедактором VK, который существует уже 3 года. Суть в том, что при редактировании фотографии, происходит создание нового изображения и перезагрузка его заново. Соответственно, мы можем подставить любую фотографию и загрузить её под видом отредактированной.
0. Скачиваем любое приложение для работы с API, у меня это Insomnia
1. Заходим на свою страницу в ВК, в Chrome нажимаем F12 и переходим на вкладку "Сеть"
2. Кликаем на фотографию, которую хотим заменить, нажимаем "Еще" и входим в "Фоторедактор"
3. Вносим любое изменение в фотографию. Можно чёрной/белой кистью нажать на чёрную/белую область фотографии и сохранить изменения.
4. В открытой снизу вкладке "Сеть" нажимаем на поиск и вводим туда "/v2/upload"
5. Из двух найденных запросов выбираем тот, который POST
6. Кликаем по запросу правой кнопкой мыши и выбираем "копировать -> копировать как cURL (bash)"
7. Заходим в Insomnia, добавляем новый запрос к API через параметр "From Curl" и вставляем из буфера обмена скопированные данные
8. В появившемся новом запросе нажимаем на "Multipart", добавляем параметр под названием "file" и загружаем в значение фотографию, на которую хотим заменить старую
9. После отправки запроса, получаем ответ с данными о новой загруженной фотографии
10. Возвращаемся в Chrome, вводим в поиск "getPhotoEditorUploadServer", точно также копируем cURL как bash и переносим в Insomnia
11. Перед отправкой запроса заходим в "Form" и заменяем содержимое "response_json" на то, которое мы получили в пункте 8. Если есть необходимость, можно заменить содержимое параметра "photo" и указать id другой фотографии
12. Отправляем запрос и фотография в профиле заменяется на ту, которую мы загрузили в пункте 7
|DevsNotes|
Вряд ли это можно назвать багом или уязвимостью, просто полезный трюк с фоторедактором VK, который существует уже 3 года. Суть в том, что при редактировании фотографии, происходит создание нового изображения и перезагрузка его заново. Соответственно, мы можем подставить любую фотографию и загрузить её под видом отредактированной.
0. Скачиваем любое приложение для работы с API, у меня это Insomnia
1. Заходим на свою страницу в ВК, в Chrome нажимаем F12 и переходим на вкладку "Сеть"
2. Кликаем на фотографию, которую хотим заменить, нажимаем "Еще" и входим в "Фоторедактор"
3. Вносим любое изменение в фотографию. Можно чёрной/белой кистью нажать на чёрную/белую область фотографии и сохранить изменения.
4. В открытой снизу вкладке "Сеть" нажимаем на поиск и вводим туда "/v2/upload"
5. Из двух найденных запросов выбираем тот, который POST
6. Кликаем по запросу правой кнопкой мыши и выбираем "копировать -> копировать как cURL (bash)"
7. Заходим в Insomnia, добавляем новый запрос к API через параметр "From Curl" и вставляем из буфера обмена скопированные данные
8. В появившемся новом запросе нажимаем на "Multipart", добавляем параметр под названием "file" и загружаем в значение фотографию, на которую хотим заменить старую
9. После отправки запроса, получаем ответ с данными о новой загруженной фотографии
{
"sha": "de1d409d24014242*****9ccdb528b3f3e3*****e4c80077f665094",
"secret": "-8074388148****96789",
"meta": {
"height": "604",
"kid": "8719365****dff45ea2521a5b0a3b124",
"width": "604"
},
"hash": "0077c3a48d0****b59c762b982a25ae8e",
"server": "842602",
"user_id": 276****00,
"request_id": "HVKkcyKqw2****NW2TAhzg1HGsOHw",
"album_id": -14
} 10. Возвращаемся в Chrome, вводим в поиск "getPhotoEditorUploadServer", точно также копируем cURL как bash и переносим в Insomnia
11. Перед отправкой запроса заходим в "Form" и заменяем содержимое "response_json" на то, которое мы получили в пункте 8. Если есть необходимость, можно заменить содержимое параметра "photo" и указать id другой фотографии
12. Отправляем запрос и фотография в профиле заменяется на ту, которую мы загрузили в пункте 7
|DevsNotes|
❤2🔥2