SRC挖掘之 - 某众测多处高危越权
闲*人 发表于 广东 渗透测试 2409浏览 · 2024-05-25 14:49

前言

某 SRC 站点,标准攻击链的综合利用,中级攻击。枚举和信息收集阶段干扰信息不多,但会一度陷入僵局,关键信息的获取方式不算特别初级,有一点点难度。直接知道哪里是入口,你肯定觉得很简单。如果这个入口获取的方式找不到,那这台机器你难以为继,常规打法,但也需要扎实的基本功。涉及到信息收集、js文件利用、脆弱点的分析、社工运用的技巧、swagger接口的测试、开发者习惯的摸索、隐藏接口的寻找,一些红队技巧在文中均有呈现。

0x01 前端基本信息

<1>域名访问

访问域名 bb.aa.net 状态码303,导向到 /aaa/index.html ,而后跳转到/aaa/index/index.html
(得留意这个路径,后面做通用资产收集的时候可以派上用场)

<2>系统业务判断

从标题判断这是一套学生管理系统,推断系统用户为老师及学生,由此可以简单判断用户名为学生学号或老师工号,以及管理员账号。
URL 路径:/aaa/index/index.html#/app

细节:看起来系统像是某个厂商针对学校出的定制会产品,这个页面中尝试了点击游客是不允许游客访问,那是否会存在某些系统可以通过游客访问的呢?

<3>前端源码信息

源码中有注释,大概率存在二开的可能。同时也从网站底部看到了开发商。

<4>插件 Wappalyzer

vue+elementUI+webpack打包
js文件尝试拼接 js.map未发现相关相关泄露,无法反编译获取到方便查看与调试的源码。

<5>插件 FindSomething / BurpJSLinkFinder

大量路径信息,挑一些 xxxList 的接口访问后发现都提示“请重新登录”,与访问不存在的页面提示相同,看来系统中能看到的一些接口都是需要鉴权措施。

{"msg":"会话过期,请重新登录!","success":false}

0x02 JS 信息、系统模块信息

<1>JS信息(URLFinder / JSFinder)

未获取到有价值信息,只能拿到 js 路径。看起来系统是支持第三方接口进行登录

<2>历史流量信息(Burp)

bp看历史加载的数据包,初步确定存在a模块、b模块

<3>模块下各个路径的查找

留意到访问域名后,最终的地址为:/aaa/index/index.html#/ ,推测 nuo4 是加载首页的模块,那么是否还会存在其他模块
burp 全局搜索该路径aaa并翻看 js,而后在该js文件中,发现了 aaa 模块的其他控制器

整理成 url ,尝试访问发现都是需要进行登录
https://bb.aa.net/aaa/index/index.html#/
https://bb.aa.net/aaa/admin/admin.html#/ 估计为后台管理界面
https://bb.aa.net/aaa/cc/cc.html#/ 一些对应名称系统的默认页面

当我访问 admin 页面时,其中会加载到一个接口,响应内容列出了应用列表及什么权限的用户可以访问(权限值使用的为拼音首字母)

当我访问 admin.html 时,后续历史请求了一个js文件,发现很多路径信息,结合前面系统业务判断及所有应用列表,通过路径名称判断这些路径为所有应用的访问路径,但无价值都需要登陆后才能访问。

数据梳理:
拿到了后台地址(/nuo4/admin/admin.html#/ )、得到了一些参数名、获取到系统所有应用列表、得知各个角色权限可访问哪个应用

0x03 模块一 Swagger接口探测

<1> spring特征的发现

留意到访问模块下的各个页面时,都会请求到一个接口 auth/xxx,并且登录时的接口为(/auth/login/in),其他模块渲染数据时请求的是 auth 模块,所以 auth 模块里似乎包含的是一些公用接口。
根据开发者的习惯,尝试访问 https://bb.aa.net/auth/index/index.html#/ ,为spring 白页,接下来看是否存在spring敏感信息泄露。

<2>Swagger 接口文档(SpringBoot-Scan)

使用工具 springboot-scan,针对 auth 模块进行 spring端点扫描,发现接口文档泄露

./SpringBoot-Scan.py -u https://bb.aa.net/auth

通过页面信息,判断 auth 模块为公共接口,对应很多个控制器,留意到其中还包含一些用户管理相关接口

<3>接口测试(手工)

1)因为已经有了接口文档,目前可以得知 auth 模块后台接口所有查询参数。
思路:
(1)测接口是否存在未授权
(2)是否存在SQL注入(后续再测减少自己被ban的可能)
(2)接口是否能拿一些敏感信息用于后续测试

2)手工测试发现所有能拿敏感信息的接口都有鉴权措施,测试了多数接口发现并未存在SQL注入

3)特别留意了用户相关接口,发现似乎是遗留的旧接口,也可能是开发环境生产环境的接口。遗憾的是接口同样提示 ”会话过期请重新登录“。
例如:给用户分配角色功能竟然是有两个控制器(Role Controller、Zh Controller)

