暮年|代码审计入门之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结构
src/main/java:是java的代码目录
src/main/resources:是资源目录 , 放一些配置文件 , 如properties、spring-mvc.xml等
src/main/webapp:是传统项目的WebContent目录
0x01:SQL注入首先该系统要求登录之后才能使用大部分功能 。 所以我们先来看看那些功能是不需要登录就可以访问的 。 通过官网的技术手册我们可以知道该系统采用Apache Shiro来控制权限 。 于是我们查看Apache Shiro的配置文件 , 寻找过滤器定义的列表 。 如图所示 。
anon 没有参数 , 表示可以匿名访问 。
authc表示需要认证(登录)才能使用 , 没有参数
通过以上代码我们可以获取到一批不用登陆就可以访问到的URL 。 我们抽出一个来看看
此处以resetPassword为例
没有任何处理 , 跟进findUniqueByProperty接口
上述SQL语句并没有采用JDBC的预编译模式 。 而是采用了${}这样的写法 。 这种写法就产生了SQL语句的动态拼接 。 因为”${xxx}”这样格式的参数会直接参与SQL语句的编译 , 从而不能避免SQL注入攻击 。 这是造成mybatis注入的标准写法 。
我们构造语句注入即可
同理发现多处存在注入 。
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
推荐阅读
- 叙说娱乐|与癌症抗争,终究三任前妻没有送他,高凌风暮年心酸
- 轻拔琴弦|Reactor如何规定,混淆保护需正确命名!看.NET代码保护工具.NET
- 不能忍,1行代码竟然改了10天......
- ECCV 2020 | 空间-角度信息交互的光场图像超分辨,性能优异代码已开源
- 快芯网|【一周热点芯闻】苹果重夺市值全球第一!传华为、联发科、高通等50多家科技公司源代码被泄露
- 刚刚发布了2.0版本,只需要写上几行Python代码
- 贵州人大|把钱花在刀刃上!省人大常委会组成人员审议预算报告和审计工作报告
- 二狗聊科技|初学者如何更好自学Python代码?
- 产业气象站 还让我手动写个HTTP协议代码,三次握手和四次挥手说完了
- 暮年|微软Surface Duo拥有顶部状态栏设计/较厚的边框