实战之巧用编码与符号

admin 2023年10月24日02:16:12评论18 views字数 2715阅读9分3秒阅读模式

案例

案例一 巧用空格绕过权限校验:

巧用空格绕过权限校验

某系统存在未授权获取用户信息的漏洞,后面修复了,当直接访问该接口时,会跳转到权限禁止的页面

接口大概如下

/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的小屋):实战之巧用编码与符号

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月24日02:16:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战之巧用编码与符号http://cn-sec.com/archives/2139483.html

发表评论

匿名网友 填写信息