暮年|代码审计入门之Jeeplus代码审计

0×00 前言JeePlus是一款基于代码生成器的javaEE快速开发平台 , 可以帮助解决java项目中绝大部分的的重复工作 , 让开发者更多关注业务逻辑 。 Jeeplus支持单表 , 主附表 , 一对一 , 一对多 , 多对多 , 左树右表的直接生成 , 只需简单配置 , 就可以生成数千行高质量代码 。 开发者声称该平台使用目前流行的多种web技术 , 包括Spring mvc4.0+, MyBatis, Apache shiro, J2cache,qutarz,spring websocket, Jquery ,BootStrap等等 , 支持多种数据库MySQL, Oracle等 。分层设计:使用分层设计 , 分为dao , service , Controller , view层 , 层次清楚 , 低耦合 , 高内聚 。严格遵循了web安全的规范 , 前后台双重验证 , 参数编码传输 , 密码md5加密存储 , shiro权限验证 , 从根本上避免了SQL注入 , XSS攻击 , CSRF攻击等常见的web攻击手段 。 既然这么安全 , 那么我们从网上下载一份源码来看一看 。
【暮年|代码审计入门之Jeeplus代码审计】通过IDEA导入该源码 , 我们可以发现其为典型的Maven结构
暮年|代码审计入门之Jeeplus代码审计src/main/java:是java的代码目录
src/main/resources:是资源目录 , 放一些配置文件 , 如properties、spring-mvc.xml等
src/main/webapp:是传统项目的WebContent目录
0x01:SQL注入首先该系统要求登录之后才能使用大部分功能 。 所以我们先来看看那些功能是不需要登录就可以访问的 。 通过官网的技术手册我们可以知道该系统采用Apache Shiro来控制权限 。 于是我们查看Apache Shiro的配置文件 , 寻找过滤器定义的列表 。 如图所示 。
暮年|代码审计入门之Jeeplus代码审计anon 没有参数 , 表示可以匿名访问 。
authc表示需要认证(登录)才能使用 , 没有参数
通过以上代码我们可以获取到一批不用登陆就可以访问到的URL 。 我们抽出一个来看看
此处以resetPassword为例
暮年|代码审计入门之Jeeplus代码审计没有任何处理 , 跟进findUniqueByProperty接口
暮年|代码审计入门之Jeeplus代码审计上述SQL语句并没有采用JDBC的预编译模式 。 而是采用了${}这样的写法 。 这种写法就产生了SQL语句的动态拼接 。 因为”${xxx}”这样格式的参数会直接参与SQL语句的编译 , 从而不能避免SQL注入攻击 。 这是造成mybatis注入的标准写法 。
我们构造语句注入即可
暮年|代码审计入门之Jeeplus代码审计同理发现多处存在注入 。
暮年|代码审计入门之Jeeplus代码审计
暮年|代码审计入门之Jeeplus代码审计
Payload:GET:
/a/sys/user/resetPassword?mobile=13588888888'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))%23
/a/sys/user/validateMobileExist?mobile=13588888888'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))%23