CSRF
CSRF漏洞
原理
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件、发消息、甚至财产操作:转账、购买商品等)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份认证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
CSRF与XSS的区别:最大的区别就是CSRF没有盗取用户的Cookie,而是直接的利用了用户浏览器的Cookie让用户去执行某个动作。
产生条件
被害用户已经完成身份认证
新请求的提交不需要重新身份认证或确认机制
攻击者必须了解Web APP请求的参数构造
引诱用户触发攻击的指令(社工)
攻击过程
用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
在用户信息用过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
用户未退出网站A之前,在同一浏览器中打开一个TAB页访问网站B;
网站B接受到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
检测
检测方法
- 发送数据包是否存在Token值
- 去掉数据包的Referer字段后重新提交,看是否能有效提交——同源策略
- CSRF专用检测工具:CSRFTester,CSRF Request Builde
- Burp在数据包页面右键生成检测CSRF的Poc
检测位置
- 用户信息修改页
- 密码修改页面
- 转账页面
- 注销页面
- 删除页面
防御方案
当用户发送重要的请求时需要输入原始密码
设置随机Token(最有效)
Token是数据包的唯一值,可以理解为是数据包的编号。从本站提交的数据包的Token值和从跨站提交的数据包的Token值不同,只需验证Token值是否是本站数据包的Token,即通过Token值验证该数据包是否是从本站发出,也是一种同源策略,检测来源。
检验referer来源,请求时判断请求链接是否为当前管理员正在使用的页面(管理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败),但是可以通过抓包修改数据包的Referer值来绕过(不安全)
设置验证码
限制请求方式只能为POST