CSRF伪造请求攻击
简介
在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也称为"one click"攻击。
CSRF攻击的特点
-
1、CSRF攻击是建立会话之上的攻击,浏览器与服务器之间是在会话之中
- 先决条件
-
2、攻击者伪造了合法的身份
-
3、欺骗用户访问URL
原理
程序员在设计时,没有对敏感信息(referer、token)进行严格的审查和过滤,导致攻击者可以伪造提交信息,骗被攻击者打开或者点击
-
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
-
- 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
-
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
-
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
分类
站外
- 本质上就是传统意义上的外部提交数据问题
站内
- 一定程度上是由于程序员滥用$_REQUEST类变量造成的
CSRF漏洞检测
最简单的方法就是抓取一个正常请求的数据包,去掉(或者修改)Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
- 如果含有token信息,基本可以放弃CSRF漏洞
CSRF漏洞检测工具
-
CSRFTester,CSRF Request Builde
-
原理
- 首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
CSRF 实例
快速拖库
-
攻击者
-
1、伪造管理员权限拖库链接
- http://192.168.0.102:8080/dzcsrt/uc_server/admin.php?m=db&a=operate&t=export&appid=0&backupdir=xxxx%26backupfilename%3Daaaa
- 需要知道链接的最终形式(如上,可以去网上找到源代码,或者其他途径),修改备份保存的文件夹(xxxx)和文件名(aaaa)
-
2、正常注册网站
-
在前端发帖或者留言
- 在发帖的过程中使用添加图片链接等方式将上面伪造的拖库链接发送出去,等待管理员权限的用户查看,等待攻击
-
-
5、访问文件,访问成功则完成攻击,达到目的
-
-
被攻击者(管理员等)
-
3、正常登录,打开相关会话
-
4、查看含有攻击者伪造信息的内容
- 攻击完成
-
修改密码
添加管理用户
本地网络设备CSRF攻击
- fast路由器开启远端web管理
无需浏览器案例
-
添加自解压文件
- 实现弹窗、隐藏运行
CSRF防范
服务端
- 1、验证HTTP Referer字段
- 2、在请求地址中添加token并验证
- 3、 使用验证码或者密码确认方式进行
- 4、在服务端严格区分好POST与GET的数据请求,避免使用request
- 5、在HTTP头中自定义属性并验证
用户端
- 1、不轻易点击链接和图片
- 2、及时退出长时间不使用的会话
- 3、在设备上安装防护软件,并更新软件特征库
安全设备
- 第三方的专业安全设备