# Writeup: Образ диска взломанного сервера Pinecraft

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

**Сложность:** 9 класс

**Файлы:** `pinecraft_backup.img`

**Флаги:** 2

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

Нам дают образ диска формата ext4 со скомпрометированного Minecraft-сервера Pinecraft. Администратор успел снять образ после инцидента. Нужно найти IP-адрес атакующего в логах и восстановить удалённый файл с секретным паролем.

## Флаг 1: IP-адрес атакующего

### Шаг 1. Монтируем образ

Первое, что нужно сделать с любым дисковым образом -- смонтировать его в режиме «только чтение», чтобы не повредить улики:

```bash
sudo mkdir -p /mnt/pinecraft
sudo mount -o ro,loop pinecraft_backup.img /mnt/pinecraft
```

Флаг `-o ro` означает read-only, а `loop` позволяет работать с файлом образа как с блочным устройством.

### Шаг 2. Изучаем структуру файловой системы

```bash
ls -laR /mnt/pinecraft/minecraft/
```

Видим типичную структуру Minecraft-сервера:

![](img/scr0.png)

```
/minecraft/
├── server.properties
├── logs/
│   └── server.log
├── plugins/
│   └── PinecraftEconomy.jar
├── world/
│   └── level.dat
└── backups/                  <-- пустая директория
```

Директория `backups/` пуста -- это подозрительно. Запомним это для второго флага.

### Шаг 3. Читаем логи сервера

```bash
cat /mnt/pinecraft/minecraft/logs/server.log
```

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

```bash
grep -i "unauthorized\|warn\|hack\|attack" /mnt/pinecraft/minecraft/logs/server.log
```
![](img/scr1.png)

Находим:

```
[2024-06-01 11:00:01] [Server/WARN]: Unauthorized access from 10.13.37.42 — invalid credentials
```

IP-адрес `10.13.37.42` -- это адрес атакующего (снова отсылка к `1337`).

**Флаг 1:** `vsosh{10.13.37.42}`

---

## Флаг 2: Секретный пароль из удалённого файла

### Шаг 4. Замечаем пустой каталог backups

Мы уже обратили внимание, что `/minecraft/backups/` пуст. По логике, на рабочем сервере там должны лежать резервные копии. Кто-то удалил файлы.

### Шаг 5. Понимаем, как работает удаление в ext4

На файловых системах ext4 удаление файла не стирает данные физически. Удаляется только запись в таблице файловой системы (inode помечается как свободный), но сами байты данных остаются на диске до тех пор, пока не будут перезаписаны новыми данными.

Это значит, что мы можем найти содержимое удалённого файла, просканировав сырой образ диска на предмет текстовых строк.

### Шаг 6. Ищем данные через strings

Утилита `strings` извлекает все последовательности печатных символов из бинарного файла:

```bash
strings pinecraft_backup.img | grep -i "secret\|backup\|password"
```

В выводе находим фрагмент удалённого файла `admin_backup.txt`:

```
=== Pinecraft Server Admin Backup ===
secret_password: d3l3t3d_but_n0t_g0n3
```

Пароль: `d3l3t3d_but_n0t_g0n3` (от "deleted but not gone" -- удалён, но не исчез).

**Флаг 2:** `vsosh{d3l3t3d_but_n0t_g0n3}`

```bash
# Размонтируем
sudo umount /mnt/pinecraft
```

---

## Итог

| # | Флаг | Где искать |
|---|------|------------|
| 1 | `vsosh{10.13.37.42}` | `/minecraft/logs/server.log`, строка `[Server/WARN]: Unauthorized access from ...` |
| 2 | `vsosh{d3l3t3d_but_n0t_g0n3}` | Удалённый файл `admin_backup.txt`, восстанавливается через `strings` |

Задача демонстрирует два базовых приёма форензики: анализ логов и восстановление удалённых файлов. Главный урок: удаление файла через `rm` не уничтожает данные на диске. Для надёжного удаления нужны инструменты вроде `shred` или полное обнуление блоков.
