问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
基于未授权的渗透测试技巧总结
渗透测试
围绕未授权测试厂商的思路分享,话不多说,上干货
前段时间做漏洞统计,才发现已经挖了一年的厂商的漏洞了,回想起来,从23年5月到今年5月一年一路各种干未授权,废了不少脑筋,随着挖的人越来越多, 互联网暴露面漏洞只会越来越少,心细会有一些新的领悟 和22年一样,简单的统计了23年5月到现在个人挖掘漏洞情况,平均到某月大概二十份,漏洞全部基于未授权测试,抽出一些比较典型的测试,做成类型案例,积累的多了,能易上手。(案例涉及的漏洞均已修复,由于项目原因,严重厚码) ![Snipaste_2024-06-07_18-09-13.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-2eb897d11ca181590e4db4c90ac9ecc382d2d184.png) 为了让大家更有代入感,简易画了张图,来表示后面的未授权测试过程 ![Snipaste_2024-06-07_21-31-54.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-6dace1fadb4b8f8ff0df01012dbb714abb3d8f79.png) ##### 基于#的测试 站点映射了很多个h5的服务,但实际测试的时候是没有发现这些资产的,这种情况一直持续了好几个季度的测试,包括国测、其他厂商测试,后续我通过基于#的测试,利用了缺少路由守卫的未授权访问缺陷,出了大量的高危。 为了避免客户信息泄露,h5服务这里成为A-h5,直接访问是nginx的默认404,站点的服务这里称为B-oms B-oms已经测试了很多次了,但都没有明显的功能点可以测试,因此,我决定换个测试思路,在爬取oms的过程中,发现一处有意思的点, 是一处二维码的服务,访问是一处空白,但地址上是归属到A-h5的 ![Snipaste_2024-06-05_16-40-41.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-a8369c26ccdf5fd23437e02c9a377d88b135bdf0.png) 似乎有点漏洞特征,这里有隐藏服务,去掉后面的id值,拼接#,发现一处WechatAssiant的应用,通过观察title的应用名称,属于隐藏资产或者过度资产。 ![Snipaste_2024-06-05_17-07-38.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-6ce8eef6c6329fb36a8cabefe1d2f9cdfedf83c8.png) 后续顺着WechatAssiant的应用,观察到一处#号值 salesPerformance/#/ ###### 路由守卫缺陷 同样观察titlle模块,是一处订单模块 ![Snipaste_2024-06-05_16-49-51.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-f0b34cc7fe5657fc970d0d73e1da15587581e811.png) 访问同样是一处空白页 ![Snipaste_2024-06-05_16-53-25.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-2564dbbf585c3f2eee581c2fef65675c132de824.png) 但注意这里,因为她是#号后的路径,这里匹配的path可不是API,而是基于#后的路径,然后做相关拼接salesPerformance/#/myorder ![Snipaste_2024-06-05_16-56-02.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-a404cd177db4e0efba95348051f17d6019c16bab.png) 在Js的测试中,有个兴趣很大的参数 queryListByManagerMobileNum,多参数查询类的值 ![Snipaste_2024-06-05_17-00-46.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-f630f5cc56c85469ab5127e457f1695404c45b39.png) ###### 异常状态码响应 跟随这个参数,直接访问归属于400,在同一处的其他应用测试中,我注意这里的400并不是实际鉴权参数缺失导致的,而是缺少查询参数,于是,构造一处参数模版{"":""} ![Snipaste_2024-06-05_17-12-59.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-0948daf95c5b6fbb0acdf4e06fda4a72849ad454.png) 有意思,服务器返回了一个很美妙的结果 “message”:xx手机号不能为空 ![Snipaste_2024-06-05_17-15-56.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-c8ecb7a512c4fe79b11834d3572ba48412e73b51.png) 很好,然后又来到了常规的猜参数环节,先简单的尝试phone、number、num、phonenum等常规词,,还是没猜到,之前在Escan的描述有说过,如果JS混淆不当的话,很有可能定位到相关参数 ###### 业务参数定位 于是,很快,就定位到这个参数了phoneNum ,参数猜解是这样的,需要全称满足条件。 ![Snipaste_2024-06-05_17-38-28.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-c0234e24d70678c89b8f205c813eece2af4ca849.png) 简单构造,200success, ![Snipaste_2024-06-05_17-40-01.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-cf69eb6351eaeb771a72c9280cc809d568729016.png) 从另一处收集到管理员手机号,成功获取敏感信息(sfz、住址、phone) ![Snipaste_2024-06-05_17-43-34.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-2c93548dd4e58c1d95f8654bf3ac11f2ccdd8577.png) ##### 基于异常响应的上传 文件上传,在各个服务都会存在,但挖掘的各大厂商都比较少,大部分站点的响应状态码都做过加固,大部分状态码都是基于404的、400 很少常规的405. 在JS中匹配到upload字段即可测试,有的JS混淆不当URL中会携带该地址,这时候findsomething或者被动流量yitaiqi能匹配出来.然而,很多时候,遇到的都是相对地址,字段没有携带API地址,如,url:"/uploadImg",的形式 ###### 相对参数地址 ![Snipaste_2024-06-06_09-34-50.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-db28097d0e1c371294ddb93770c00b3f788cd779.png) 这种,测试的时候流量包中包含的POST的数据包,提取query、get、这类的API,然后对上传字段拼接即可。 ![Snipaste_2024-06-06_09-36-19.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-db25d4da3c1b2a3a8d5616c0c1c11287cab4397f.png) 针对异常状态的问题,由于站点大部分都做过加固,批量发包结果通常都是404,服务器不会返回错误的回显,如提示"multiqart缺失",而是统一响应的404 ![Snipaste_2024-06-06_09-58-32.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-4e2e2d12f270a7361923c508e67faad6c9de0cbb.png) ###### 异常状态码分析 无回显型的上传,我注意到它是nginx返回的信息,是中间件对接口做的统一处理,而未授权上传是权限方面的内容,这两者不是同个概念,如果他不存在,那他应该返回的是401,如果不是401,就很可能有问题。应该返回401,才是权限校验。 ![Snipaste_2024-06-06_10-01-18.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-d32e3e5bc070faa47365bcc020574422e9858826.png) 或者是这样的401 ![Snipaste_2024-06-06_10-04-23.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-04a89944a05f22957b4808ee85c07e6b78e24170.png) 因此,构造一处上传表单,看看结果 ![Snipaste_2024-06-06_10-08-32.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-9c57aa7e1f96e2acdd10080797fea9eebc1ad5d1.png) 打成存储xss ![Snipaste_2024-06-06_10-09-27.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-e20d60a36a08c3affe368c6f8f4e5ec3049f997c.png) 另外,在一次测试中,我把这种测试思路扩展开来了,未授权文件上传是基于401的鉴权,如果遇到重定向,那怎么处理? ![Snipaste_2024-06-06_10-13-27.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-79da248061777b90b41a78c594e4712ee0a6f6d3.png) ###### 异常302绕过 可以看到,依旧是中间件做了统一路由处理,重定向到登录地址,那么,针对路由处理,路由在对资源文件上,通常不做鉴权,这时由于业务的原因,比如一些图片,需要访问,如果做鉴权,那么不登录游客就看不到。所以,利用资源文件后缀绕过此类的限制 ![Snipaste_2024-06-07_22-31-28.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-ac648959cf18963124254c786d17c9ea1589ed50.png) 返回了SourceSytem is null ,说明表单中缺失了一处SourceSytem对象的值,那么这种,怎么去提供这里参数值呢? ###### 表单类参数定位 简单分析下,首先是最基本的file参数,构造表单需要携带一处file参数,作为文件名的name,有的业务需要一处独立的标识,作为这类的功能,所以需要额外的参数值 这种参数值可以参考#测试中的方法,这里不赘述 ![Snipaste_2024-06-08_07-59-10.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-364d79c8d98f9f9248bcabdb8afcbf628239481e.png) 如果服务器返回500,也是这类的测试, ![Snipaste_2024-06-06_10-25-42.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-a4e5cc06e045e111051d81c35c8801c5e97defac.png) 根据情况,补上一处参数值即可 ![Snipaste_2024-06-06_10-28-01.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-fa53833179689c0a404e06f583d8cfbf5c08d8c9.png) 然后是普通的未授权上传,这类上传通常基于405,或者200响应码,核心的挖掘点就是首页的API,对首页main.js或者umi.js类集成文件的API做批量fuzz,曾经在做某众测、多厂商大规模测试的核心站都有挖掘过 由于他比较常规,通常批量发包都能发现,提个样子 ###### 常规405、500上传 ![Snipaste_2024-06-06_10-31-44.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-d810264984235f77159d271a0ab730084abd5682.png) ![Snipaste_2024-06-06_10-33-48.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-8f39791a7c420aa1ed6de873777fbf6ad0cee8d9.png) 附上某大型众测的一个例子 ![Snipaste_2024-06-06_10-39-23.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-a6b4de08c18e94950b66ee557f605f38a0122e6d.png) ![Snipaste_2024-06-06_10-36-48.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-329d42eac4bcd024cf285d09b163f776f073397b.png) ![Snipaste_2024-06-06_10-37-28.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-0ba7e53cef199a286761fc24d4cf687982d71d04.png) ##### 基于服务的命令执行 遇到一些综合系统,如xx服务平台、xx管理系统、xx中心、xx门户,涉及子模块的测试,往往是存在多类框架的,比如编辑器ueditor+fastjson二级地址,三级地址springboot而首页是oms、cms类 ,测多了发现,二级地址、三级地址是比较脆弱的,但往往访问需要权限校验,常见的像中间件nginx302跳转 上传异常响应的模块说过了,如果是中间件做的响应,如302,那还是可能绕过的 ###### 中间件限制绕过 ![Snipaste_2024-06-06_11-42-31.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-1be7b313b7036567dcf2b48508f27336ac1a1307.png) 访问子模块,这里中间件做了限制,是统一的定向,不涉及到模块的鉴权,因此,可以提供一些模块参数, ```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} ``` 绕过访问,这时候又回到基于#的测试思路 ###### 基于#的测试 ![Snipaste_2024-06-06_11-45-19.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-688a414d296e074d9a4d5e691478d03bc19be479.png) 对空模板的一些API地址测试,200返回包 ![Snipaste_2024-06-06_11-46-21.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-dc6657b19dc8cb04e18dfac4fec6686a77bdbc16.png) ###### 框架漏洞 这时试试测试fastjson,可能会有一些意想不到的效果 ![Snipaste_2024-06-06_11-48-03.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-53ce28ff3b3d38dd0f9fdccc7be0eecbccbcd5df.png) 利用浅蓝给出的gadgets `{"@type":"java.lang.Exception","@type":"com.alibaba.fastjson.JSONException","x":{"@type":"java.net.InetSocketAddress"{"address":,"val":""}}}` fastjson打成 ![Snipaste_2024-06-06_11-49-03.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-59fdad2369db10c6d05a1cce18d6bf24a0264aeb.png) 子模块的其他测试可以参考以前写的非常规环境下的编辑器测试,像ueditor、ewebeditor、jupyter [(https://forum.butian.net/share/2639)](url) ##### 基于多参数值的查询 多参数查询,在一些业务系统,存在一些回调的业务,这些业务API并未完全的覆盖鉴权,只要键值对匹配上,不做身份权限校验即可查询。 引入一处典型的多参数查询测试 ![Snipaste_2024-06-06_15-16-30-1717658226327.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-02811fd8c6723f8d9b5f3125eedd4e07c09ebbdb.png) ![Snipaste_2024-06-06_15-06-41.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-755871e27ea39cb5b4a2c984fa386c5ae577af5a.png) 在400参数校验失败后,有一处Get请求明显的校验成功, ###### 多参数值校验 ![Snipaste_2024-06-06_15-15-32.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-bf30c73408dcc9791f516b578e76d35b40722977.png) 当添加了"autoToastPage":false参数后,原有的参数校验绕过了,回显成补充参数值 ![Snipaste_2024-06-06_15-20-42.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-15a131fb39d0b69299dbeed6a67f0a149ef86a58.png) 通过其他点位泄露的参数值,查询成了 ![Snipaste_2024-06-06_15-25-30.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-655e83516ce2a5b24fa1836b22da95886f5a0204.png) 第二种思路补充参数校验,在源码中有提到该值,但这种不明显, ![Snipaste_2024-06-06_15-13-16.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-bbe78ca576ac26aac8aace4f5b0a4463088de855.png) ###### 部分混淆参数分析 第二种业务是部分混淆型多参数, 对业务测试,先定位到业务的JS,观察这类的封装函数getOrdersData, ![Snipaste_2024-06-06_16-46-30.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-17f6fefc7598de9d1ea94feac0c26a1e2a63edcc.png) 这是个比较典型的带参params,如果不带参,之前Escan描述过,去定位query、get相关的orders函数,如果混淆不当,还是可以获取到的。这里的orderNo和mobilePhone不需要完全提供,有时候提供一个就能模糊匹配到 ![Snipaste_2024-06-06_15-33-55.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-fd25f0bd645779f5a4e957e0ed97140282251cd8.png) 构造链接发包,这样就能获取到订单的信息了 ![Snipaste_2024-06-06_16-49-24.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-53dc5bc3663b3e8a8b5056ccd4d936ec3d87040d.png) ![Snipaste_2024-06-06_16-50-19.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-c1234b79dee7f39980cdee3cb6a78974d9ce23ee.png) ###### 多重混淆参数分析 第三种业务是混淆型多参数, 在测试会存在一些隐藏资产,JS提取到的都是相对地址,然后API功能参数是提取到片面的,大家应该都有碰到过,这种情况是他部分地址给变量去覆盖了 ![Snipaste_2024-06-06_16-59-01.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-db10d0b3cf44f8de042d7c2baf39a1edcad1acb1.png) 这时候只要去跟进这处的JS,就能发现这处地址 ![Snipaste_2024-06-06_17-00-12.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-c99144d13e039ab6ab40c77ec16432b9a68097c0.png) 是一处joinCheckWhite函数,freeSwitch 变量我在一些全局函数里找到了,构造,发现一处隐藏资产 ![Snipaste_2024-06-06_17-01-30.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-d6e6fea6118c83c21e3d31d4cc57d21f8a933571.png) 像这种没上报,没统计的资产,同时存在upload的功能,基本一测一个准 注意到一处create函数,虽然它post携带bear token但如果存在缺陷,这里就不会鉴权 ![Snipaste_2024-06-06_17-05-44.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-9afe0334416e58e48755d9eb80f935f6e6fdea1e.png) 获取token成了 ![Snipaste_2024-06-06_17-06-44.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-a558a34daa5a38dbbfdc0905ed85858bfa990075.png) ##### 基于目录探测的测试 目录探测更多是针对ip的形式测试,往往ip的服务比较单一,没有更多的突破口,对目录探测可以把资产进行相关的喷洒,喷洒二级目录,重点测试一些image的目录,主要是观察服务器的响应 ![Snipaste_2024-06-06_17-13-14.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-8ab7e5dd9ea3735e48d859bbca437bc0688e7ff2.png) ###### 二次递归 例如在测试中二次递归,有些地址有200的响应,那可能就存在目录遍历 ![Snipaste_2024-06-06_17-14-28.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-f296601b68ec29330c9b3fb1c50168d3c8be5d6d.png) ###### 目录缺陷 一些中间件甚至对image目录不做限制 ![Snipaste_2024-06-06_17-16-14.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-69e6c20b6bffd16b445d64623a72f51ef09e7897.png) 这时候就可以利用../进行跳跃读取文件配置,敏感文件 ![Snipaste_2024-06-06_17-17-47.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-12a14a5c7dcad4fa0abce48f9968fc92c10eabf1.png) 另外一种是探测目录的编辑器位置,这个需要准备一些编辑器的目录,会有很多意外的收获,比如ueditor的反射xss ![Snipaste_2024-06-06_17-21-06.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-ca713ba80fa42832509b2d3e4c5367ae2ff1e792.png) ##### 基于Springboot框架的测试 这类的漏洞应该是各大厂商挖的最多一类漏洞,主要集中在swagger文档的泄露、actuator监控组件的未授权、druid连接池、heapdump堆文件泄露这四种 做这类的挖掘比较无脑,直接对着API地址批量探测即可,常用的工具有RouteVulscan和曾哥写的springboot扫描,前者会对流量包中每个报文进行拆分,作为一个基础的APi,然后批量发包字典,这类漏洞挖掘没啥技巧,分享一些绕过的姿势 首先actuator未作鉴权校验,通过中间件的校验,直接访问是403,这时候利用../进行跳转到APi地址,然后拼接即可 ###### 中间件目录符绕过 ![Snipaste_2024-06-06_17-32-39.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-f80448514ebe5b4187956977be833350ac568d0b.png) 有的中间件不允许访问actuator,就配置上.js、 .png资源文件后缀,绕过中间件 ###### 中间件资源文件绕过 ![Snipaste_2024-06-06_17-34-20-1717666473330.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-efe9aad140c7dce608265b8ec003a34308405c2f.png) ##### 基于XSS的测试 有些xss还是比较有意思的,位置都比较刁钻,不常规 ###### 表单型XSS ![Snipaste_2024-06-06_20-46-05.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-5436a085a3097052eeaf93fb443ac0de1e58c850.png) ![Snipaste_2024-06-06_20-48-58.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-9277e6293b801a473be99cfff7696c2dfb5e0b8a.png) ![Snipaste_2024-06-06_20-50-01.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-c1a0844741513b0f69252c9caf3cff8fa738e5ca.png) ###### 跳转型XSS ![Snipaste_2024-06-08_08-02-51.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-5e103667dff000e1a573027b370d034f2d093ebe.png) ![Snipaste_2024-06-06_20-52-00.png](https://shs3.b.qianxin.com/attack_forum/2024/06/attach-2a73530fde6e453617237cd1212aa2ed04a859ae.png)
发表于 2024-06-14 10:24:56
阅读 ( 5108 )
分类:
渗透测试
25 推荐
收藏
6 条评论
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
干货不少,感谢大佬分享
请先
登录
后评论
请先
登录
后评论
echoa
3 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!