案例
案例一 巧用空格绕过权限校验:
巧用空格绕过权限校验
某系统存在未授权获取用户信息的漏洞,后面修复了,当直接访问该接口时,会跳转到权限禁止的页面
接口大概如下
/api/xxx/xxx
绕过方法:
/api%20/xxx/xxx
利用空格成功绕过,成功获取到用户的个人信息,包括密码,地址,身份证号等信息。
案例二,巧用.*绕过sso限制:
已知某系统存在绕口令漏洞,但是该高校访问时,会自动跳转到sso系统中去,即如果没有经过统一认证,直接访问会自动跳转到统一门户去
如直接访问该url时,会直接跳转到sso。导致无法使用登录模块功能
http://xxx/xxx
绕过:这里的1随便改成其他也可
http://xxx/xxx/1.css
成功获取到登录功能,成功绕过,登录后成功获取到管理员权限
分析
案例一分析:
基于开发的角度探究权限限制的路由:
这里主要探上面的案例,一口气将完所有的java的权限绕过,内容有点多
上面的系统使用的shiro框架,shiro的权限绕过的漏洞:
漏洞编号 | CVE-2020-1957 | CVE-2020-11989 | CVE-2020-13933 | CVE-2020-17523 | CVE-2022-32532 |
---|---|---|---|---|---|
影响版本 | Apache Shiro < 1.5.1 | Apache Shiro < 1.5.2 | Apache Shiro < 1.6 | Apache Shiro < 1.7.1 | Apache Shiro ≤ 1.9.0 |
payload | /xxx/..;/admin/ | /;/test/admin/page | /admin/;page | /xxxx/* | /admin/a%0any |
Shrio 处理结果 | /xxxx/.. | / | /admin/ | /xxxx/ | /admin/a%0any |
SpringBoot 处理结果 | /admin/ | /admin/page | /admin/;page | /xxxx/* | /admin/any |
具体利用的payload:
CVE-2016-6802在访问路径前加上/任意目录名/../,即可绕过访问
CVE-2020-1957/demo/..;/admin/index其中demo为授权路径,admin/index为鉴权路径 /.;/hello/aaaa
CVE-2020-11989admin/page%252fABCDEFG其中admin/page为鉴权路径,ABCDEFG为随意字符串 /hello/a%25%32%66a /;/test/hello/aaa
CVE-2020-13933admin/%3BABCDEFG,其中admin为鉴权路径,ABCDEFG为随意字符串
CVE-2020-17510admin/%2e
CVE-2020-17523admin/%20,其中admin为鉴权路径
CVE-2022-32532特定条件下的漏洞利用:当shiro使用了RegExPatternMatcher进行路由匹配时,由于Java的正则Pattern.matches解析.默认是不匹配r或者n的,因此当path中带有%0a时可绕过正则匹配 /permit/a%0any
把上面的弄清楚后,大概就可以整明白shiro的漏洞,基本上都是处理字符导致的。
除此之外也给开发写的匹配关系有关,如上面案例的匹配即有可能即是设置的即是匹配/api/*
(具体的代码我没看)
而我们利用/api%20/导致shiro匹配不到,而路由取却取的到/api/* 进而导致权限绕过。
由此可见对于shiro框架的时候,或者如swagger这些的时候,可以巧用特殊字符去进行fuzz绕过权限。
案例二分析:
基于开发的角度探究限制原理:
统一门户会从哪几个角度去进行限制跳转,本质上还是从匹配思路去做的
①基于cookie,token,heeader头其他参数等的角度
②基于正则匹配路径的角度
③基于ip的角度
这里均以php代码为例
基于cookie的代码限制手法,header,token等同理
<?php
$cookieName = 'cookie_name';
if (!isset($_COOKIE[$cookieName])) {
header("Location: http://统一门户/");
exit();
}
echo "继续执行其他操作";
?>
基于正则匹配的角度,然后这里的$targetUrl是从后台配置中去取,也有可能是如下
http://xxxx/* 只要是如下即需要跳转
<?php
$redirectUrl = 'http://统一门户/';
$targetUrl = 'http://xxxx'; // 指定的URL
$currentUrl = $_SERVER['REQUEST_URI'];
if ($currentUrl === $targetUrl) {
header("Location: " . $redirectUrl);
exit();
}
echo "继续执行其他操作";
?>
基于ip的代码限制
<?php
$redirectUrl = 'http://统一门户/';
$targetIP = '127.1.1.1';
$currentIP = $_SERVER['REMOTE_ADDR'];
if ($currentIP === $targetIP) {
header("Location: " . $redirectUrl);
exit();
}
echo "继续执行其他操作";
?>
在探攻击绕过
这里把攻击手法探究清楚后,就大概的可以去尝试着绕过统一门户的限制了
第一种
这里的第一种基于cookie,token,header其他参数等的绕过
就可以在header头中中添加很多参数
如cookie:ssosession=111;usersession=;
token:
auth:
等等去进行绕过
第二种
基于第二种的,可以尝试去使用一些白名单,如由于业务很多时候会引用一些系统中的静态文件,如pdf,jpg等文件
因此很多时候统一门户的配置会配置,这些静态文件路由结尾的可以访问
因此很多时候可以尝试使用在后面进行添加.js .css .jpg等等去进行将我们想访问的url变为静态资源去进行绕过
第三种
可以尝试X-Forwarded-For:127.0.0.1等的白名单ip
去让sso认为我们是相关的白名单ip进而绕过。
绕过
把这三个原理和绕过手法讲明白后,就可以理解我们上面的1.css为什么可以绕过统一门户的原因了
就是利用的.css让sso认为我们是白名单的路由导致的。
最后
攻防对抗或者漏洞挖掘的时候,站在开发和防守方的角度去做测试,或许思路会更好的。
原文始发于微信公众号(goddemon的小屋):实战之巧用编码与符号