<4>自动化未授权测试(swagger-exp-knifef4j)

1)接口太多了手工测很麻烦,上工具 swagger-exp-knife4j 批量测试未授权。扫描结果111个接口可能存在未授权,接口数量太多,可以从接口名称及所需参数,有目的的挑选接口进行访问。(首要目的是测试接口是否未授权,是否拿数据进行后续利用)但要留意参数名,如 xh 参数,应手动填入学号测。

python swagger-exp-knife4j.py -u https://bb.aa.net/auth/v2/api-docs

结果整理:
1、我可以从 /auth/zh/getRole 推测出系统有哪些账号及其对应角色
2、我可以从 https://bb.aa.net/auth/app/flzb?Authorization=a 我可以拿到应用代码 yydm,然后把 yydm 拼接到其他接口 https://bb.aa.net/auth/app/view?Authorization=a&yydm=yydm 可以获取到一些数据,但无太大价值。

3、再看看 4条扫描到包含敏感参数的接口,没有实际的敏感参数无太大价值

现在,我可以知道系统有哪些应用,哪些用户名,用户有哪些权限值,哪些权限值的账号可以访问哪些应用。

0x04 思路梳理

似乎我进入到了一个死胡同,我开始梳理我目前掌握的信息。
1、我拥有 auth模块 的swagger接口文档
2、swagger-ui 看上去有很多接口,但所有能拿敏感信息的接口都有鉴权措施,得先登录获取 Authorization 凭证才能进一步测试。
2、无法通过登录界面忘记密码界面的报错信息判断账号名称,但可以从接口拿到用户名及权限值,也知道哪些权限值的账号可以访问哪些应用。
3、常规弱口令行不通。
4、系统没有注册功能,新增用户接口需要进行登录。
5、重置密码功能不存在逻辑漏洞
6、登录功能不能进行逻辑绕过,无法卡到界面让系统加载一些信息。
7、后台做了统一异常处理统一返回错误信息,接口尝试SQL注入难度较大

看起来现在我可行的方式有:
1、我可以通过系统名称或开发商名称查找相关公开漏洞
2、我可以尝试寻找一些证件号号,能让我通过重置密码功能重置登录凭证
3、我可以参照开发者的习惯,拼接路径看能否拿到更多模块的接口文档
4、端口扫描、burp插件全开配合自动化工具递归进行:目录扫描、漏扫
5、我可以强行进行的枚举爆破,但我觉得也不可行,如果系统都可以通过无脑的口令爆破来解决,没有任何价值

0x06 登录凭证的获取

1、系统可能是有统一密码的,我在某社交平台伪装成小学妹,发布了一个帖子,并艾特学校,看评论区的大佬能否提供给我思路,有个铁子告诉了默认密码是身份证后6位,而重置密码也是需要身份证6位,拿不到身份证件号也没用。

2、幸运的是另外C段的脆弱资产,存在着统一的默认密码。在其个人信息界面,留意到接口请求的参数可控,尝试通过修改参数 id 的值,成功水平越权获取一些敏感信息

0x07 立足点

身份证后六位,直接成功登录某个老旧账号,获得初始立足点。

0x08 未授权访问漏洞

留意到此接口,可以未授权通过多个编码得到数据字典,其中响应的信息有该字典数据有管理员sfz。


接口的功能是可以批量查字典代码创建者的个人信息,可以看到有些字典创建者createSfzjh:null ,怎么提取系统所有字典代码dm通杀到其他系统呢,可以考虑批量文本处理。
留意到之前有个带着鉴权信息就可以获取系统字典代码,批量提取文本中的 dm 参数值并以逗号隔开。

//结果json格式化
jq . trees.txt > trees_json.txt

//使用awk grep tr sed等命令预处理数据
cat trees_json.txt | awk -F 'dm' '{print $2}'| grep -v 's' | tr -d ' :,"'| grep -v '^$'

//数据去重,逗号拼接
cat trees_json.txt | awk -F 'dm' '{print $2}'| grep -v 's' | tr -d ' :,"'| grep -v '^$' | sort |uniq | paste -sd ','

获取到了所有字典代码后,把接口所有dm,拼接到 /xxx/xx/getxxx?dms=dm1,dm2,dm3,...,就可以发现可未授权拿相关账号(编辑系统字典权限)的sfz。

0x09 越权漏洞

加上JWT鉴权信息,从接口文档看能否从一些接口拿数据。

<1> 越权漏洞1(垂直越权):

个人信息查询功能,/xxx/List?xh=xxxxxxxx,直接删掉参数xh,可以拿到全部的个人信息包括 admin 。同类漏洞很多,也不难找。(但这里我留意到一个关键点,这个接口是登录后台界面中没有的功能点,或许是某个高权限的人员才能执行的功能点,此接口权限控制粒度不够精细,导致只要是具有成功的鉴权信息的请求,就能拿数据。)

<2> 越权漏洞2(垂直越权、权限提升)

