DVWA靶场Web漏洞复现与防御分析:SQL注入/XSS/CSRF/命令注入
> 免责声明:本文内容仅为个人在合法靶场(DVWA)环境下的学习记录,所有测试均在授权范围内进行,严禁用于未授权测试。文中涉及的技术仅供学习交流,请遵守《网络安全法》及相关法律法规。
---
一、实验环境
- 攻击机:Kali Linux
- 靶机:Windows Server + DVWA
- 中间件:Apache + PHP + MySQL
- 工具:BurpSuite、SQLMap、Firefox
- 靶场:DVWA(安全级别:Low)
说明:本文所有测试均在本地虚拟化靶场环境中完成,IP地址为192.168.23.0/24.
二、SQL注入攻击与防御
2.1 布尔盲注
通过构造 `and 1=1` 和 `and 1=2` 判断页面差异,逐步猜测数据库名。核心思路是利用页面返回的真假状态推断字符。
猜测数据库库名
2.2 时间盲注
当页面没有明显回显差异时,使用 `sleep()` 函数,通过响应时间判断注入条件是否成立。
猜测数据库库名
2.3 SQLMap自动注入
使用 BurpSuite 抓取登录请求,保存为 request.txt,再用 SQLMap 加载:
```bash
sqlmap -r request.txt --dbs
sqlmap -r request.txt -D dvwa -T users --dump
```
成功导出 dvwa 库 users 表数据。
2.4 防御分析
1. 使用预编译(参数化查询),彻底分离代码与数据;
2. 数据库账号最小权限,禁止root直连;
3. 输入白名单校验;
4. 关闭详细报错信息;
5. 部署WAF作为辅助。
三、XSS跨站脚本攻击与防御
3.1 反射型XSS复现
在 DVWA 反射型XSS模块输入测试 payload,验证脚本是否执行:
html<script>alert(document.cookie)</script>
页面弹窗成功,说明存在反射型XSS。
Windows2008用户登录靶场DVWA,弹出登录Cookie。
在攻击机kali中建立钓鱼网页和恶意链接,恶意链接传输恶意脚本。(脚本代码)
在攻击机中建立接收Cookie的网页,写出php脚本
3.2 会话凭证窃取思路
攻击者构造钓鱼页面,诱导已登录用户点击,恶意脚本将用户 Cookie 发送到攻击者服务器。
模拟Windows用户访问钓鱼网页,点击恶意链接后的页面
攻击机查看收集到的远程主机Cookie值
攻击机利用窃取的Cookie值登录服务器。
3.3 防御分析
1. 对用户输入和输出做严格过滤/编码,禁止特殊字符(`<`、`>`、`'`、`"` 等);
2. 启用 CSP(内容安全策略),限制脚本加载源;
3. Cookie 设置 `HttpOnly`、`Secure`、`SameSite` 属性;
4. 敏感操作需二次验证,不依赖单一会话凭证。
四、CSRF跨站请求伪造与防御
4.1 攻击流程
用户登录 DVWA 后,访问攻击者构造的钓鱼页面,页面自动向靶场发送修改密码请求,利用用户已登录的会话完成操作。
Windows2008用户正常登录靶场
Windows2008执行铭感操作(修改登录密码),测试密码有效性。
攻击机kali建立钓鱼网页,建立恶意链接,伪造用户修改密码。
Windows2008再次测试密码有效性。
4.2 防御分析
1. 关键操作增加 CSRF Token;
2. 校验 Referer;
3. Cookie 设置 `SameSite`;
4. 敏感操作二次验证(如原密码、短信验证码)。
五、命令注入攻击
在 DVWA 命令注入模块输入 `127.0.0.1 && whoami`,验证命令是否被拼接执行。
防御:对用户输入做白名单校验,避免直接拼接系统命令,使用 `escapeshellarg()` 等函数。
六、总结与防御建议
本次实验在 DVWA 靶场中复现了 SQL注入、XSS、CSRF、命令注入等常见 Web 漏洞。核心体会:
1. Web 攻击本质是“找漏洞 + 钻空子”,利用合法入口发送恶意数据;
2. 防御要从输入校验、输出编码、权限控制、日志审计多方面入手;
3. 渗透测试必须在授权范围内进行,注重证据链和合规性;
4. 实验后复盘,把攻击思路转化为防御逻辑。
> 再次声明:本文所有测试均在合法靶场完成,严禁用于未授权测试。