前言
做DVWA首先遇到的第一个新知识点就是CSRF了,遇到了那学就完事了,多学多练多记肯定是没错的。
什么是CSRF
CSRF(Cross-site request forgery),即跨站请求伪造,缩写为CSRF或者XSRF。
简单来说,就是攻击者盗用了你的身份进行各种操作。具体流程可以参考下图:
攻击者通过伪造浏览器请求,向用户之前曾取得信任的网站(即在本地生成了cookie,且必须在同一浏览器下)发送此请求,导致网站接受并认为是用户的操作而执行命令。这个漏洞常常被用来盗号、转账、发送虚假信息等等,利用的是网站只能验证来源用户的浏览器,却不能认证是否为真实该用户进行的操作。
如何检测CSRF漏洞的存在
在不存在token的前提下,最简单的方法就是抓包后删去请求头中的Referer再次提交,如果提交仍然有效则说明很大可能存在CSRF漏洞。
当然我们也可以使用CSRFTester、CSRF-Request-Builder等工具进行检测甚至攻击,关于这工具的使用不具体介绍,可以参考下面的博客进行学习:
CSRF自动化测试-CSRFTester
利用CSRF漏洞进行攻击
GET与REQUEST
如果浏览器是以GET方式或REQUEST方式接收请求的话,并且我们了解具体操作的payload,我们就可以在自己搭建的恶意网站中构建一个相似的信息。
例如,某网站的转账操作是这样的:
1 | http://www.mrl64.com/Transfercount?id=2333&money=1000&for=2233 |
那么我就可以在恶意网站中构造写入一个类似的链接,将转账的目标账户写成我的账户:
1 | http://www.mrl64.com/Transfercount?id=2333&money=1000&for=mrl64 |
接着我们把这个链接隐藏在我们的网页中,一般采用图片隐藏:
1 | <img src='http://www.mrl64.com/Transfercount?id=2333&money=1000&for=mrl64'> |
而由于_REQUEST[]同样也可以接收以GET请求发送的数据,因此上述的攻击方法同样奏效。
POST
POST类型的CSRF使用通常要用到自动提交的表单,访问恶意网站后表单自动提交模拟用户进行一次POST。
写表单就需要用到JS了,伪造一份跟转账表单一模一样的表单,然后嵌入到iframe中:
1 | <html> |
大概就像这样。
详细的攻击方法还可以参考下面这篇博客:
CSRF
总结
CSRF漏洞实际场景中使用频率较低,但危害性极大,相当容易造成大型网络安全事件。CSRF漏洞还可以搭配XSS漏洞进行更隐蔽的攻击,因此CSRF漏洞被判为高危漏洞。