# Writeup: Скрытый канал в пингах Pinecraft

**Категория:** Форензика

**Класс:** 11 класс

**Файлы:** `pinecraft_incident.pcap`

**Флаги:** 3


## Вступление

Нам дают PCAP-файл с трафиком, перехваченным на скомпрометированном Minecraft-кластере Pinecraft. Атакующий проник на сервер, загрузил вредоносный скрипт через path traversal в API и организовал эксфильтрацию данных через ICMP-пакеты -- под видом обычных пингов.

---

## Флаг 1: Эксплуатируемый эндпоинт

### Шаг 1. Открываем PCAP и смотрим HTTP-трафик

Загружаем `pinecraft_incident.pcap` в Wireshark. В файле смешан разный трафик: TCP на порт 25565 (Minecraft), DNS, ARP, ICMP и HTTP. Начинаем с HTTP:

```
http
```
![](img/SCR-20260325-pclw.png)

Видим несколько GET-запросов (фоновый трафик к API сервера) и один POST-запрос, который сразу бросается в глаза.

### Шаг 2. Находим POST с path traversal

Фильтруем только POST:

```
http.request.method == POST
```

Обнаруживаем запрос:

```
POST /api/plugins/upload?path=../../../../tmp/shell.sh HTTP/1.1
```

Это классическая path traversal атака: злоумышленник загружает файл `shell.sh` через API загрузки плагинов, но указывает путь `../../../../tmp/shell.sh`, чтобы записать файл за пределы директории плагинов -- прямо в `/tmp`. Эндпоинт API -- `/api/plugins/upload` (без query-параметров).

![](img/image.png)

**Флаг 1:** `vsosh{/api/plugins/upload}`

## Флаг 2: Hex-кодированные данные из ICMP (id=0x1337)

### Шаг 4. Обнаруживаем аномальные ICMP-пакеты

Переключаемся на ICMP-трафик:

```
icmp
```
![](img/SCR-20260325-pday.png)

Видим два типа ICMP Echo Request:
- Обычные пинги между серверами (id=разные значения, стандартный payload из букв алфавита)
- Пакеты с характерным идентификатором `0x1337` и `0x4D43`

Идентификатор `0x1337` (leet) -- явный маркер. `0x4D43` в ASCII -- это `MC` (Minecraft). Обе серии идут от `192.168.1.10` (сервер Pinecraft) к `10.13.37.42` (атакующий).

### Шаг 5. Фильтруем пакеты с id=0x1337

```
icmp.type == 8 && icmp.ident == 0x1337
```
![](img/SCR-20260325-pdoe.png)

Обнаруживаем серию ICMP Echo Request пакетов. В каждом -- payload из hex-символов: `3163`, `6d70`, `5f63` и т.д.

### Шаг 6. Извлекаем и декодируем hex

Через tshark:

```bash
tshark -r pinecraft_incident.pcap \
  -Y "icmp.type == 8 && icmp.ident == 0x1337" \
  -T fields -e data.data | tr -d '\n:' | xxd -r -p | xxd -r -p # double hex
```

Или вручную в Wireshark: для каждого пакета открываем Data-слой, копируем hex-значения, склеиваем и декодируем.

## Флаг 3: XOR-зашифрованные данные из ICMP (id=0x4D43)

### Шаг 7. Находим ключ XOR в HTTP-заголовке

Возвращаемся к HTTP-трафику. В ответе сервера на POST-запрос (шаг 2) есть нестандартный заголовок:

```
http.response
```
![](img/SCR-20260325-pdzm.png)

Раскрываем HTTP-ответ и в заголовках находим:

```
X-Session-Key: p1n3cr4ft
```

Это ключ XOR-шифрования. Атакующий спрятал его в кастомном HTTP-заголовке ответа -- хитрый, но распространённый приём.

Через tshark:

```bash
tshark -r pinecraft_incident.pcap -Y "http.response" -V | grep "X-Session-Key"
# X-Session-Key: p1n3cr4ft
```

### Шаг 8. Извлекаем payload из ICMP с id=0x4D43

```
icmp.type == 8 && icmp.ident == 0x4D43
```
![](img/SCR-20260325-peey.png)
Эти пакеты содержат сырые байты (не hex), зашифрованные XOR.

### Шаг 9. Дешифруем XOR

XOR-шифрование с циклическим ключом: каждый байт данных XOR'ится с соответствующим байтом ключа. Ключ повторяется по кругу:

```
data:  d[0] d[1] d[2] ... d[8] d[9] ...
key:   p    1    n    ... t    p    ...
```

Пример автоматического решения с забором шифрованных байтов флага через библиотеку scapy:

```python
from scapy.all import rdpcap, ICMP, Raw

packets = rdpcap("pinecraft_incident.pcap")
key = b"p1n3cr4ft"

encrypted = b""
for pkt in packets:
    if ICMP in pkt and pkt[ICMP].type == 8 and pkt[ICMP].id == 0x4D43:
        if Raw in pkt:
            encrypted += pkt[Raw].load

decrypted = bytes(b ^ key[i % len(key)] for i, b in enumerate(encrypted))
print(decrypted.decode())  # h1dd3n_3xf1ltr4t10n
```

Результат: `h1dd3n_3xf1ltr4t10n` (от "hidden exfiltration").

**Флаг 3:** `vsosh{h1dd3n_3xf1ltr4t10n}`

---

## Итог

| # | Флаг | Техника |
|---|------|---------|
| 1 | `vsosh{/api/plugins/upload}` | HTTP POST с path traversal, фильтр по методу запроса |
| 2 | `vsosh{1cmp_c0v3rt_ch4nn3l}` | Извлечение hex-payload из ICMP Echo Request (id=0x1337) |
| 3 | `vsosh{h1dd3n_3xf1ltr4t10n}` | Поиск XOR-ключа в HTTP-заголовке + дешифровка ICMP payload (id=0x4D43) |
