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

admin 2024年6月24日12:03:47评论15 views字数 4412阅读14分42秒阅读模式

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

文章来源:奇安信攻防社区

链接:https://forum.butian.net/share/3086

作者:echoa

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

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

中间件限制绕过

基于未授权的渗透测试技巧总结
访问子模块,这里中间件做了限制,是统一的定向,不涉及到模块的鉴权,因此,可以提供一些模块参数,

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)

基于多参数值的查询

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

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

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

文章来源:

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文

END

原文始发于微信公众号(黑白之道):基于未授权的渗透测试技巧总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年6月24日12:03:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于未授权的渗透测试技巧总结https://cn-sec.com/archives/2878133.html

发表评论

匿名网友 填写信息