问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
基于未授权的渗透测试技巧总结
渗透测试
围绕未授权测试厂商的思路分享,话不多说,上干货
前段时间做漏洞统计,才发现已经挖了一年的厂商的漏洞了,回想起来,从23年5月到今年5月一年一路各种干未授权,废了不少脑筋,随着挖的人越来越多, 互联网暴露面漏洞只会越来越少,心细会有一些新的领悟 和22年一样,简单的统计了23年5月到现在个人挖掘漏洞情况,平均到某月大概二十份,漏洞全部基于未授权测试,抽出一些比较典型的测试,做成类型案例,积累的多了,能易上手。(案例涉及的漏洞均已修复,由于项目原因,严重厚码)  为了让大家更有代入感,简易画了张图,来表示后面的未授权测试过程  ##### 基于#的测试 站点映射了很多个h5的服务,但实际测试的时候是没有发现这些资产的,这种情况一直持续了好几个季度的测试,包括国测、其他厂商测试,后续我通过基于#的测试,利用了缺少路由守卫的未授权访问缺陷,出了大量的高危。 为了避免客户信息泄露,h5服务这里成为A-h5,直接访问是nginx的默认404,站点的服务这里称为B-oms B-oms已经测试了很多次了,但都没有明显的功能点可以测试,因此,我决定换个测试思路,在爬取oms的过程中,发现一处有意思的点, 是一处二维码的服务,访问是一处空白,但地址上是归属到A-h5的  似乎有点漏洞特征,这里有隐藏服务,去掉后面的id值,拼接#,发现一处WechatAssiant的应用,通过观察title的应用名称,属于隐藏资产或者过度资产。  后续顺着WechatAssiant的应用,观察到一处#号值 salesPerformance/#/ ###### 路由守卫缺陷 同样观察titlle模块,是一处订单模块  访问同样是一处空白页  但注意这里,因为她是#号后的路径,这里匹配的path可不是API,而是基于#后的路径,然后做相关拼接salesPerformance/#/myorder  在Js的测试中,有个兴趣很大的参数 queryListByManagerMobileNum,多参数查询类的值  ###### 异常状态码响应 跟随这个参数,直接访问归属于400,在同一处的其他应用测试中,我注意这里的400并不是实际鉴权参数缺失导致的,而是缺少查询参数,于是,构造一处参数模版{"":""}  有意思,服务器返回了一个很美妙的结果 “message”:xx手机号不能为空  很好,然后又来到了常规的猜参数环节,先简单的尝试phone、number、num、phonenum等常规词,,还是没猜到,之前在Escan的描述有说过,如果JS混淆不当的话,很有可能定位到相关参数 ###### 业务参数定位 于是,很快,就定位到这个参数了phoneNum ,参数猜解是这样的,需要全称满足条件。  简单构造,200success,  从另一处收集到管理员手机号,成功获取敏感信息(sfz、住址、phone)  ##### 基于异常响应的上传 文件上传,在各个服务都会存在,但挖掘的各大厂商都比较少,大部分站点的响应状态码都做过加固,大部分状态码都是基于404的、400 很少常规的405. 在JS中匹配到upload字段即可测试,有的JS混淆不当URL中会携带该地址,这时候findsomething或者被动流量yitaiqi能匹配出来.然而,很多时候,遇到的都是相对地址,字段没有携带API地址,如,url:"/uploadImg",的形式 ###### 相对参数地址  这种,测试的时候流量包中包含的POST的数据包,提取query、get、这类的API,然后对上传字段拼接即可。  针对异常状态的问题,由于站点大部分都做过加固,批量发包结果通常都是404,服务器不会返回错误的回显,如提示"multiqart缺失",而是统一响应的404  ###### 异常状态码分析 无回显型的上传,我注意到它是nginx返回的信息,是中间件对接口做的统一处理,而未授权上传是权限方面的内容,这两者不是同个概念,如果他不存在,那他应该返回的是401,如果不是401,就很可能有问题。应该返回401,才是权限校验。  或者是这样的401  因此,构造一处上传表单,看看结果  打成存储xss  另外,在一次测试中,我把这种测试思路扩展开来了,未授权文件上传是基于401的鉴权,如果遇到重定向,那怎么处理?  ###### 异常302绕过 可以看到,依旧是中间件做了统一路由处理,重定向到登录地址,那么,针对路由处理,路由在对资源文件上,通常不做鉴权,这时由于业务的原因,比如一些图片,需要访问,如果做鉴权,那么不登录游客就看不到。所以,利用资源文件后缀绕过此类的限制  返回了SourceSytem is null ,说明表单中缺失了一处SourceSytem对象的值,那么这种,怎么去提供这里参数值呢? ###### 表单类参数定位 简单分析下,首先是最基本的file参数,构造表单需要携带一处file参数,作为文件名的name,有的业务需要一处独立的标识,作为这类的功能,所以需要额外的参数值 这种参数值可以参考#测试中的方法,这里不赘述  如果服务器返回500,也是这类的测试,  根据情况,补上一处参数值即可  然后是普通的未授权上传,这类上传通常基于405,或者200响应码,核心的挖掘点就是首页的API,对首页main.js或者umi.js类集成文件的API做批量fuzz,曾经在做某众测、多厂商大规模测试的核心站都有挖掘过 由于他比较常规,通常批量发包都能发现,提个样子 ###### 常规405、500上传   附上某大型众测的一个例子    ##### 基于服务的命令执行 遇到一些综合系统,如xx服务平台、xx管理系统、xx中心、xx门户,涉及子模块的测试,往往是存在多类框架的,比如编辑器ueditor+fastjson二级地址,三级地址springboot而首页是oms、cms类 ,测多了发现,二级地址、三级地址是比较脆弱的,但往往访问需要权限校验,常见的像中间件nginx302跳转 上传异常响应的模块说过了,如果是中间件做的响应,如302,那还是可能绕过的 ###### 中间件限制绕过  访问子模块,这里中间件做了限制,是统一的定向,不涉及到模块的鉴权,因此,可以提供一些模块参数, ```HTTP/1.1 Server: nginx Date: Wed, xxxxxxxxxxxxxxxx Content-Length: 61 Content-Type: application/json Connection: close Access-Control-Allow-Origin: https://xxxxxxxx {"status":"0","message":"1","data":1} ``` 绕过访问,这时候又回到基于#的测试思路 ###### 基于#的测试  对空模板的一些API地址测试,200返回包  ###### 框架漏洞 这时试试测试fastjson,可能会有一些意想不到的效果  利用浅蓝给出的gadgets `{"@type":"java.lang.Exception","@type":"com.alibaba.fastjson.JSONException","x":{"@type":"java.net.InetSocketAddress"{"address":,"val":""}}}` fastjson打成  子模块的其他测试可以参考以前写的非常规环境下的编辑器测试,像ueditor、ewebeditor、jupyter [(https://forum.butian.net/share/2639)](url) ##### 基于多参数值的查询 多参数查询,在一些业务系统,存在一些回调的业务,这些业务API并未完全的覆盖鉴权,只要键值对匹配上,不做身份权限校验即可查询。 引入一处典型的多参数查询测试   在400参数校验失败后,有一处Get请求明显的校验成功, ###### 多参数值校验  当添加了"autoToastPage":false参数后,原有的参数校验绕过了,回显成补充参数值  通过其他点位泄露的参数值,查询成了  第二种思路补充参数校验,在源码中有提到该值,但这种不明显,  ###### 部分混淆参数分析 第二种业务是部分混淆型多参数, 对业务测试,先定位到业务的JS,观察这类的封装函数getOrdersData,  这是个比较典型的带参params,如果不带参,之前Escan描述过,去定位query、get相关的orders函数,如果混淆不当,还是可以获取到的。这里的orderNo和mobilePhone不需要完全提供,有时候提供一个就能模糊匹配到  构造链接发包,这样就能获取到订单的信息了   ###### 多重混淆参数分析 第三种业务是混淆型多参数, 在测试会存在一些隐藏资产,JS提取到的都是相对地址,然后API功能参数是提取到片面的,大家应该都有碰到过,这种情况是他部分地址给变量去覆盖了  这时候只要去跟进这处的JS,就能发现这处地址  是一处joinCheckWhite函数,freeSwitch 变量我在一些全局函数里找到了,构造,发现一处隐藏资产  像这种没上报,没统计的资产,同时存在upload的功能,基本一测一个准 注意到一处create函数,虽然它post携带bear token但如果存在缺陷,这里就不会鉴权  获取token成了  ##### 基于目录探测的测试 目录探测更多是针对ip的形式测试,往往ip的服务比较单一,没有更多的突破口,对目录探测可以把资产进行相关的喷洒,喷洒二级目录,重点测试一些image的目录,主要是观察服务器的响应  ###### 二次递归 例如在测试中二次递归,有些地址有200的响应,那可能就存在目录遍历  ###### 目录缺陷 一些中间件甚至对image目录不做限制  这时候就可以利用../进行跳跃读取文件配置,敏感文件  另外一种是探测目录的编辑器位置,这个需要准备一些编辑器的目录,会有很多意外的收获,比如ueditor的反射xss  ##### 基于Springboot框架的测试 这类的漏洞应该是各大厂商挖的最多一类漏洞,主要集中在swagger文档的泄露、actuator监控组件的未授权、druid连接池、heapdump堆文件泄露这四种 做这类的挖掘比较无脑,直接对着API地址批量探测即可,常用的工具有RouteVulscan和曾哥写的springboot扫描,前者会对流量包中每个报文进行拆分,作为一个基础的APi,然后批量发包字典,这类漏洞挖掘没啥技巧,分享一些绕过的姿势 首先actuator未作鉴权校验,通过中间件的校验,直接访问是403,这时候利用../进行跳转到APi地址,然后拼接即可 ###### 中间件目录符绕过  有的中间件不允许访问actuator,就配置上.js、 .png资源文件后缀,绕过中间件 ###### 中间件资源文件绕过  ##### 基于XSS的测试 有些xss还是比较有意思的,位置都比较刁钻,不常规 ###### 表单型XSS    ###### 跳转型XSS  
发表于 2024-06-14 10:24:56
阅读 ( 8519 )
分类:
渗透测试
35 推荐
收藏
10 条评论
exc
2024-06-14 15:04
文章质量极高,学到不少,棒!
echoa
回复
exc
是de,
请先
登录
后评论
echoa
2024-06-17 12:15
对de
请先
登录
后评论
相夷
2024-06-17 17:31
🐂B
请先
登录
后评论
RIP__7
2024-06-17 19:35
涨知识了,谢谢大佬
请先
登录
后评论
风中追风
2024-08-02 15:12
干货不少,感谢大佬分享
请先
登录
后评论
大哥
2024-09-06 11:26
请问文中的 “被动流量yitaiqi” yitaiqi是什么工具
请先
登录
后评论
echoa
2024-09-10 09:35
https://github.com/fKzhangsa/FilterJs
请先
登录
后评论
黄昏
2025-01-02 10:30
高质量
请先
登录
后评论
yegou
2025-01-03 14:16
涨芝士了
请先
登录
后评论
请先
登录
后评论
echoa
5 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!