成魔成仙,牛牛自己说了算!

我是YAK超级牛,

能抓包来能审计。

漏洞bug一眼有,

调试代码不喘气。

图片

图片

图片

图片

  • 在java中,不一定是和php一样(只要有文件上传就一定有漏洞),比如springBoot中,条件限制非常多。

  • 硬编码:在代码审计过程中,我们需要关注硬编码,有时会有意想不到的收获

  • SCA:在java SCA中,某些依赖的版本可能会出现很多问题。(shiro)

图片

针对Shiro来说,Apache官方说是集成了鉴权和访问控制。Shiro的本质就是一个filter过滤器。filter过滤器需要关注两个点。

如何进行路径匹配?

如何进行权限鉴定和访问控制?

针对filter来说,我们重点关注两个方法。init和dofilter

init方法

图片

这里进行了一个过滤器的配置。其实就是相当于从ini文件中获取到过滤的内容。

doFilter方法:

图片

shiro过滤流程

doFilter的流程:

(1)获取requestUri
(2)获取过滤链表
(3)根据过滤链表来进行过滤

图片

在这里可以看到不同的requestUri获取到的filterChain不同,而在getRequestUri中在normalize函数中处理的有问题,就造成了权限绕过。

图片

可以从github中获取该系统源码,然后进行编译。

图片

shiro权限绕过

经过代码扫描后,发现shiro的版本是1.4.0,处于权限绕过的版本中,进行尝试利用。

图片

这里先查看properties中shiro配置是如何进行定义。

图片

正常请求 & 权限绕过

图片

图片

任意文件删除

写出这样的一条syntaxFlow规则,含义如下:

(1)找到所有的delete并且条件为:object的全限定名是java.io.file作为一个source

(2)在syntaxflow向上寻找的路径中,opcode是param,并且function的注解中有 RequestMapping||GetMapping||PostMapping

delete?{*<getObject><fullTypeName>?{have: "java.io.File"}} as $source

$source<getObject> as $File
$File #{include: <<<CODE
*?{opcode: param && *<getFunc>.annotation?{.RequestMapping || .GetMapping || .PostMapping}}
CODE}-> as $sink

/*
File file = new File(xxx)
File.delete()
*/

在文件删除的过程中,向上寻找的路径中包含param,并且func中含有RequestMapping、getMapping、postMapping

图片

找到三个调用点,这里找到调用点之后,直接将传入的内容,进行拼接,然后进行了文件删除。

图片

图片

图片

任意文件读取

readBytes?{<getObject><fullTypeName>?{have: "cn.hutool.core.io"}} as $source

$source(* #{
    include: <<<CODE
*?{opcode: param && *<getFunc>.annotation?{.RequestMapping || .GetMapping || .PostMapping}}
CODE
}-> as $sink)

图片

图片

多处Xss:

这里写一条syntaxflow规则,大致含义如下:

(1)找到serviceImpl中所有的func,这些func名称中含有add、save、update

(2)找到所有save、update 的object名称中含有ServiceImpl/Service

(3)找到这些函数调用点,并且函数参数向上找的过程中,annotation中含有requestmapping.....

/save|update/?{<getObject>?{any: "ServiceImpl","Service"}} as $source1

*ServiceImpl.*?{opcode: func} as $source2

$source1 + $source2 as $source

$source()?{any: "add","save","update"} as $target

$target<getFunc()> as $targetFunc

$targetFunc(* #{
     include: <<<CODE
*?{opcode: param && *<getFunc>.annotation?{.RequestMapping || .GetMapping || .PostMapping}}
CODE,
}-> as $sink)

图片

Tip:

这里看了几处,如果是权限绕过的话,session中不存在用户,那么基本上不能使用添加的功能。

图片

找到一处添加商品功能,可以发送payload对此处进行利用。

图片

图片

图片

其他思路:

  • 在扫描过程中,其实还找到多处的文件上传的利用,但奈何是利用date作为路径名称,虽然有修改文件名的功能,但是限制太大。

  • 此项目为热部署,并且使用的是thymeleaf作为模板,如果能控制到html/jar,可以通过thymeleaf来执行命令RCE。

演示视频:

我们都将其作为一个规则组

演示视频

图片

 

END
YAK官方资源

Yak 语言官方教程:
Yak:致力于安全能力融合的语言 | Yak Program Language

Yakit 视频教程:
YakProject的个人空间-YakProject个人主页-哔哩哔哩视频

Github下载地址:
GitHub - yaklang/yakit: Cyber Security ALL-IN-ONE Platform

GitHub - yaklang/yaklang: A programming language exclusively designed for cybersecurity

Yakit官网下载地址:
https://yaklang.com/

Yakit安装文档:
下载安装与更新配置 | Yak Program Language

Yakit使用文档:
Yakit: 集成化单兵安全能力平台 | Yak Program Language

常见问题速查:
FAQ | Yak Program Language

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值