漏洞挖掘从黑盒到白盒-上篇
字数 3166 2025-10-01 14:05:45

教学文档:从黑盒到白盒的漏洞挖掘实战分析

文档核心: 本文档基于奇安信攻防社区分享的一个真实案例,详细剖析了对某网络设备Web系统从黑盒测试到白盒分析,最终挖掘出多个高危漏洞的完整过程。旨在教学漏洞挖掘的思路、方法和关键技术点。


一、 目标概述与初始信息收集

  • 目标性质: 一款网络设备(如防火墙、路由器等)的Web管理界面。
  • 技术栈: 前端由PHP编写,主要负责展示和交互;核心业务功能由独立的二进制程序(如xxxxonitor)实现,并通过PHP进行调用。这是嵌入式设备常见架构。
  • 测试起点: 一个常见的登录框

二、 漏洞挖掘点一:未授权访问与敏感信息泄露

这是一个逻辑漏洞与加密缺陷结合的经典案例。

  1. 漏洞发现:

    • 通过分析登录过程的流量或前端代码,发现登录请求调用了 readini.php 文件。
    • 直接访问 http://<target>/readini.php,发现该接口未授权即可访问,且返回了经过加密的用户名和密码等敏感信息。
  2. 加密分析与绕过:

    • 老版本(如1.x): 信息为明文传输,直接造成严重泄露。
    • 新版本(2.x): 虽已对敏感信息做了加密处理,但未授权访问问题未修复。
    • 白盒分析: 追踪加密函数。加密/解密函数 encrypt() 就定义在 readini.php 文件中。
    • 漏洞利用: 由于加密算法是自实现的、且强度较弱(“简单粗暴”),攻击者可以直接将加密后的字符串扣取出来,使用相同的 encrypt() 函数进行本地解密,从而获得所有用户的明文密码。
  3. 影响:

    • 攻击者无需任何权限即可获取设备最高权限的登录凭证。
    • 此漏洞在3.x版本中通过隐藏文件目录(而非修复漏洞)的方式进行规避,但风险依然潜在存在。

关键知识点:

  • 永远不要信任客户端执行的校验,核心权限校验必须在服务端进行。
  • 自实现加密算法往往存在缺陷,容易通过逆向分析被破解。
  • 安全修复必须根治,隐藏文件(Security by Obscurity)不是有效的修复手段。

三、 漏洞挖掘点二:认证绕过漏洞

在发现上述漏洞后,作者进一步分析了登录成功后的逻辑。

  1. 漏洞发现:

    • 登录成功后,会跳转到 xxxigation.php(或类似功能的主页面)。
    • 白盒分析该文件代码,发现其会校验用户的登录状态(Session),如果未登录,则强制跳转回 index.php(登录页)。
  2. 漏洞利用:

    • 直接以未授权方式访问 xxxigation.php,观察HTTP响应。虽然浏览器发生了跳转,但最初的HTTP响应体中实际上包含了页面数据
    • 绕过方法: 使用Burp Suite等工具拦截响应,删除或修改触发跳转的代码(如JavaScript的 location.href 或HTTP的 3xx 状态码和Location头),即可看到未登录状态下的管理界面。
    • 自动化绕过: 在Burp Suite中配置 Match and Replace 规则,自动删除所有响应中导致跳转的代码,从而实现全版本(包括3.x)的一键认证绕过
  3. 影响与拓展:

    • 绕过后,虽然可以访问界面,但后续操作可能会因无Session而失败。
    • 深入测试发现,大量后台API接口根本没有校验登录状态,可以直接访问并操作。这比单纯的界面绕过危害更大。

关键知识点:

  • 权限校验必须贯穿整个会话流程,而不仅仅是入口点。
  • 前端跳转不等于安全,所有权限校验必须在服务端API层面完成。
  • 工具(Burp Suite)的熟练使用可以极大提高测试效率。

四、 漏洞挖掘点三:命令注入漏洞(初级)

在获得界面访问能力后,开始进行功能点测试。

  1. 目标选择: “网络诊断”功能中的 Ping 测试。此类功能因需要调用系统命令,是命令注入的高发区。

  2. 黑盒测试:

    • 输入测试Payload(如 127.0.0.1; whoami)后,发现存在命令注入漏洞,但利用效果极其有限
    • 限制:
      • 注入后只能执行单个命令,无法使用连接符(如 &&, |)执行多个命令。
      • 命令回显只有一行,无法看到完整输出,非常鸡肋。
    • 漏洞Payload格式类似:command .xx.xx.xx.xx
  3. 白盒分析(PHP层):

    • 跟踪Ping功能的代码,发现PHP文件(如 socket.php)主要作用是生成一个任务标识,并通过socket将参数传递给后端二进制程序处理。漏洞不在此处。
    • 关键代码:$REP=$SC->eachMsg("PIN$PINGCNT:$PINGLEN:$SourceIP:$PINGIP");
    • 这表明PHP只是一个中间件,真正的命令执行发生在别处。

关键知识点:

  • 黑盒测试遇到限制时,需立即转向白盒分析以理解根本原因。
  • 现代设备常用前后端分离架构,Web后端(PHP/Python)可能只是一个API网关,核心功能在更底层的二进制程序中。

五、 深入核心:二进制程序命令注入分析

这是本次漏洞挖掘的升华,从Web层深入到了设备固件的核心。

  1. 定位二进制文件:

    • 通过分析进程、日志或字符串,定位到真正处理Ping命令的二进制程序 xxxxonitor
  2. 静态分析(使用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 参数的特定位置可供注入,且空格等字符可能被过滤,故利用起来非常困难。
  3. 发现其他潜在风险:

    • 在审计过程中,发现了栈溢出漏洞的迹象(如不安全的 strcpy, sprintf 用法)。
    • 由于栈溢出攻击通常会导致程序崩溃(设备死机),在未做好充分准备(如动态调试、编写稳定Exploit)前,不宜在真实设备上演示。
  4. 漏洞链验证:

    • 还发现了停止Ping操作的命令 eachMsg("PSP"),其对应执行 /root/ping.shell stop,这解释了为何PHP层会去读取 ping.txt 作为结果返回,完整地串起了从Web输入到二进制命令执行再到结果回显的整个漏洞链。

关键知识点:

  • 嵌入式设备的漏洞挖掘最终常需回归到二进制分析
  • sprintf + system 是命令注入的经典危险模式。
  • 挖掘漏洞时,需有全局视角,理清数据流从前端到后端的完整路径。
  • 发现一个漏洞点时,要扩大审计范围,其周边功能很可能存在同类问题。

六、 总结与教学要点

  1. 测试思路: 入口点(登录框) -> 信息收集(敏感文件) -> 逻辑漏洞(认证绕过) -> 功能点测试(高危功能) -> 深入分析(二进制逆向)。
  2. 技术要点:
    • 加密算法逆向: 扣取代码,本地解密。
    • 认证绕过: 拦截修改HTTP响应。
    • 代码追踪: 从PHP追踪到二进制程序。
    • 静态分析: 使用IDA Pro分析二进制文件,识别危险函数(sprintf, system, strcpy)。
  3. 核心教训:
    • 权限校验是安全的基石,需在所有环节落实。
    • 外部输入永远不可信,必须严格过滤后才能用于拼接命令、SQL查询等。
    • 黑盒与白盒结合,能相互促进,大幅提升漏洞挖掘的深度和效率。

(根据原文提示,后续还会有下篇,讲述更多命令注入漏洞的挖掘细节。)

教学文档:从黑盒到白盒的漏洞挖掘实战分析 文档核心: 本文档基于奇安信攻防社区分享的一个真实案例,详细剖析了对某网络设备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 。 白盒分析(PHP层): 跟踪Ping功能的代码,发现PHP文件(如 socket.php )主要作用是生成一个任务标识,并通过socket将参数传递给后端二进制程序处理。漏洞不在此处。 关键代码: $REP=$SC->eachMsg("PIN$PINGCNT:$PINGLEN:$SourceIP:$PINGIP"); 这表明PHP只是一个 中间件 ,真正的命令执行发生在别处。 关键知识点: 黑盒测试遇到限制时,需立即转向白盒分析以理解根本原因。 现代设备常用 前后端分离架构 ,Web后端(PHP/Python)可能只是一个API网关,核心功能在更底层的二进制程序中。 五、 深入核心:二进制程序命令注入分析 这是本次漏洞挖掘的升华,从Web层深入到了设备固件的核心。 定位二进制文件: 通过分析进程、日志或字符串,定位到真正处理Ping命令的二进制程序 xxxxonitor 。 静态分析(使用IDA Pro): 在 xxxxonitor 中搜索 eachMsg 函数或相关命令字符串(如 "PIN" )。 发现关键代码: 漏洞成因: 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输入到二进制命令执行再到结果回显的整个漏洞链。 关键知识点: 嵌入式设备的漏洞挖掘最终常需回归到 二进制分析 。 sprintf + system 是命令注入的经典危险模式。 挖掘漏洞时,需有 全局视角 ,理清数据流从前端到后端的完整路径。 发现一个漏洞点时,要 扩大审计范围 ,其周边功能很可能存在同类问题。 六、 总结与教学要点 测试思路: 入口点(登录框) -> 信息收集(敏感文件) -> 逻辑漏洞(认证绕过) -> 功能点测试(高危功能) -> 深入分析(二进制逆向)。 技术要点: 加密算法逆向: 扣取代码,本地解密。 认证绕过: 拦截修改HTTP响应。 代码追踪: 从PHP追踪到二进制程序。 静态分析: 使用IDA Pro分析二进制文件,识别危险函数( sprintf , system , strcpy )。 核心教训: 权限校验 是安全的基石,需在所有环节落实。 外部输入 永远不可信,必须严格过滤后才能用于拼接命令、SQL查询等。 黑盒与白盒 结合,能相互促进,大幅提升漏洞挖掘的深度和效率。 (根据原文提示,后续还会有下篇,讲述更多命令注入漏洞的挖掘细节。)