Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
0000. Tplmap
Старичок, но очень быстро ищет SSTI в веб‑приложениях. Автоматически определяет движок шаблонов (Jinja2, Twig, Smarty, Mako, Pebble и 15 других) и эксплуатирует инъекцию вплоть до shell на сервере.
SSTI (server-side template injection) — инъекция в шаблон, возникает, когда пользовательский ввод не экранируется. Введенные данные в чистом виде попадают в шаблон и обрабатываются шаблонизатором, как остальной код. Классический пример: хакер вводит в текстовое поле {{, в ответе сервера приходит 49. Это значит, что на сервере работает шаблонизатор Jinja2 или Twig. Если приложение на PHP, значит, Twig. Бэкенд на Python? Значит, Jinja2. Шаблонизатор воспринял данные в скобках {{..} как часть шаблона и выполнил код внутри скобок.
Тулза старенькая, поэтому придется поставить Python 3.9. Сделаю это в виртуальном окружении с помощью pyenv. Если pyenv у тебя не установлен:
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
Установка tplmap:
git clone https://github.com/epinna/tplmap
python3 -m venv myvenv
source myvenv/bin/activate
pyenv install 3.9.18
pyenv local 3.9.18
pip install -r requirements.txt
pip install PyYAML requests certifi chardet idna urllib3
Давай потестим на лабе «Server-side template injection in an unknown language with a documented exploit»:
python3 tplmap.py -u "https://0a5e0095032bcee0814db22e008200dd.web-security-academy.net/?message=*" --level=5

Параметр --level определяет, насколько опасные инъекции использовать. Начинай с 1; максимальный пятый уровень указывай только тогда, когда не боишься навредить приложению.
Если нужен шелл, в зависимости от условий используй опции:
-
--os-shell— интерактивный шелл в терминале; -
--bind-shell— тулза забиндит порт под шелл, тебе останется только подключиться к нему; -
--reverse-shell— попытается поднять реверс‑шелл с подключением к указанным в параметре хосту и порту; -
--tpl-shell— интерактивный шелл с помощью движка шаблонизатора.
Для выполнения команд применяй:
-
--os-cmd— выполнение указанной команды на сервере приложений; -
--tpl-code— инъекция кода в шаблон.
Вишенка на торте — работа с файлами. Чтобы скачать нужный файл с сервера, передай в параметре --download путь к файлу, например /. Для загрузки файла на сервер юзай --upload.
Как видишь, старичок очень хорош и ориентирован на жесткую эксплуатацию!
0001. SSTImap
Разработка Владислава Корчагина, исследователя безопасности из России. Владислав знает о SSTI больше, чем кто‑либо еще. Все собранные знания он вложил в инструмент SSTImap. В том числе и в новые виды SSTI: error-based SSTI и boolean error-based blind SSTI. Подробнее смотри в отчете с OFFZONE 2025.
SSTImap — это свежий, навороченный и умный аналог tplmap, у которого гораздо больше возможностей. Здесь больше пейлоадов, способов обойти WAF и тонких настроек. Есть и оборотная сторона медали: тулзу нужно уметь запускать. Запуск «в лоб» приведет к излишнему шуму и долгому тестированию. Особенно в режиме краулинга и анализа форм.
Установка из репозитория GitHub:
git clone https://github.com/vladko312/SSTImap
pip3 install -r requirements.txt
Пример запуска:
# Простой запускpython3 sstimap.py -u 'https://target.com/page?name=John'# Режим краулинга сайта с тестированием формpython3 sstimap.py -u 'https://target.com/' --crawl 5 --forms# Если запросы с JSON в телеpython3 sstimap.py -u 'https://target.com/api/render' \ -m POST \ -d '{"name":"*"}' \ --data-type json \ -H 'Content-Type: application/json'# Работа с авторизациейpython3 sstimap.py -u 'https://target.com/page?name=*' \ -H 'Authorization: Basic bG9naW46c2VjcmV0' \ -H 'Cookie: session=abc123'# Запусти Burp Proxy и отслеживай все запросы тулзы. Увидишь пейлоады и реакцииpython3 sstimap.py -u 'https://target.com/page?name=*' -p http://127.0.0.1:8080

0010. Smuggler
Эта утилита чекает уязвимости типа HTTP request smuggling. Суть атаки в том, что фронтенд (Nginx, HAProxy и другие реверс‑прокси) и бэкенд по‑разному интерпретируют границы HTTP-запроса. Когда один из них ориентируется на заголовок Content-Length, а другой — на Transfer-Encoding: , между ними возникает рассогласование. Часть одного запроса «просачивается» в тело следующего, отсюда и название: smuggling (контрабанда).
git clone https://github.com/defparam/smuggler && cd smuggler
pip3 install requests
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
