渗透实战|攻防演练之接口敏感信息泄露
2023-12-18 17:43:14 Author: 小艾搞安全(查看原文) 阅读量:29 收藏

免责声明

由于传播、利用本公众号藏剑安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号藏剑安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!

朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把藏剑安全设为星标”,否则可能就看不到了啦!


「思路:信息收集-真实IP-前后端分离-接口FUZZ-接口敏感信息泄露」

工具:Burp/Yakit+FOFA + reverse-sourcemap+FindSomething

1.信息收集

某次攻防演练,给定目标域名资产:xxxtest.xxx.com,要求拿分。先着手进行信息收集,访问该url,页面跳转到登录界面,大概长这个样子:

登录界面

Wappalyzer显示前端VUE框架:

Wapplyzer

FindSomething发现不少VUE文件及接口信息:

FindSomething

查IP发现存在CDN:

CDN

查JS文件发现webpack打包:(webpack打包之后的访问js文件很慢,应该是没有做优化加上JS太多的缘故)

Webpack

信息收集结果如下:

前后端分离:前端为webpack打包的VUE、后端Springboot

IP:存在CDN---需绕过CDN查找真实IP

icon:icon_hash=xxxxxx

2.真实IP

由于目标站点存在CDN以及某waf,需查找真实IP才可进行漏洞挖掘,查找真实IP的方法很多,这里不再赘述,根据信息收集到的icon的hash值尝试绕过CDN查找真实IP。

将目标域名丢进FOFA,查看搜索结果,出现目标icon

FOFA-icon

直接点击icon即可搜索对应的目标站点:

真实IP

CDN也在搜索结果中:

CDN

3.前后端分离

用这种方式查找出来的IP有待验证,需进一步信息收集确定是测试环境还是真实环境。

找到了真实IP之后,将真实IP继续丢进FOFA,目的就是看系统开放了哪些服务以及端口开放情况(FOFA搜索不全,探测更多信息需另用工具)。

搜索结果

访问该域名,发现一模一样的系统,着手进行漏洞挖掘

F12打开浏览器检查出现了接口信息,并且接口地址为api.xxx.com,猜测为前后端分离的系统。

针对前后端分离的系统,尤其是接口特别多的时候,可以着重针对于接口未授权进行深入挖掘,有的开发安全意识不足,可能有些接口就未做鉴权,往往未作鉴权的接口就可作为突破点……

言归正传,前后端分离的系统,专门查接口以及接口参数就对了,先用FindSomething的结果将接口参数提取出来。

接口示例

接口参数可直接用FindSomething提取出来,剩下的就是找接口了。之前获取接口信息找到了一个接口地址:xxx-xxx-service

直接查找JS文件,找关键API,关键API找出来之后,拼接参数即可尝试获取敏感信息。(VUE框架,重点找xxx.app.js即可)

前期根据信息收集得到的webpack打包的JS,直接搜索api、secret、username、token、service等关键字,发现xxx-xxx-service接口,该接口在一个键值对中,示例:

{

url: ‘xxx/xxx/xxx/xxx’,

}

接口-01

继续查找接口,发现众多接口均存在一个JS对象的键值对中,键是url,值就是接口地址:

接口-02

全局搜索url,将JS文件中的url键值对全部提取出来,写正则匹配脚本也可以全部提取出来。共提取出一百多个接口。

这里简单介绍一下接口规范,所有的接口都会按照这个规范进行涉及,统称restful架构的接口规范,举个例子:

http://api.xxx.com/api/system/userLists

接口api、system表示服务名称、userLists表示资源名称,看接口意思大概就能猜到获取用户列表接口,如果是GET型,后边肯定会加参数,比如:

http://api.xxx.com/api/system/userLists?pageSzie=10&pageNum=1,意思很明确,就是调用了用户列表的接口,提取出来第一页的十条数据。

如果是POST型,POST请求包中添加json格式的数据:

