找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3623

积分

0

好友

481

主题
发表于 1 小时前 | 查看: 4| 回复: 0

某次渗透测试项目中,初期进展并不顺利,几乎颗粒无收。但眼看要交差,不得不加把劲。在持续 fuzz 目录结构后,终于通过一个关键备份文件撕开了口子,最终成功拿到 Webshell。这里把完整的过程和思路复盘出来,希望能带来一些启发。

0x01 获取备份文件

起初对目标站点进行常规目录扫描,结果基本都是一些 403 响应,收获不大。

深色背景的终端日志界面,显示目录扫描的输出结果,包含 403、301 等状态码

但直觉告诉我这里可能没那么简单,于是重新调整了 fuzz 策略,把目标公司的英文缩写拼接到目录名里继续跑。果然大力出奇迹,最终找到了一个备份压缩包。

服务器错误页面截图,显示 403 禁止访问错误信息

文件管理器界面截图,显示存在 backup.rar 文件

解压后进入备份文件夹,里面包含了不少敏感配置和代码目录。

展示备份文件夹内的文件结构,包含 bin、Doc、AliPay 等子目录及 Web.config 等文件

0x02 通过钉钉 KEY 和 SECRET 获取敏感信息

在备份文件里发现了一个环境变量配置文件 env,其中明文存放着微信小程序、公众号、QQ 以及钉钉等多个 IM 通讯平台的 Key 和 Secret。

env 文件内容截图,包含 REDIS、MAIL 及 WEIXIN、WECHAT、DING 等环境变量

我逐一尝试利用这些微信相关的凭证,却都因接口可能存在 IP 白名单或其他限制,没能成功拿到 access_token。不过,钉钉的 Key 和 Secret 倒是可以正常利用。通过调用钉钉官方 API 即可获取到 access_token。

钉钉开放平台 API Explorer 界面,演示了获取 access_token 的接口调试结果

拿到 token 之后,能操作的数据空间就一下子打开了。这里仅以“获取部门列表”为例展示一下调用效果。

钉钉 API 文档页面,展示了获取部门列表的接口说明及请求参数

根据 API 手册调用后,可以成功拉取到组织通讯录的详细信息。

浏览器开发者工具界面,显示了获取部门列表接口的完整请求与响应数据

0x03 微信支付宝支付接口信息泄露

Web.config 文件中,还找到了微信支付和支付宝的接口配置信息,包括商户私钥、公钥、商户号、应用 AppID 等。

Web.config 配置内容截图,展示了支付宝和微信支付的商户私钥、公钥等敏感配置

这些支付密钥一旦泄露,潜在的风险非常直接。举例来说,攻击者有可能通过伪造请求,实付 1 元却购买价值 100 元的商品。这是因为系统在校验时,若只验证了签名和商户号是否正确,而缺失了对实际支付金额和订单金额的严格比对,就会导致订单金额被篡改后依然认为支付成功。在许多实际案例中,确实有不少站点因此类逻辑漏洞被“薅羊毛”。

一个流程图,形象描述了黑客篡改支付金额的流程:支付1元,前端却显示购买100元成功

更严重的是,备份文件中还一同泄露了支付证书文件 apiclient_cert.p12

文件图标截图,展示了 apiclient_cert.p12 证书文件

有了这份证书,就可以调用微信支付中那些安全级别更高的接口了,比如退款、企业红包发放、企业付款等操作。当然,本次测试点到为止,没有进行真实利用。

0x04 接口文档泄露导致 Getshell

在泄露的文件中,还藏着一份接口文档。翻阅后发现其中定义了一个文件上传的接口。

API 接口文档截图,显示了文件上传接口的调用示例及参数说明

对这个接口进行测试,发现它竟然是未授权访问的,并且可以上传 Webshell 文件。

网络抓包工具界面截图,展示了向 /xxx/File 接口 POST 请求并成功上传 shell.aspx 的请求与响应

然而,接口返回的数据里并没有直接给出 Webshell 的完整访问路径。于是继续发扬“大力出奇迹”的风格,开始爆破常见的上传目录。我整理了一批常用路径进行尝试:

file/
fileRealm/
file_manager/
file_upload/
fileadmin/
fileadmin/_processed_/
fileadmin/_temp_/
fileadmin/user_upload/
upload/
filedump/
filemanager/
filerun/
fileupload/
files/
files/cache/
files/tmp/
logfile/
paket-files/
profile/
profiles/

在爆破过程中,留意到 uploadFile 这个路径的响应状态和别的都不太一样。

开发者工具网络面板截图,显示 uploadFile 路径返回 500 状态码,与其他不同

顺着这个线索最终找到了准确的 Webshell 地址,并使用管理工具成功连接。

冰蝎 Webshell 管理界面截图,显示通过虚拟终端成功执行 whoami 命令,权限为 iis apppool

0x05 总结

这次能拿到这么多战果,起点全在那个备份文件。关于目录 fuzz 的思路,其实很大程度上借鉴了密码爆破的逻辑。很多人觉得设置了复杂密码就万无一失,但现实中密码的构成往往还是有迹可循的。

这里提供一个简单的小脚本,思路就是针对目标公司或系统的常用缩写,生成一系列带数字、特殊符号后缀的字典,用于口令爆破或目录拼接。脚本本身比较简陋,大家可以根据自己的思路继续完善。

#coding=utf-8
import sys

# 检查命令行参数
if len(sys.argv) < 2:
    print("错误:请提供密钥参数")
    print("用法:python script.py <key>")
    sys.exit(1)

key = sys.argv[1]
f = open("%s.txt" % key, "w")

list1 = [123,321,1234,4321,123456,654321,12345678,123456789,1234567890,888,8888,666,6666,163,521,1314,1,11,111,1111,2,222,3,333,5,555,9,999]
list2 = ['#123','#1234','#123456','@123','@1234','@123456','@qq.com','qq.com','@123.com','123.com','@163.com','163.com','126.com','!@#','!@#$','!@#$%^','098']

for j1 in list1:
    pwd1 = key + str(j1) + '\n'
    f.write(pwd1)

for j2 in list2:
    pwd2 = key + str(j2) + '\n'
    f.write(pwd2)

for i in range(1000,2021):
    pwd3 = '{}{}{}'.format(key, i, '\n')
    f.write(pwd3)

f.close()
print(key + ' password ok')

效果:

命令行终端截图,运行脚本后提示 password ok

脚本生成的密码字典文件内容截图,包含多种组合变体

另外在密钥的利用上,务必要注意区分是企业内部应用还是第三方应用,这会直接影响接口的选择和权限范围。对于微信密钥的更多利用思路,可以参考业内大佬的这篇分析:https://xz.aliyun.com/t/11092

最后关于文件上传那一步,确实也花了不少时间,在不断尝试和调整后才成功传了上去。回顾整个攻击链,从备份文件中的信息泄露,到逻辑漏洞的分析,再到接口的未授权上传,整个渗透测试过程环环相扣。这种围绕信息泄露进行深度利用的思路,往往能带来意想不到的成果,平时不妨多加留意。




上一篇:AI自己造AI?深度解密Claude Code、Codex、Cursor内部自进化实践
下一篇:1M上下文窗口全塞进去就行?我:噪声太大!上下文工程实战指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-25 05:21 , Processed in 0.813675 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表