CSRF跨站请求伪造
原理总结
一个CSRF漏洞攻击的实现,其需要由“三个部分”来构成
- 有一个漏洞存在(无需验证、任意修改后台数据、新增请求);
- 伪装数据操作请求的恶意链接或者页面;
- 诱使用户主动访问或登录恶意链接,触发非法操作;
漏洞的存在
- 如果需要CSRF攻击能够成功,首先就需要目标站点或系统存在一个可以进行数据修改或者新增操作,且此操作被提交后台后的过程中,其未提供任何身份识别或校验的参数。后台只要收到请求,就立即下发数据修改或新增的操作;
- 以上漏洞情况的存在,出现比较多的场景有用户密码的修改、购物地址的修改或后台管理账户的新增等等操作过程中。
漏洞利用的伪装
CSRF漏洞存在了,如果需要真正的被利用,还需要对“修改或新增”数据操作请求的伪装,此时恶意攻击者只要将伪装好的“数据修改或新增”的请求发送给被攻击者,或者通过社工的方式诱使被攻击者在其cookie还生效的情况下点击了此请求链接,即可触发CSRF漏洞,成功修改或新增当前用户的数据信息,如修改当前用户的密码、又或者是当前用户为后台管理员,触发漏洞后新增了一个后台管理员。
用户非本意操作
当前用户在不知情的情况下,访问了黑客恶意构造的页面或在链接,即在非本意的情况下完成黑客想完成的“非法操作”实现了对当前用户个人信息的恶意操作。
构造一个恶意链接或html页面
构造一个恶意链接或者html页面CSRF漏洞的目的:利用已存在的漏洞构造了一个“恶意链接”或“html页面”,然后诱使用户点击触发此漏洞。目标站点存在一个漏洞(CSRF),攻击者利用此类漏洞伪装了一个链接或者html页面,诱使被攻击者在登录的情况下(即当前cookie有效的情况下)点击了此伪装请求,随后在用户不知情的情况下完成了对当前用户数据的修改或者新增操作,而被修改的信息可能是用户的密码、关键信息又或者新增后台管理员等。
DVWA-CSRF LOW
一个修改账号的页面
修改完账号后发现url因为get请求发生了改变。
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change#
使用虚拟机模拟受攻击者,去访问这个url(发现密码修改成功)
也可以通过burp尝试构造html前端页面
当正常用户访问时,密码就会被修改
DVWA-CSRF medium
过滤规则是http包头的Referer参数的值中必须包含主机名(这里是虚拟机的物理地址)我们可以将攻击页面命名为[虚拟机地址].html (页面被放置在攻击者的服务器里,这里是我的物理机地址)就可以绕过了。
这里构造一个html内容与上一个内容一样,html的名字是服务器地址
防御方法
- 验证 HTTP Referer 字段;
- 在请求地址中添加 token 并验证;
- 在 HTTP 头中自定义属性并验证。