JFinal代码审计小记
JFinal代码审计小记
项目简介
jfinal cms是一个java开发的功能强大的信息咨询网站,采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap框架。
项目地址:https://github.com/jflyfox/jfinal_cms/releases/tag/v5.1.0
环境搭建
下载源码,用idea打开
小皮启动数据库,将相关sql文件jfinal_cms_v4.sql导入数据库中
在sql文件中前面加入
1 | create database jfinal_cms; / use jfinal_cms; |
选用tomcat启动
源码分析
白盒+黑盒进行测试
看到这种论坛类的,我直接就是想到xss
先测测xss
XSS1
登录处注册邮箱抓包修改邮箱可造成xss

修改

然后就会得到

分析一下代码是怎么处理的
RegistController类会进行处理相应的html文件

相应的html文件中调用oper_save方法

同类save方法中写了对email的处理

通过审计发现他后端只会检验邮箱是否为空和带不带@,也就是说我们抓包后绕前端,在邮箱处插入xss payload后加一个@就可以绕过

登录后再个人信息处可查看,触发xss

XSS2
相应的,备注处也存在xss

去追踪一下源代码


相应的save方法和update方法均没有响应的过滤
XSS3
前端评论区发布xss会被转义

尝试发包改也会被转义

定位到相关代码中去查看一下

找到com.jflyfox.modules.admin.comment下的saveComment方法

发现转义
跟踪一下确实是的

SSTI
相关cms使用了beetl
管理员用户下存在模版管理功能
出问题修改一下tomcat配置
重新修改工件名称为jfinal_cms



添加
1 | ${@java.lang.Class.forName("java.lang.Runtime").getMethod("exec", |

跟踪到源码中去看看
修改模版保存,会先到src\main\java\com\jflyfox\modules\filemanager\FileManagerController.java
如果是POST请求会跳转到saveFile

之后会调用fm的savefile()
相应的fm是FileManager的实例方法

来到FileManager中的saveFile方法

保存的时候没有任何过滤
直接修改html即可配合ssti漏洞
文件上传
刚刚看保存模版的时候看了一下上传的处理
文件上传有个大小个type验证

上传文件尝试
绕过后无法解析,但是无法解析,当然解析xss
sql

form.orderColumn参数在多个网页接口均存在sql注入漏洞
去找到代码看看
找到相关参数

在getOrderBy出调用响应参数
找getOrderBy
许多处都调用了这个,这只是其中一个,写法大差不差

可以看到接受的参数没有任何过滤





