★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。
1、CSRF简介
CSRF,全称:Cross-Site Request Forgery,跨站请求伪造,也被称为One Click Attack或Session Riding,是一种网络安全漏洞,攻击者通过引诱用户在已登录的Web应用程序中执行非自愿操作,以利用用户在应用程序中的身份和权限来执行未经授权的操作。
图片来源网络
2、CSRF攻击原理
CSRF攻击就是利用网站地用户网页浏览的信任,挟持用户当前已登录的Web应用程序,去执行用户非本意的操作。在cookie有效期间,通过构造或包含CSRF脚本链接发送给用户,得到信息后再伪造成用户身份,执行相关操作。cookie在浏览器一段时间内不会过期,不关闭浏览或退出登录情况,再次访问默认是登录状态。
一个CSRF漏洞攻击的实现,需要由“三个部分”来构成
1、漏洞风险存在;
2、伪装数据操作请求的恶意链接或者页面;
3、诱使用户主动访问或登录恶意链接,触发非法操作。
2.1、存在漏洞风险
目标网站可系统存在可新增或修改的操作,操作过程中没有作任何身份识别或校验,就把数据新增或修改。出现比较多的场景有:修改用户密码、添加用户、修改收货地址、新增或修改后台管理账户等,其它一些对话框钓鱼页面,CSRF一般与XSS结合使用,这时被称为XSRF攻击。
2.2、伪装请求
要CSRF漏洞被触发,成功新增或修改当前用户的数据信息,需要对【新增或修改】数据操作请求进行伪装,然后恶意攻击者把伪装好的请求发送给被攻击者,或通过社工的方式诱导被攻击者在cookie有效期间点击请求链接。
2.3、用户非本意操作
当前用户在不知情的情况下,访问了黑客恶意构造的页面或链接,实现了对当前用户个人信息的恶意操作。
图片来源网络
3、CSRF常见类型
常见的CSRF攻击主要有两种类型,GET类型和POST类型。GET类型,一般是通过url,在url里面拼接上参数,CSRF中最常见,危害最大,也是最简单的一种类型;POST类型一般都是表单提交,可以在body里面携带数据。
4、CSRF进阶
4.1、JSONP劫持
只支持GET请求,不支持POST等其他HTTP方法,通过动态创建script标签实现。挖掘方法:校验referer,如果抓取一个正常请求的数据包,如果没有Referer字段和token,极有可能存在CSRF漏洞;如果有Referer字段,去掉Referer字段后再重新提交还有效,那么基本上可以确定存在CSRF漏洞。
4.2、CORS劫持
CORS跨域资源共享——Cross-origin resource sharing,是H5提供的一种机制,可以限制指定域外的资源访问。如果配置不当则可能遭受跨域的攻击,并且该机制并不能用来抵御CSRF攻击。相关响应头:Access-Control-Allow-Origin,表示服务端允许的请求源,*标识任何外域,多个源 , 分隔;Access-Control-Allow-Credentials,表示是否允许发送Cookie,ajax请求设置,withCredentials = true,浏览器的cookie就能发送到服务端。
挖掘技巧:查看ACAO响应头是否为具体的值以及ACAC响应头是否为true,如果ACAO 为*或者null,说明服务器配置错误,存在CORS劫持漏洞,它返回的头里面必须要有Access-Control-Allow-Credentials这个头,并且设置的值为true才有意义。
Access-Control-Allow-Origin: http://www.xxxx.com
Access-Control-Allow-Credentials: true
5、CSRF防御
1、尽量使用POST,限制GET,GET接口太容易被拿来做CSRF攻击;
2、加验证码(二次确认),验证码,强制用户必须与应用进行交互,才能完成最终请求。
3、Referer Check(请求来源检查),检查HTTP请求头部的Referer字段,该字段标明请求来源URL。
4、Anti CSRF Token,加密。
6、下期内容预告
下期内容分享pikachu靶场实验,敬请关注我的公众号:大象只为你,持续更新中…
靶场环境搭建详参考《靶场环境搭建【XP、pikachu、dvwa、sqli-labs】》