Sploitus

exploit.pub

githubexploit · 2026-09-12

Exploit Code

README67 lines
## https://sploitus.com/exploit?id=CA9C7E6D-8CED-5874-859E-AF1CD16FCF20
# Exploit Modeling Lab — Windows / x86 stack buffer overflow (strcpy)

Учебный проект (лабораторная работа по безопасности ПО): моделирование
классической уязвимости переполнения буфера стека из-за небезопасного вызова
`strcpy` в C, сборка под **Visual Studio 2022 (x86)** со **снятыми защитами**,
анализ **только открытыми portable-инструментами** (Capstone-скрипты, radare2/
rizin, REDasm) и эксплойт, выполняющий команду через `cmd.exe`.

> ⚠️ Только для учебных целей, на собственной машине / в изолированной среде.
> Не использовать против чужих систем. Полная инструкция — в
> [docs/MANUAL_RU.md](docs/MANUAL_RU.md).

## Структура

```
src/vuln/       уязвимая программа (C) + NOP-sled / "jmp esp" гаджет (MASM)
shellcode/      позиционно-независимый код (WinExec cmd) + XOR-декодер
build/          скрипты сборки (VS2022 x86, защиты выключены)
bin/            собранные артефакты: vuln.exe, .map, листинг дизассемблера
tools/          стенды (test_shell/test_decoder/stack_probe) и Capstone-скрипты
  capstone/     peinfo.py / disasm.py / find_gadget.py (замена dumpbin)
  portable/     radare2 32-bit, rizin, REDasm (в .gitignore, скачиваются отдельно)
exploit/        генератор эксплойта (Python, самодостаточен)
docs/           пошаговая инструкция для студента (RU)
```

## Быстрый старт

```bash
# 1) собрать payload и прогнать против vuln.exe (печатает результат)
python exploit/exploit.py --payload probe --run

# вручную, если без --run:
python exploit/exploit.py --payload probe --out payload.bin
bin\vuln.exe payload.bin
type result.txt          # -> PWNED123
```

## Инструменты анализа (открытые)

```bash
python -m pip install -r tools/capstone/requirements.txt
python tools/capstone/peinfo.py bin/vuln.exe              # заголовки PE
python tools/capstone/disasm.py bin/vuln.exe --va 0x101074A0   # функция
python tools/capstone/find_gadget.py bin/vuln.exe --bytes FFE4 # jmp esp
python tools/capstone/find_gadget.py bin/vuln.exe --sled 16    # NOP-салазки
```

Плюс portable `radare2` (32-bit) / `rizin` для статического анализа и `REDasm`
(GUI) — все лежат в `tools/portable` (не коммитятся).

## Как это работает (кратко)

`vulnerable()` копирует `g_input` в стековый `buf[256]` через `strcpy` без
проверки длины. Смещение до адреса возврата = 260 (буфер 256 + сохранённый
EBP). Стек главного потока оставляет над `buf` лишь ~492 байта до `StackBase`,
поэтому классическая схема «блок на стеке» не помещается. Рабочий payload
переписывает адрес возврата на **фиксированный** глобальный буфер `g_input`
(0x1017E020, секция `.data`, исполняемая, т.к. DEP выключен) и ограничивает
сам `strcpy` встроенным NUL-байтом. Подробности и почему — в `MANUAL_RU.md`.

## Воспроизводимость

* адреса фиксированы (`/DYNAMICBASE:NO`, `/BASE:0x10100000`);
* `result.txt` = `PWNED123` — признак успешного выполнения команды через
  `cmd.exe`.