Фаззинг на удаленке
Я часто сталкиваюсь с ситуацией, когда нужно пробрутить url либо какую-то его часть. Использую для этого дела ffuf и бручу как правило на vds.
Нередко, в этих ситуациях, я являюсь аутентифицированным/авторизованным пользователем, соотвественно имею либо куки, либо токен, которые присутствуют в запросах.
Для наглядности:
Есть https://example.com/cabinet/ и доступен он только аутентифицированному пользователю. У нас есть аккаунт, мы в него входим. Приспичило нам пробрутить директории по данному пути https://example.com/cabinet/FUZZ и сделать мы это хотим именно как юзер, то есть с куками, чтобы увеличить вероятность находок. В этом случае крайне неудобно копировать куки из запроса, и указывать их как опцию при запуске ffuf. Выглядело бы это так:
ffuf -b "НУУУУУУУ ОООООООООЧЕНЬ МНОООООГОООО СИМВОЛОООООООООВ" -u https://example.com/cabinet/FUZZ
Хорошо если куки это единственное, что нужно перенести из запроса, но бывают кейсы с дополнительными/нестандартными хидерами. В моем случае это приводит к тому, что я банально ленюсь забиваю на подобный брут (либо, если теория стоящая, использую медленный Burp Intruder).
У меня есть решение, которое выглядит не слишком элегантно, но мне нравится и я решил им с вами поделиться. Описывать буду для macOS, но полагаю, адаптировать под другие оси не сложно, у меня вышло провернуть даже на винде с wsl, потанцевав с костылями.
Как настроить
- Идем в репу https://github.com/bytebutcher/burp-send-to и устанавливаем этот совершенно замечательнейший плагин для бурпа.
- Далее устанавливаем iterm2.
- Настраиваем возможность подключения к vds по ssh
Создаем там, где вам удобно (у меня это будет /Users/kedrisch/runner.sh), скрипт runner.sh с содержимым:
function iterm () {
osascript &>/dev/null <<EOF
tell application "iTerm"
activate
tell current window
create tab with default profile
tell current session of current tab
write text "$@"
end tell
end tell
end tell
EOF
}
iterm $@Этот скрипт будет запускать iterm с помощью osascript, поскольку на macOS нельзя просто взять и из командной строки стартануть iterm. По крайней мере я не нашел способа.
Далее переходим в Burp на вкладку “Send to” и в поле “Run in terminal” вписываем “bash /Users/kedrisch/runner.sh %C”.
Теперь нажимаем кнопку Add и добавляем собственно профиль запуска нашей команды. Name указываете произвольно. Command заполняем следующим содержимым, с заменой путей к ключам и программам на ваши собственные.
scp -i /path/to/privatekey %R user@ip:/tmp/request; ssh -i /path/to/privatekey user@ip '/path/to/ffuf -ac -request /tmp/request -w /path/to/list.txt'
Ставим галку “Run in terminal” и “Show prior to execution”. Ok.
Как запускать:
Ловим запрос. Ключевым словом FUZZ указываем в запросе то место, которое будет фаззиться. ПКМ. Extentions → Custom send to → Send to → *Profile name*
Немного пояснений
Что происходит, полагаю, и так видно, но поясню на всякий случай.
Плагин Send to берет запрос и пишет его содержимое во временный файл, путь к которому можно получить макросом %R.
Scp берет этот файл и загружает его на vds.
Ssh запускает ffuf, передавая на вход загруженный файл. Ffuf, как вы уже догадались, поддерживает возможность такого запуска.
Как вы понимаете, ffuf здесь как один из возможных вариантов использования данного плагина, дальше дело за вашей фантазией.