初识java代码审计——ofcms 1.1.4内容管理系统代码审计

目录

壹   ofcms环境搭建(避坑指南)

贰   从ofcms出发浅析javaweb项目目录结构及其功能

叁   CVE-2019-9614 SSTI模板注入漏洞

肆   任意文件上传漏洞

伍   存储型XSS漏洞

陆   后台SQL注入漏洞


 

 

壹   ofcms环境搭建(避坑指南)

四月底开始入手java代码审计,从一开始的一头雾水到现在博客总结,之间经历了许多,走过不少坑,虽然大四啥事儿都没有但是整个过程也还是压力比较大的

现在IDEA中以及没有java代码审计插件 FindBugs 了,现在叫做 SpotsBugs ,人都傻了

环境搭建方面以及总结在之前的博客里面:

https://blog.csdn.net/Alexz__/article/details/116229266

一定要去看看,因为有许多的坑

 

 

 

贰   从ofcms出发浅析javaweb项目目录结构及其功能

因为没有系统的学习过javaweb的开发知识,对于整个javaweb的框架结构十分的陌生,于是便学习之后总结了这一盘博客,用来巩固自己学习路上所遇到的问题以及学习的成果;

总结在了这篇博客里面:

https://blog.csdn.net/Alexz__/article/details/116272080

 

 

 

叁   CVE-2019-9614 SSTI模板注入漏洞

CVE-2019-9614漏洞复现:

CVE官网链接:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9614

先登录进ofcms的后台admin管理界面;然后再模板文件中课编辑Freemarker的模板代码(这想想就....实在是不安全);随机挑选一个幸运页面,进行payload注入;

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

然后从前台进入该页面(联系我们)

于是便完成了系统命令执行的操作:

 

代码审计分析:

我们从项目的pom.xml文件中可以得知,该项目使用了Freemarker 2.3.21版本

该模板管理功能界面源码为 /ofcms-admin/src/main/java/com.ofcms.cms/admin/cms/TemplateController.java

从源码中可以看到该功能支持freemarker模板文件的热处理,编辑保存等功能

我们来看模板目录:

与其一一对应的是.../webapp/WEB-INF/page/default/下的html文件

但是我们在网页端进行实时模板更改的时候,后台网页文件并不会有变化,这里应该是作者在freemarker框架上二次开发了一个热处理功能从而可以进行模板编辑;作者还是很牛逼的,ofcms整个系统架构逻辑严密,分工明确,功能也十分得强大,就是在某些小地方的疏忽倒是存在不安全的因素(其实大部分的不安全因素都可以通过部署waf来缓解,从而进行治标不治本的操作)

具体内容可移步至:

https://blog.csdn.net/Alexz__/article/details/116400913

 

 

 

肆   任意文件上传漏洞

漏洞复现:

可上传jsp文件,后台无过滤

file_path不用管,应该是源路径,需要注意的是dirs和file_name这两个,我们可以通过file_path确定当前文件上传位置,通过dir进行修改,然后重命名为file_name后缀改为jsp,然后在file_content内添加我们URL编码的木马内容:

源码审计分析:

通过路劲搜索可定位到:

.../ofcms-admin/src/main/java/com.ofcms.cms/admin/controller/cms/TemplateController.java文件

审计保存模板片段代码:(审计过程中添加注释)(注释就是精华)

可以发现,核心操作代码在保存编辑完成之后保存模板时,用到了一个没什么卵用的dirs字段数据,我们便利用此字段输入数据可控来进行文件路径的重新定位;且保存模板时也没有进行字符串的过滤验证,扩展名也没有任何限制,于是便可以完成已知路劲的任意文件上传挂马获得shell:

冰蝎马:

上去了

后话:这一个模板编辑功能就爆出来了两个严重的漏洞,看来在开发系统时,需要注意啊,就是对于功能点的创新和尝试,同时也包含着非常大的安全隐患,切记要慎重。

 

 

 

伍   存储型XSS漏洞

漏洞复现:

漏洞存在位置:http://localhost:8080/ofcms-admin/case-c-61.html  位置不一定,这个是我的

源码审计分析:

通过post请求的路径定位到评论区前端界面:

.../ofcms-admin/src/main/webapp/WEB-INF/page/default/articel.html

从数据库中直接调取资源:

再次通过POST请求路径定位到后端java代码:

.../ofcms-api/src/main/java/com/ofsoft/cms/api/v1/CommentApi.java

找到了评论接口:

PS:因为输入法突然在IDEA中不能用了,就用英文打上了注释,勉强看懂代码大意就行

这里的XSS漏洞出现原因就简单明了了,前端V展示数据资源无过滤审核措施,后端接收资源也无过滤,于是便导致了这个存储型的XSS漏洞,算是高危,因为无需登录谁都可以评论

 

 

 

陆   后台SQL注入漏洞

漏洞复现:

这里可以进行update进行sql注入

几种常见的update注入模板:payload:适用于字符型:

        ' or updatexml(1,concat(0x7e,(database())),0) or '

     适用于数字型:

    ' or extractvalue(1,concat(0x5e24,(database()))) or '

从表内随便选择一个进行注入操作:

这里选择的是of_cms_ad

payload:update of_cms_ad set ad_name=updatexml(1,concat(0x7e,(database())),0) where ad_id=2

爆出了数据库名称

源码审计分析:

通过请求包头找到文件路径:

该板块的源码如下:

可以看到,通过getPara()获取到POST的sql字段数据

追踪Db.update():(快捷键按住Ctrl后鼠标点击函数即可)

继续追踪MAIN.update():

穷追不舍update()

可以看到这边已经开始数据库交互数据了,conn先赋值为空,然后把数据喂进另一个update()中:继续追踪:

通过查看IDEA给予的说明文档可以发现其用途

所以,在此处使我们可以控制的update型进行SQL注入;

 

 

 

小结:

本人第一次java代码审计,在开始之前上网找了许多的教程,准备工作等等,还发现居然没有一本系统介绍java代码审计的书籍;

其实这一次审计与其说是审计不如叫做黑盒渗透+代码分析;

看了许多前人的博客,从一个知识点引发出来无数个知识点,那种知识荒漠的感觉实在很糟糕,没办法,从头开始补,现在还有时间

下面可能要涉及的就是java代码审计靶机,从漏洞形成原理出发,去发掘大多数人通用漏洞的形成原理,系统的进行java代码审计的学习;

 

 

 

 

 

“因为山就在那里。”

                          ——英国登山家乔治·马洛里(George Mallory)

 

 

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值