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

通过 /rest/products/search API 的 SQL 注入漏洞,使用 UNION SELECT 查询 SQLite 的 sqlite_master 表,获取整个数据库结构定义。

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

0x01 任务简报

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


0x02 实战:复现漏洞

🔍 第一步:发现 SQL 注入点

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

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

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

搜索 API 请求

💉 第二步:测试注释和闭合

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

1
1'))--

响应结果

📊 第三步:确定列数

使用 ORDER BY 逐步增加列数,找出查询的确切列数:

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

ORDER BY 测试

确认查询包含 9 列

🎯 第四步:UNION SELECT 回显位置

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

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

UNION SELECT 测试

回显结果

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

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

构造查询语句,从 sqlite_master 表中提取所有 SQL 定义:

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

SQLite 查询

数据库结构获取

✅ 第六步:完成挑战

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


🔧 修复建议

找到它

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

修复它

Fix1

Fix2和Fix3修了个寂寞……


参考

使用 Hugo 构建
主题 StackJimmy 设计