GodCatv2/SQLI

GitHub: GodCatv2/SQLI

一份以实验室实战和防御措施为核心的 SQL 注入攻防完整指南,帮助读者在受控环境中理解漏洞原理并掌握修复方法。

Stars: 0 | Forks: 0

# SQL 注入 — 漏洞利用与防御指南 ![Topic](https://img.shields.io/badge/topic-Web%20Security-critical) ![License](https://img.shields.io/badge/license-GPL--3.0-blue) 警告:仅供在授权环境中使用。本文所述所有内容均针对受控的专属实验室环境(如 DVWA、PortSwigger Web Security Academy、TryHackMe、HackTheBox、bWAPP、自行部署的应用程序),或在获得系统所有者明确书面授权的审计中执行。未经授权对第三方系统执行这些技术在几乎所有司法管辖区均属违法行为。本指南旨在帮助读者了解该攻击向量的原理并掌握防御方法,这也是严谨的攻击/防御安全专业人员应具备的素质。 ## 定义 SQL Injection (SQLi) 是一种当应用程序直接拼接用户输入来构建 SQL 查询,而不是将其作为数据对待时所引发的漏洞。它在 OWASP Top 10 中依然名列前茅,因为尽管其原理简单,但在实际生产环境中依然经常被错误地实现。 ``` // Vulnerable sql = "SELECT * FROM users WHERE id = " + userId; ``` 如果未对 userId 进行验证,攻击者就可以部分控制查询的逻辑。 ## 涵盖技术 通过恒真条件绕过身份验证(' OR '1'='1)。基于 UNION 的注入:通过查找列数(ORDER BY)并使用 UNION SELECT 从其他表中提取数据。基于 information_schema 的枚举:在无需事先了解数据库结构的情况下,列出数据库、表和列。多语句/堆叠查询,当数据库驱动程序允许时。在专属实验室环境中使用 sqlmap 自动化工具,以加速漏洞检测和数据提取。 ## 实验室:工作流程 首先,搭建一个你自己的、包含漏洞的测试目标(例如处于低安全模式的 DVWA,或 PortSwigger Academy 中的任意挑战)。然后,识别可疑的输入参数(如 ?id=、登录表单、HTTP 头)并输入单引号以测试其响应。如果应用程序返回 SQL 错误或行为发生改变,则确认存在注入点并判断其类型(基于错误、基于 UNION、基于布尔、基于时间)。接下来,在提取数据前先枚举数据库结构(information_schema.schemata/tables/columns)。最后,像进行真实审计一样记录每一个步骤:请求、参数、payload、证据和影响。 ## sqlmap — 实验室中的基础用法 ``` sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=..." --dbs sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=..." -D dvwa --tables sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=..." -D dvwa -T users --columns sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1" --cookie="PHPSESSID=..." -D dvwa -T users -C user,password --dump ``` 官方文档:sqlmap.org ## 防御 — 本指南的核心重点 发现漏洞的价值只有在伴随消除漏洞的方法时才得以体现。真正的缓解措施是使用 prepared statements(预编译语句)/参数化查询,因为此时输入永远不会被解释为 SQL 代码,而是始终被当作纯数据来处理。配置正确的 ORM(如 SQLAlchemy、Prisma、Entity Framework 等)在不使用原生查询的情况下,默认生成的就是参数化查询。数据库的最小权限原则至关重要:应用程序使用的数据库账户不应具有读取 information_schema 或访问其业务领域之外数据表的权限。输入验证和白名单机制是对预编译语句的有效补充,但绝不能替代预编译语句。带有防 SQLi 规则的 WAF 增加了纵深防御的层级,适合在修复代码期间作为临时缓解手段。此外,错误处理机制也非常重要:切勿将数据库的错误信息直接返回给客户端,因为这会暴露内部结构,为攻击者提供线索。 ## 参考资料 OWASP SQL Injection Prevention Cheat Sheet、PortSwigger Web Security Academy (SQL injection) 以及 sqlmap 的官方文档。 ## 许可证 GNU General Public License v3.0
标签:CISA项目, Web安全, 多线程, 蓝队分析