基于未授权的渗透测试技巧总结

2024-08-08 17:37:21 浏览数 (3)

围绕未授权测试厂商的思路分享,话不多说,上干货

前段时间做漏洞统计,才发现已经挖了一年的运营商的漏洞了,回想起来,从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,那还是可能绕过的

中间件限制绕过

访问子模块,这里中间件做了限制,是统一的定向,不涉及到模块的鉴权,因此,可以提供一些模块参数,

代码语言:javascript复制
HTTP/1.1 200 
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

代码语言:javascript复制
{"@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)

基于多参数值的查询

多参数查询,在一些业务系统,存在一些回调的业务,这些业务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

1 人点赞