/opt/ws/bin/ftsblistpack 是一个 Perl 脚本,它调用 /opt/ws/bin/sblistpack,这是另一个 Perl 脚本。
其中的 shell 命令参数用单引号括起来:
$rc += system("$sblistpack '$uri' '$user' '$filetype' '$filein' '$fileout'");
这一点将来会很重要,它将成为导致漏洞的因素之一。
接下来,/opt/ui/apache/htdocs/controllers/UsrBlocked.php 将 shell 命令传递给 ftsblistpack,并附带用户提供的参数:args_reason、url、filetypeser、user_encoded。
用户输入仍然由 PHP 函数 escapeshellarg() 处理,该函数会在字符串周围添加单引号,或对已有单引号进行转义。
这使得您可以直接将字符串传递给 shell 函数,并连同用户参数一起处理。
您可以看到这会产生什么结果:
如果我们输入:
';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 - shell 利用代码
https://vulncheck.com/blog/cve-2023-1671-analysis - 关于 cve-2023-1671 的分析
https://nvd.nist.gov/vuln/detail/CVE-2023-1671 - NIST 关于 cve-2023-1671 的信息
它包含测试和利用功能。
测试功能通过从存在漏洞的站点向 dnslog(http://www.dnslog.cn)域名发送 ping 请求。如果 ping 成功,则说明漏洞存在,否则说明 cve-2023-1671 不存在。
而利用功能则是向服务器发送带有您的命令的请求。
-h
获取使用参数
--exploit
调用利用 cve-2023-1671 的功能。 这将执行您的任意命令,而不检查是否存在漏洞。
--test
调用漏洞测试功能。 通过从存在漏洞的服务器向 dnslog 域名发送 ping 来实现。 如果 ping 发生,则说明存在漏洞 cve-2023-1671。
-u
这是您站点的 IP 或 URL。 注意格式:192.168.0.1 或 site.com
-p
存在漏洞站点的端口。这是一个必填参数,即使您有 https://site.com,也必须指定 -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
此利用代码仅供教育目的编写,我对您的行为不承担任何责任。
请仅在测试和保护您自己系统的情况下使用此利用代码。