sql注⼊
在前端新增⼀条代码⽣成列表,抓取数据包
通过搜索路径system/generate定位到SystemGenerateController类⽂件
在create⽅法中打个断点进⾏分析db.update函数
进⼊update函数
这⾥采⽤了预编译,是把整个sql语句进⾏预编译,不是把sql的参数拼接执⾏,所以根本起不到效果
这⾥是executeUpdate,所以只能⽤增删改的sql语句,⽤报错语句进⾏测试
模板注⼊
在pom.xml发现cms使⽤freemarker
在后台有创建模板的地⽅,插⼊payload:<#assign value="freemarker.template.utility.Execute"? new()>${value("calc.exe")}
测试访问不存在的路径,触发命令执⾏
任意⽂件读取
查看getTemplates⽅法,打个断点进⾏分析
dir变量就是获取当前路径,这个是可控参数
pathFile 则是根据传⼊的dir,获取到绝对路径
files则是获取default⽬录下的所有⽂件的绝对路径
只获取⽂件为html xml css js等格式
然后在通过传的⽂件名和files⾥⾯的进⾏⽐较 默认是index.html
通过这⾥读取到源码
最后渲染到⻚⾯上admin/cms/template/index.html
整个操作没有对dir进⾏限制,我们⼜可控制参数,就能够读取其他⽬录的⽂件
读取web.xml⽂件内容
任意⽂件写⼊
查看save⽅法代码
实际上只通过file_name和file_content参数传⼊⽂件
测试⼀下
任意⽂件上传
全局搜索upload关键字,定位到ComnController类⽂件
查看upload⽅法,整个代码并没有发现什么,这⾥跟踪继承函数getFile
继续跟踪getFiles⽅法
跟踪MultipartRequest⽅法
继续跟踪wrapMultipartRequest
最后跟踪到isSafeFile⽅法,过滤jsp和jspx⽂件
测试⼀下,上传html⽂件
访问不解析,但上传成功了
原文始发于微信公众号(轩公子谈技术):粉丝投稿:ofcms 1.1.2 代码审计
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论