
Эксплойт для cve-2023-1671. Итак, есть тестовая и эксплуатационная функция. Тест отправляет ping-запрос на домен dnslog с уязвимого сайта. Если ping проходит, уязвимость существует, если нет — значит cve-2023-1671 отсутствует. Эксплуатационная функция, с другой стороны, отправляет запрос с вашей командой на сервер.
/opt/ws/bin/ftsblistpack — это Perl-скрипт, который вызывает /opt/ws/bin/sblistpack, также Perl-скрипт.
Аргументы командной строки в нём заключены в одинарные кавычки:
$rc += system("$sblistpack '$uri' '$user' '$filetype' '$filein' '$fileout'");
Это будет важно в будущем — одна из тех вещей, которые приведут к уязвимости.
Далее /opt/ui/apache/htdocs/controllers/UsrBlocked.php передаёт команду оболочки в ftsblistpack с параметрами, предоставленными пользователем: args_reason, url, filetypeser, user_encoded.
Ввод пользователя по-прежнему обрабатывается PHP-функцией escapeshellarg(), которая добавляет одинарные кавычки вокруг строки или экранирует существующие одинарные кавычки.
Это позволяет передать строку напрямую в функцию оболочки и обработать её вместе с пользовательскими параметрами.
Вот что из этого выходит:
Если мы введём:
';echo 1 #
То получим:
'shell user' ' ';echo 1 #'
И это позволяет нанести некоторый ущерб системе в этой команде. Мы добавляем наше закодированное значение в user_encoded.
UsrBlocked.php перенаправляется через /index.php?c=blocked, затем вводятся необходимые GET и POST параметры. Поскольку параметр user_encoded закодирован в Base64, он идеально подходит для инъекции.
https://github.com/ohnonoyesyes/CVE-2023-1671 — эксплойт оболочки
https://vulncheck.com/blog/cve-2023-1671-analysis — пост cve-2023-1671
https://nvd.nist.gov/vuln/detail/CVE-2023-1671 — информация NIST о cve-2023-1671
Итак, есть функция тестирования и функция эксплуатации.
Тест отправляет ping-запрос на домен dnslog(http://www.dnslog.cn) с уязвимого сайта. Если ping проходит, уязвимость существует, если нет — cve-2023-1671 отсутствует.
Функция эксплуатации, в свою очередь, отправляет на сервер запрос с вашей командой.
-h
Получение параметров использования
--exploit
Вызывает функцию эксплуатации cve-2023-1671.
Это выполнит вашу произвольную команду без проверки наличия уязвимости.
--test
Вызывает функцию проверки уязвимости.
Это делается с помощью ping-запроса к домену dnslog с уязвимого сервера.
Если ping происходит, уязвимость cve-2023-1671 присутствует.
-u
Это IP-адрес или URL вашего сайта.
Обратите внимание на формат: 192.168.0.1 или site.com
-p
Порт уязвимого сайта. Это обязательный параметр, даже если у вас https://site.ocm, вы должны указать -u site.com -p 443
-c
Параметр функции --exploit.
Это любая произвольная команда, которую вы хотите выполнить для эксплуатации сайта.
Формат: -c 'echo cve'
python cve-2023-1671.py --exploit -u 192.168.0.1 -p 443 -c 'echo 1'
python cve-2023-1671.py --test -u 192.168.0.1 -p 443
Этот эксплойт написан в образовательных целях, и я не несу ответственности за ваши действия.
Используйте этот эксплойт только для тестирования и защиты вашей системы.