CSRF跨站请求伪造原理及示例

CSRF介绍

        CSRF,全称为Cross-Site Request Forgery,即跨站请求伪造。这是一种攻击方式,它利用用户已登录的身份,在用户毫不知情的情况下,以用户名义执行非法操作。简单来说,就是攻击者诱导用户访问一个恶意网页,该网页利用用户当前的会话(例如,用户登录了一个网站后的cookie信息),在后台向另一个网站发起非法请求。

        CSRF攻击也成为"one click"攻击。

CSRF原理

        攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等等。

 CSRF分类

        csrf分类一般分为站内、站外两种类型。

内站

        在一些敏感的操作中(如修改密码、添加用户等),在php语言中,本来要求用户从表单提交发起POST请求传递参数给程序,但是由于使用了 $_REQUEST 等变量,程序除支持接收POST请求传递的参数外也支持接收GET请求传递的参数,这样就会为攻击者使用CSRF攻击创造条件。

外站

        有时为了提高用户的体验性,可能没有对一些操作做,做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的Web页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现GET、POST请求,当用户在会话状态下点击链接访问站外Web页面,客户端就被强迫发起请求。

CSRF漏洞检测工具

        检测工具:burp、csrfTester

        扫描器:AWVS、Appscan、等。这种误报率很高。

CSRF漏洞示例演示

自解压缩包示例

1.创建文本文件(xxx.txt)

2.鼠标放在文件上,右键添加到压缩文件

3.在弹出的窗口中勾选创建自解压格式压缩文件

4.切换到高级选项卡,单击自解压文件选项,在弹出的对话框,切换到安装选项卡

5.解压缩后运行,下方的文本框中输入网址(http://www.xxx.com)

6.单击确定,再次单击确定,到这里就制作好了自解压缩包

视频演示

创建自解压缩文件

结合靶场演示通过自解压缩文件删除用户

打开Burp抓包工具,开启代理,拦截数据包,点击删除操作,获取数据包。

 获取到下方网址 

http://172.28.25.41/pikachu/vul/overpermission/op2/op2_admin.php?id=94

在创建自解压文件时,将此网址粘贴到解压后运行文本框中。

 前提是管理员账户登录状态,双击自解压缩文件。

 单击安装看效果

Discuz论坛拖库示例

1.登录管理员账户(admin)

 2.单击管理中心按钮

3.输入管理员密码,点击提交按钮

 

4.单击 UCenter 选项卡

5.登录 UCenter用户管理中心

 

 6.左侧选择数据备份选项

7. 抓取数据包

8.构造备份链接 

http://172.28.25.41/dz/upload/uc_server/admin.php?m=db&a=operate&t=export&appid=1&backupdir=xxxx%26backupfilename%3Daaaa

 9.到这里,退出管理员账户并清除痕迹,登录普通用户

10.进入板块,单击发帖

11.发帖内容随便写,主要是将构造好的备份网址,利用网络图片的方式插入到帖子中。

 

 我们先看一下Discuz备份目录中的文件

12.退出普通用户,登录管理员用户,步骤按1到5步操作。

13.进入csrf版块

14.浏览刚才普通用户发布的贴子。

 

15.在查看帖子的同时,构造的链接被成功执行。

 16.通过浏览器直接访问备份文件,下方地址,看效果。

http://172.28.25.41/dz/upload/data/xxxx/aaaa-1.sql

 数据全部被你拿到了。

CSRF防御

服务端防御

  1. 验证HTTP Referer字段
  2. 在请求地址中添加token并验证
  3. 在HTTP头中自定义属性并验证
  4. 在服务端区严格区分好POST与GET的数据请求
  5. 使用验证码或者原密码确认方式进行

验证HTTP Referer字段

        通过HTTP Referer,当前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。Referer可以用来判断请求来源是否合法,从而防止恶意攻击。

在请求地址中添加token并验证

        在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。

在HTTP头中自定义属性并验证

        自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。

在服务端区严格区分好POST与GET的数据请求

        如在asp网站中不要使用Request来直接获取数据。同时建议不要用GET请求来执行持久性操作(数据添加、更新、删除等动作)。

使用验证码或者原密码确认方式进行

        这种方法很有效,但是用户体验就差了些。

客户端防御

        用户上网时,不要轻易点击网络论坛、聊天室、即时通讯工具或电子邮件中出现的链接或者图片;及时退出长时间不使用的已登录账户,尤其是系统管理员,应尽量在登出系统的情况下点击未知链接和图片。除此之外,用户还需要在连接互联网的计算机上安装合适的安全防护软件,并及时更新软件厂商发布的特征库,以保持安全软件对最新攻击的实时跟踪。

安全设备防御

        用户可以借助第三方的专业安全设备加强对CSRF漏洞的防御。 H3C公司的IPS产品采用了
特殊技术,支持对部分常用系统的CSRF漏洞攻击进行检测和阻断。

        CSRF攻击的本质是攻击者伪造了合法的身份,对系统进行访问。如果能够识别出访问者的伪造身份,也就能识别CSRF攻击。

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值