第一次学习java审计 可能有写得不好的地方
Github地址如下:
"https://github.com/yuzhaoyang001/ofcms"
然后使用idea导入war包
配置tomcat
然后创建数据库
运行sql文件
然后配置好数据库文件
根据自己安装的mysql版本配置pom.xml
后台地址:http://localhost:8081/ofcms_admin_war/admin/login.html
账号,密码 admin / 123456
先大概过一遍功能点
因为前台看不到啥点所以就登录到后台观看
在这里抓包
根据这个 找到 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