java代码审计-ofCMS

首先我们搭建好项目

把地址填入url:https://gitee.com/oufu/ofcms.git然后clone就可以了,其他的详细步骤可以去查一下ofcms的安装步骤,这里就不过多赘述。

1,java代码审计思路:

1.1,首先看框架,也就是看pom.xml里面的内容,确定框架是什么,以及框架的版本号,这样能快速定位到框架存在的漏洞

1.2,查看过滤器,有些过滤器的名字是根据漏洞来取的。

2,漏洞利用

2.1,SQL注入

访问后台,账户:admin 密码:123456

在系统设置-》代码生成-》增加

观察前端页面我们能发现,这里面传入的值的名字叫sql,name=sql

接下来去源代码定位代码

我们可以看到定位到的代码里面刚好是有一个传入的值叫sql,然后赋值给字符串sql,但是先经过了一个函数,继续进入函数

这个函数没有过滤,就是返回我们的http请求的内容,我们继续往下看,他用了一个Db类的uodate方法,跟进查看

没看出来什么,那就继续跟进

这个方法中有PreparedStatement,这是起到一个预编译的效果,将用户传入的参数用?作为占位符代替,真正执行语句的时候,参数会被当成文本,不会再次编译一遍。但是这里我们可以输入一整条的sql语句,不使用占位符,所以这里的预编译将不起作用。

这里我们选择报错注入,因为在这里这个框的作用就是使用sql语句新增加一个表,所以我们使用sql语句新增加一个表的时候,就用报错语句将我们想要的信息带出来了。

payload:

update of_cms_link set link_name=updatexml(1,concat(0x7e,(database())),0) where link_id = 4

2.2,ssti模板注入

我也是第一次接触java的模板注入,根据查看pom.xml文件

我们可以看到,它有freemarker的依赖,证明可能会有对应的模板注入,对应的漏洞点在这里

会获得http请求中的file_content的值,也就是后台里面的模板设置中的模板文件的内容这里面,我们可以改html的文件内容。

而这一串代码,接受了我们输入的file_content的值之后,下面的filecontent.replace会将被url编码的html实体代码><,也就是&lt和&gt重新转换为><,下面的就是创建一个新的文件对象,然后写入文件。没有过滤,那么我们就可以进行ssti模板注入了。

payload:<#assign value="freemarker.template.utility.Execute"?new()>  ${ value("calc") }

我们来解释一下这个代码是什么意思:

1,这个assign是指令的意思

2,value是一个键,后面的是它的值

3,值是这个freemarker.template.utility.Execute"?new(),这个值有什么用呢,我们注意到后面这个new(),它表明我们可以调用到TemplateModel这个接口的所有类的构造方法。这里我们调用的就是TemplateModel这个接口中的Execute的空参构造方法

4,然后后面的${ value("calc") }是我们传递给Execute的参数,打开一个计算机

为什么这么构造,就是因为这个类里面有命令执行的代码

保存了之后回到首页面就会看到计算器弹出

2.3,文件上传漏洞,还是刚刚的那个save函数

在这下面不是会新创建一个文件对象,并且写入文件内容吗,并且没有任何过滤,那么我们可以抓包修改这个file_content的值,传入jsp马,抓包刚刚的更改模板的页面,将file_content的内容修改为冰蝎生成的jsp代码,然后file_name更改为:…/…/…/static/shell.jsp,因为从index.html跳转到 static 需要三个…/,而我们上传的文件一般都放在静态文件夹里。

不过我不知道为啥,我传进去之后没有找到文件位置。

2.4,XXE漏洞,漏洞位置

这里先使用了getParamsMap()赋值给hm,再从hm获得文件之后,添加后缀jrxml,我们跟进getParamsMap()方法

这个方法只是一个循环遍历,没有什么过滤,再看看下面的函数

一直跟踪,最后到

并没有禁用外部实体,之后我们就可以利用刚刚的文件上传漏洞,上传一个jrxml后缀的文件,然后里面写入恶意代码

2.5,存储型xss,在首页的新闻中心,随便点一个新闻,有用户评论

抓包将content的内容改为<script>alert(1)</script>

或者直接在评论框写<script>alert(1)</script>都可以,刷新一次就会弹一次

这次的代码审计就到这里,发现了很多问题,也学到了很多东西,又是充实的一次记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值