zl程序教程

您现在的位置是:首页 >  Java

当前栏目

java审计之ofcms

2023-02-18 16:39:18 时间

文章首发于:先知社区

https://xz.aliyun.com/t/11925

搭建环境

Github地址如下:

"https://github.com/yuzhaoyang001/ofcms"

然后使用idea导入war包

配置tomcat

然后创建数据库

运行sql文件

然后配置好数据库文件

根据自己安装的mysql版本配置pom.xml

后台地址:http://localhost:8081/ofcms_admin_war/admin/login.html

账号,密码 admin / 123456

先大概过一遍功能点

因为前台看不到啥点所以就登录到后台观看

sql注入

在这里抓包

根据这个 找到 controller层

发现这里接收sql参数 然后update执行 我们打上断点来进行调试

随便输入一个

然后回到idea

可以看到外面输入的值

进入update函数

继续

经过一直调试

最后进入到这里执行 这里采用了预编译但是 是把整个sql语句进行预编译 不是把sql的参数 这样根本起不到效果

并且还进行了回显

用报错语句测试

因为是executeUpdate

所以只能用增删改的sql语句

update of_cms_ad set ad_id=updatexml(1,concat(1,user()),1)

任意文件读取

但仅限读取html js css xml文件

这里默认只能读取default里面的文件

因为第一次审计 不太了解框架结构 所以点击页面的时候进行抓包来寻找Controller层

在idea找到这个方法

dir是当前目录 也就是可查看代码的目录 这个是可控的 通过这里可以看出

继续往下跟

pathFile 则是根据传入的dir 获取到绝对路径

跟到这里则可以看到只能返回html xml css js

files则是default目录下的html等文件的绝对路径

然后在通过传的文件名 和 files里面的进行比较 默认是index.html

通过这里读取到源码

最后渲染到页面上

整个操作没有对dir进行限制 然后我们又可控 就能够读取其他目录的文件

测试

任意文件写入

还是上面这个Controller

可以发现只获取这几个参数的值

然后在这一行把content的进行了尖括号的替换

没有进行其他的过滤 可以任意写入

测试

任意文件上传

看到一个上传

还是根据数据包 找到代码

这里代码很少 一步一步跟进

这里看不出什么 继续跟进

这里通过new MultipartRequest进行上传文件

跟进

继续

这个函数没发现什么

发现这个函数

会判断jsp和jspx后缀

这里可以就可以通过windows的特性 来进行绕过 上传文件名为.jsp.

测试

第二处

这个函数也是和上面一样的 可以进行任意文件上传

这些都可以

越权修改密码

先创建一个普通用户

然后登录 修改密码

这里可以看到有一个user_id 修改这个 这里相当于 平常黑盒测试一样 改为1

可以看到admin的密码也变成asd123了

代码分析 根据数据包找到controller

根据日志也可以看到 是根据id来进行修改密码的 没有进行id和用户的绑定

有了修改密码的前提 我们会想到修改资料这些

模板注入

在pom.xml发现cms使用freemarker

在后台存在模板的修改

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

参考:https://blog.csdn.net/Little_jcak/article/details/126420014

https://blog.csdn.net/weixin_44522540/article/details/122844068