留意到当时 Swagger 的两个接口,其中 addRoles 接口似乎是开发忘记删除的接口可以越权提升自己权限。
/addRole?jsdm=角色代码(不能越权)
/addRoles?jsdm=角色代码(可以越权)

再次登录,已是超管权限,而后删除自身超管权限并退出系统。

0x10 同类系统快速批量收集

搜索引擎匹配域名访问时的响应包路径内容,就能精准收集到同类系统。网站vue开发源码无明显特征匹配网站首页body的方式行不通。
该漏洞写报告提供修复建议提交SRC平台,并均已修复。

总结

本文以攻击者视角,介绍了前端源码或者接口的相关泄露,可能带来的一些危害。

1、首先是被动的进行信息收集,了解到系统多数接口是有鉴权措施,从JS信息中搜集到一些有价值得路径,尝试访问后加载到了后台才会加载的某个JS文件。
2、留意到系统一些模块的命名,网站为 java 开发,通过访问不存在的接口让其报错,发现了 spring 白页,进而发现了相关接口文档。
3、经过社交平台上姐妹们的帮助,得知了系统的默认密码,结合C段脆弱资产的越权漏洞获取到的敏感信息,成功登录某个旧账号。
4、进一步进行接口测试,通过其他接口的返回信息综合进行利用。发现了未授权漏洞以及多处垂直越权,完成了权限的提升。

思考:

我们可以通过此漏洞思考到系统开发及上线过程的一些问题:
1、通过此打点过程,我们可以了解到敏感信息进行加密的重要。 一些敏感信息泄露更像是一种常见的表象问题而不是根本原因,这项风险重点是缺乏加密机制,这往往就会导致敏感数据泄露。
2、系统应更多地去减少系统信息的暴漏面,如果我没有拿到接口文档,我是不是就不能知道那些高权限人员才能操作的接口名称,尽管我可以通过 FUZZ 去获取但这不实际(我不能从接口名称判断开发者行为习惯)。
3、如果系统使用双因子认证方式来登录,攻击者想拿到鉴权信息难度就会很大。(修复后看到想进入该系统得先进行统一认证登录)
4、失效的访问控制通常会导致未经授权的信息泄露或执行用户权限之外执行业务功能,开发可能意识到了这个点,但权限控制粒度不足依旧导致了一些越权漏洞。
5、系统部署上线,不应该保留一些测试接口,一些接口信息可以给攻击者提供利用的可能。
6、如果我看到系统使用了 spring ,直接尝试spring端点扫描,是不是可以更快拿到接口文档界面?如果我知道C段存在一个脆弱资产能直接拿身份证,是不是很快就能进入系统了?当然这些都只是基于web层面的,拿到的只不过是web管理员权限。

技巧

1、被动收集的意识。
可以看到很多操作都是基于被动收集,攻击者会最大程度减少自己的暴漏面,不用扫描器减少自己被ban的可能。甚至还没进行端口扫描目录扫描,目录扫描时,字典只要足够大用任何一个都可以,之所以选择字典更多是针对特定的扫描场景,针对性进行扫描会快一点。都是一个概率问题尤其是在实际攻防中。(如果是在没思路了,我会进行目录扫描)
2、开发者习惯的摸索。
仅仅是前端发现的两个模块存在的越权漏洞,就能拿两个高危越权,是否可通过FUZZ拿到其他模块呢?通过你了解的 JAVA 开发习惯,探测他的一些搜索的交互行为,可能会出发报错或更进一步的行为,综合这些信息进行判断。错误/警告消息,可能会暴露出内部工作的敏感信息,这些消息还可能显示文件的位置。(spring 白页的探索)
3、运维人员的视角。
运维可能会为了方便管理,系统开发出来可能就会有默认统一的默认密码,从这点入手或许可以更快速获取入口。拿到几个学号这个时候不知道后边的渗透测试是否会用到,但是要有敏感度,有可能后边在爆破的时候,或者对敏感信息利用的时候,需要做选择,那么基于他们的角色很可能就是一个线索。(社工)
4、网站源码的利用。
许多网站都是直接从网上下载源码,简单配置就开始使用了,或许有默认信息可以利用。经验管用但用处不大 重要的是思路。
5、同类系统的思路。
当你遇到某个系统,需要统一认证的系统时,不妨试试其他网站的同套系统进行尝试。
6、厂商产品的视角。
一个厂商产品要拿到最大化收益,一定是得支持客户定制化的功能模块,新开发的功能漏洞存在的可能较大。相信其他系统也会存在同类漏洞。
7、总而言之,这台靶机是标准攻击链的呈现,老手验宝刀新手摸思路,一些红队的技术手段与小技巧在文章中均有呈现,希望能帮助你提升渗透技能。
8、这篇博客更多的意义是记录我个人在学习过程中的知识。由于笔者水平有限可能存在说法的错误,但也不乏创新思路点。对于攻防过程的技巧,勉强达到要求的合格水平,各位若有其他新颖独特的思路,还望不吝赐教,多多交流。

3 条评论
某人
表情
可输入 255