「POST」 /api/system/userLists HTTP/1.1 「Host:」 api.xxx.com 「Content-Type:」 application/json 「User-Agent:」 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 「Content-Length:」 0  {"pageSize"10,"pageNum":1}

此次目标中,接口很多,拿其中一个接口举例子,接口地址为: http://api.xxx.com/xxx-xxx-service/xxx/xxx/get,看接口命名猜测为服务接口,除此之外还有xxx-xxx-auth鉴权接口、xxx-xxx-token获取token信息接口……

4.接口FUZZ

一百多个接口地址提取出来之后,尝试拼接在API接口访问路径下进行fuzz,API接口访问路径为:api.xxx.com,使用Burp进行fuzz,记得取消url编码。

Burp跑的结果均为401,接口也都做了鉴权,访问接口应该携带token进行鉴权才能获取到接口内容。

将FindSometing提取出来的参数拼接到api路径后边,同样也是401。

继续查找JS文件,在JS文件中最后一行发现了xxx.js.map……随即想到了用工具还原webpack打包的JS文件。

直接在JS路径下拼接js.map文件下载下来,文件很大

使用reverse-sourcemap将该文件还原,会在src目录下(可自定义目录)生成还原后的JS文件,有api目录、config目录、路由目录、css的样式目录……

工具还原命令:reverse-sourcemap --output-dir src xxx.js.map

生成的目录以及JS文件太多了,直接找关键的api目录、config目录、utils目录等

直接进入api文件夹中,查找接口JS文件,发现众多接口:

5. 敏感信息泄露

继续利用获取到的众多接口文件以及接口信息不断fuzz,根据JS的文件名查找关键接口均无收获。响应基本都为401,很正常,因为需要携带正确合法的token才行。继续尝试fuzz

终于,在users.js文件中发现了这样一条接口:api/ token/auth?username=,根据提示发现该接口是获取token的接口,将接口进行拼接,尝试访问,提示需要传入用户名参数,尝试admin用户进行接口访问:api/ token/auth?username=admin,成功获取到token值。

管理员的token值获取到了,可以对平台所有接口进行操作利用,任意增删改查,需要注意的是接口fuzz的过程中需要添加或修改参数,根据还原出来的JS文件中的接口参数进行利用,尝试获取敏感信息。

此次还原出来的API文件夹下JS文件有700个左右,如何快速在700个文件中快速查找关键信息接口?

第一:在JS文件中,会有接口参数提示以及接口功能提示:

第二:还原出来的JS文件的命名也可以帮助我们快速找到关键接口信息:

接口获取百万+个人敏感信息:

PageNum和pageSize参数均为JS文件中提示的接口参数,也可以fuzz出来,除此之外,还有众多参数。

在另外一个JS文件中获取到了个人购买信息接口,直接构造参数获取挺多的个人敏感信息:

项目下载
公众号后台回复:3618,获取微信官方3618安装包下载链接。
公众号后台回复:cs45,获取catcs4.5下载链接。
公众号后台回复:cs49,获取CobaltStrike4.9原版jar破解下载链接。
公众号后台回复:权限维持,获取CobaltStrike权限维持插件下载链接。
公众号后台回复:千寻,获取小艾魔改千寻框架下载链接。
公众号后台回复:chat,获取vx_chatgpt的下载链接。
公众号后台回复:jboss,获取jboss利用工具下载链接。
公众号后台回复:ruoyi,获取ruoyi利用工具下载链接。
公众号后台回复:162,获取Liqun16.2 工具包下载链接。
公众号后台回复:burp,获取burp2022.9.1破解版下载链接。

文章来源: http://mp.weixin.qq.com/s?__biz=Mzg3MTY3NzUwMQ==&mid=2247488352&idx=2&sn=1c675c4bbfd6aefd9267b3c357b450d6&chksm=cfc93db619ea5c81f613c9f1b88005f9d44232b55dc3ffa78d54b34d0aaf2b6a6736b4f18e5e&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh