漏洞挖掘从黑盒到白盒-上篇
字数 3166 2025-10-01 14:05:45
教学文档:从黑盒到白盒的漏洞挖掘实战分析
文档核心: 本文档基于奇安信攻防社区分享的一个真实案例,详细剖析了对某网络设备Web系统从黑盒测试到白盒分析,最终挖掘出多个高危漏洞的完整过程。旨在教学漏洞挖掘的思路、方法和关键技术点。
一、 目标概述与初始信息收集
- 目标性质: 一款网络设备(如防火墙、路由器等)的Web管理界面。
- 技术栈: 前端由PHP编写,主要负责展示和交互;核心业务功能由独立的二进制程序(如
xxxxonitor)实现,并通过PHP进行调用。这是嵌入式设备常见架构。 - 测试起点: 一个常见的登录框。
二、 漏洞挖掘点一:未授权访问与敏感信息泄露
这是一个逻辑漏洞与加密缺陷结合的经典案例。
-
漏洞发现:
- 通过分析登录过程的流量或前端代码,发现登录请求调用了
readini.php文件。 - 直接访问
http://<target>/readini.php,发现该接口未授权即可访问,且返回了经过加密的用户名和密码等敏感信息。
- 通过分析登录过程的流量或前端代码,发现登录请求调用了
-
加密分析与绕过:
- 老版本(如1.x): 信息为明文传输,直接造成严重泄露。
- 新版本(2.x): 虽已对敏感信息做了加密处理,但未授权访问问题未修复。
- 白盒分析: 追踪加密函数。加密/解密函数
encrypt()就定义在readini.php文件中。 - 漏洞利用: 由于加密算法是自实现的、且强度较弱(“简单粗暴”),攻击者可以直接将加密后的字符串扣取出来,使用相同的
encrypt()函数进行本地解密,从而获得所有用户的明文密码。
-
影响:
- 攻击者无需任何权限即可获取设备最高权限的登录凭证。
- 此漏洞在3.x版本中通过隐藏文件目录(而非修复漏洞)的方式进行规避,但风险依然潜在存在。
关键知识点:
- 永远不要信任客户端执行的校验,核心权限校验必须在服务端进行。
- 自实现加密算法往往存在缺陷,容易通过逆向分析被破解。
- 安全修复必须根治,隐藏文件(Security by Obscurity)不是有效的修复手段。
三、 漏洞挖掘点二:认证绕过漏洞
在发现上述漏洞后,作者进一步分析了登录成功后的逻辑。
-
漏洞发现:
- 登录成功后,会跳转到
xxxigation.php(或类似功能的主页面)。 - 白盒分析该文件代码,发现其会校验用户的登录状态(Session),如果未登录,则强制跳转回
index.php(登录页)。
- 登录成功后,会跳转到
-
漏洞利用:
- 直接以未授权方式访问
xxxigation.php,观察HTTP响应。虽然浏览器发生了跳转,但最初的HTTP响应体中实际上包含了页面数据。 - 绕过方法: 使用Burp Suite等工具拦截响应,删除或修改触发跳转的代码(如JavaScript的
location.href或HTTP的3xx状态码和Location头),即可看到未登录状态下的管理界面。 - 自动化绕过: 在Burp Suite中配置
Match and Replace规则,自动删除所有响应中导致跳转的代码,从而实现全版本(包括3.x)的一键认证绕过。
- 直接以未授权方式访问
-
影响与拓展:
- 绕过后,虽然可以访问界面,但后续操作可能会因无Session而失败。
- 深入测试发现,大量后台API接口根本没有校验登录状态,可以直接访问并操作。这比单纯的界面绕过危害更大。
关键知识点:
- 权限校验必须贯穿整个会话流程,而不仅仅是入口点。
- 前端跳转不等于安全,所有权限校验必须在服务端API层面完成。
- 工具(Burp Suite)的熟练使用可以极大提高测试效率。
四、 漏洞挖掘点三:命令注入漏洞(初级)
在获得界面访问能力后,开始进行功能点测试。
-
目标选择: “网络诊断”功能中的
Ping测试。此类功能因需要调用系统命令,是命令注入的高发区。 -
黑盒测试:
- 输入测试Payload(如
127.0.0.1; whoami)后,发现存在命令注入漏洞,但利用效果极其有限。 - 限制:
- 注入后只能执行单个命令,无法使用连接符(如
&&,|)执行多个命令。 - 命令回显只有一行,无法看到完整输出,非常鸡肋。
- 注入后只能执行单个命令,无法使用连接符(如
- 漏洞Payload格式类似:
command .xx.xx.xx.xx。
- 输入测试Payload(如
-
白盒分析(PHP层):
- 跟踪Ping功能的代码,发现PHP文件(如
socket.php)主要作用是生成一个任务标识,并通过socket将参数传递给后端二进制程序处理。漏洞不在此处。 - 关键代码:
$REP=$SC->eachMsg("PIN$PINGCNT:$PINGLEN:$SourceIP:$PINGIP"); - 这表明PHP只是一个中间件,真正的命令执行发生在别处。
- 跟踪Ping功能的代码,发现PHP文件(如
关键知识点:
- 黑盒测试遇到限制时,需立即转向白盒分析以理解根本原因。
- 现代设备常用前后端分离架构,Web后端(PHP/Python)可能只是一个API网关,核心功能在更底层的二进制程序中。
五、 深入核心:二进制程序命令注入分析
这是本次漏洞挖掘的升华,从Web层深入到了设备固件的核心。
-
定位二进制文件:
- 通过分析进程、日志或字符串,定位到真正处理Ping命令的二进制程序
xxxxonitor。
- 通过分析进程、日志或字符串,定位到真正处理Ping命令的二进制程序
-
静态分析(使用IDA Pro):
- 在
xxxxonitor中搜索eachMsg函数或相关命令字符串(如"PIN")。 - 发现关键代码:
sprintf(s_6, "/root/ping.shell start %s %s %s %s &", ...); system(s_6); - 漏洞成因:
sprintf函数直接将用户可控的参数(PINGIP)拼接进命令字符串中,然后调用system执行,造成了命令注入。 - 为何利用受限: 由于参数传递格式(如
PIN:1:2:192.168.1.1)和二进制程序自身的解析逻辑,导致只有PINGIP参数的特定位置可供注入,且空格等字符可能被过滤,故利用起来非常困难。
- 在
-
发现其他潜在风险:
- 在审计过程中,发现了栈溢出漏洞的迹象(如不安全的
strcpy,sprintf用法)。 - 由于栈溢出攻击通常会导致程序崩溃(设备死机),在未做好充分准备(如动态调试、编写稳定Exploit)前,不宜在真实设备上演示。
- 在审计过程中,发现了栈溢出漏洞的迹象(如不安全的
-
漏洞链验证:
- 还发现了停止Ping操作的命令
eachMsg("PSP"),其对应执行/root/ping.shell stop,这解释了为何PHP层会去读取ping.txt作为结果返回,完整地串起了从Web输入到二进制命令执行再到结果回显的整个漏洞链。
- 还发现了停止Ping操作的命令
关键知识点:
- 嵌入式设备的漏洞挖掘最终常需回归到二进制分析。
sprintf+system是命令注入的经典危险模式。- 挖掘漏洞时,需有全局视角,理清数据流从前端到后端的完整路径。
- 发现一个漏洞点时,要扩大审计范围,其周边功能很可能存在同类问题。
六、 总结与教学要点
- 测试思路: 入口点(登录框) -> 信息收集(敏感文件) -> 逻辑漏洞(认证绕过) -> 功能点测试(高危功能) -> 深入分析(二进制逆向)。
- 技术要点:
- 加密算法逆向: 扣取代码,本地解密。
- 认证绕过: 拦截修改HTTP响应。
- 代码追踪: 从PHP追踪到二进制程序。
- 静态分析: 使用IDA Pro分析二进制文件,识别危险函数(
sprintf,system,strcpy)。
- 核心教训:
- 权限校验是安全的基石,需在所有环节落实。
- 外部输入永远不可信,必须严格过滤后才能用于拼接命令、SQL查询等。
- 黑盒与白盒结合,能相互促进,大幅提升漏洞挖掘的深度和效率。
(根据原文提示,后续还会有下篇,讲述更多命令注入漏洞的挖掘细节。)