csrf漏洞
csrf(跨站请求伪造攻击)
利用受害者尚未失效的身份认证信息,诱骗其点击恶意链接或包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向服务器发送请求。
用户在关闭浏览器的时候,他的身份认证信息不会立刻失效。
用户在登录正常网站a的时候,同时打开了一个危险网站b,那么攻击者就可以通过危险网站b利用受害者的身份认证信息,向服务器发送器请求。
csrf的分类:
1.站外类型的:是数据外部提交问题,一般程序员会在留言或者评论的表单中加入水印防止spam问题(spam可以简单的理解问垃圾内容),但是为了提高用户体验,所以对一些操作没有进行限制,所以攻击者可以通过在站外的web表单中编写脚本伪造文件请求,或者和自动提交的表单一起使用实现get、post请求
2.站内类型的:是由于程序员滥用类变量造成的,在一些敏感的操作中使用了request等变量请求参数。
验证csrf漏洞的方法:
1.使用代码审计,查看源码中是否有关于token和referer的验证内容
2.打开几个非静态页面,抓包查看是否有token,如果没有,再直接请求这个页面 ,不带referer,看返回的数据是否可以一样,如果一样的时候,很可能存在csrf漏洞。
3.使用工具,比如csrftester
使用步骤 以DVWA为例,如下:
点击提交之后,通过csrftester抓取到下面页面
点击Generate HTML即可生成poc,勾选Display Browser之后POC自动运行。完成。
csrf一般的攻击模式一般情况下有三种:
1.利用get请求
在页面中添加一个<img src>脚本
2.利用post请求
加入一个表单
3.其他猥琐流csrf
利用POC
防御:
1.在请求地址中加入token值并验证
在session中加入一个token,在请求地址中随机产生一个,将两个进行对比
2.验证referer
referer中记录的是请求的来源地址,攻击者在利用csrf漏洞的时候,是在第三方页面中进行利用的,所以referer值也是第三方的
3.在http头中自定义属性并验证
这个也是利用token进行验证的,在头信息中通过xmlhttprequest加入csrftoken属性
绕过:
一般情况下,遇到以上三种防御方式,就要结合其他漏洞进行利用
可能出现CSRF的位置:
1.用户密码的修改
2.购物地址的修改
3.后台管理账户的新增等等