点击“合天智汇”关注,学习网安干货

0x00 介绍

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。主要利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用.

对于初学者而言,找漏洞最好是基于白盒审计进行,所谓白盒审计可以简单地理解为就是看着代码找漏洞,那么在正式挖洞前,我们先看看开源的DVWA给出的四种级别的CSRF的源代码。

0x01 基于dvwa的代码审计

DVWA 的代码分为四种安全级别:Low,Medium,High,Impossible。初学者可以通过比较四种级别的代码,接触到入门级别的代码审计的内容。

DWVA使用界面

跨站请求伪造(CSRF)

在左下角的DVWA Security可以调节难度系数,即low,medium,high,impossible选中后点击submit提交即可。

点击左下角view source可以看到源代码,方便进行代码审计

我们可以看到四种级别的代码分别如下所示:

Low级别代码:

分析关键代码:

可以看到:

服务器只检查参数password_new与password_conf是否相同,如果相同,就可以进行修改密码的操作,整个过程中并没有任何的防CSRF机制(cookie、会话等)

medium级别代码:

分析关键代码:

可以看到:

Medium级别的代码引入了eregi函数,Eregi函数的原理是用来检验第二个参数中是否含有第一个参数,并且Eregi不区分大小写,在此处的代码中,该函数起到的作用为检查HTTP_REFERER中是否包含SERVER_NAME,如果包含,则符合条件,继续进行接下来的操作。代码希望通过这种机制来抵御CSRF攻击。

High级别代码:

分析:

关键代码:

可以看到:

High级别的带入引入了Anti-CSRF token,每次修改密码服务器会通过generateSessionToken()随机生成一个token,只有客户端提交的token参数与服务器端一致时,服务器端才会处理客户端的响应。

Impossible代码

分析:

关键代码:

可以看到:

Impossible级别的代码在medium、high级别的基础上引入了PDO,同时需要客户端在修改密码时必须正确输入原密码才能进行修改操作。如果不知道原密码,则无法进行CSRF攻击。

0x02 挖掘漏洞

注:下文的提到的漏洞均已获授权进行测试,并交由厂商修复。

先来一枚最简单的CSRF的漏洞(很多师傅在挖洞的过程中总是会天马行空地秀很多花样姿势,在这枚漏洞中,本来漏洞本身的危害是非常小的,但是结合蠕虫,就会导致一定的危害)

这次介绍的漏洞就是大部分学校要求大一新生强制安装的XX产品

在XX产品的发送动态处抓包

可以看到post包中没有加token,也没有验证refer,可以引发CSRF

开始构造我们的POC

该poc执行会自动发送一条动态,内容为:班上的成绩已经出来了,没想到我会进步这么多。成绩表:http://dwz.cn/1u18Ys

效果如图

实际上,当不明真相的吃瓜群众点击链接时,其实就触发了我们构造的POC,此时,群众们的帐号就会不知不觉间发出同样内容的动态。

这样子,就形成了可以广泛传播的蠕虫。

总结:这个危害并不是很大,而且早已被修复,该漏洞的难度类似于DVWA中的低级别漏洞

第二枚漏洞:

某网站查看个人已发表的评论处如图:

同样,我们还是构造一个POC

Html关键代码如下:

其中,我们使用了<img>标签,地址为删除文章的链接

如果正常用户访问此页面,将会得到如下页面

图片无法访问,不过img中的地址链接还是正常执行了,此时如果用户回到个人中心,会发现,自己发表的东西已被删除

总结:这个漏洞涉及的代码层次也是属于DVWA的low级别的

再来枚类似的漏洞,通过这枚漏洞我们可以修改收货地址

此漏洞存在于某音乐播放器的PC端

我们在修改地址的部分抓包

注意到此处我们post时没哟token或referer

这就好办了,我们构造一个form表单

接下来登陆收货地址的页面

可以看到我们POC中的内容成功地被修改在了收货地址处

总结:此漏洞的强度也近似于DVWA的low级别

0x03 资源推荐

代码审计方面可以使用法师尹毅(Seay)的源代码审计系统

DVWA方面的实际操作可以登陆合天网安实验室进行练习,连接如下:

http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182015061009315500001

抓包改包看参数的神器burpsuite在合天网安实验也有相应课程,连接如下:

http://www.hetianlab.com/cour.do?w=1&c=C172.19.104.182014112610353900001

0x04 经验心得

CSRF漏洞的分类及检测挖掘方法主要有三种:

第一种:

请求直接是个GET请求,然后请求中没有token验证参数,然后还有一个固定的变量可以被控制。这种是比较常见的一种CSRF漏洞。

检测方法:

网页操作某功能,抓包后,如果发现满足上面条件,然后再去页面测试下,基本就可以确定存在不存在CSRF漏洞了。

第二种:

请求是个POST请求,post请求中没有token参数,然后请求也没有验证referer信息。这种是存在CSRF情况最多的一种。

检测方法:

网页操作某功能,抓包后,如果发现没有token等参数,然后就将referer信息设置为空,再次发包请求,如果请求成功了,就说明这里有CSRF漏洞。如果有token等参数,可以尝试将token去掉,然后再将referer也去掉,进行验证。这种CSRF漏洞的利用,是需要在自己服务器构造一个form表单的,然后将服务器form表单的URL作为CSRF攻击进行利用的,或者用js代码生成form表单,或者用ajax实现。

第三种:

请求是POST,post请求中没有token参数,但是验证了referer信息。然而可以将post请求改写为get请求,然后通过第一种情况下的那个方法利用。

检测方法:

就是先执行了第二种的验证后,发现有对CSRF进行防御。然后将post请求改写为GET请求,发现仍然可以成功执行。漏洞成因是因为服务器端接收请求参数的时候,没有严格的用$_POST 而是用的类似于 $_REQUEST这种post,get请求的参数都可以接收的写法。

以上为作者结合自身经验及参考其他师傅的想法总结出来的,欢迎大家留言讨论其他想法、姿势。

0x05 防护措施

主要可以应用以下介绍的几种方法:

限制验证cookie的到期时间:

这些cookie的合法时间越短,黑客利用你的Web应用程序的机会就越小。不过,这个时间越短,用户就越不方便。因此,你需要在安全性和方便性之间进行平衡。

执行重要业务之前,要求用户提交额外的信息:

要求用户在进行重要业务前输入口令,这可以防止黑客发动CSRF攻击(只要浏览器中没有包含口令),因为这种重要信息无法预测或轻易获得。

使用秘密的无法预测的验证符号:

当保存在用户浏览器中的cookie仅由一次会话确认时,CSRF攻击才会有效。所以在每次HTTP请求(当然攻击者无法提前知道)中都有附加的特定会话的信息,这样就可以挫败CSRF攻击。不过,如果这种应用程序存在跨站脚本漏洞,黑客就有可能访问这种验证符号。

使用定制的HTTP报头:

如果执行交易的所有请求都使用XMLHttpRequest并附加一个定制的HTTP报头,同时拒绝缺少定制报头的任何请求,就可以用XMLHttpRequest API来防御CSRF攻击。由于浏览器通常仅准许站点将定制的HTTP报头发送给相同站点,从而了防止由CSRF攻击的源站点所发起的交易。

检查访问源的报头:

在浏览者发送HTTP请求时,它通常会包含源自访问源报头的URL。理论上讲,你可以使用这些信息来阻止源自其它任何站点(而不是来自Web应用程序自身)的请求。不过,访问源报头并不总是可用的,(例如,有些单位由于私密性的缘故而将它剥离了),或者这个报头容易被欺骗,所以说,这条措施并不真正有效。

0x06 声明

本系列文章旨在普及网络安全知识,提高小伙伴的安全意识的同时介绍常见漏洞的特征、挖掘技巧等。若读者因此做出危害网络安全的行为后果自负,与合天智汇及本人无关,特此声明。

注:本文属于合天原创奖励文章,未经允许,禁止转载

往期白帽子文章回顾:

白帽子挖洞前传之洞悉常见漏洞!

白帽子挖洞—靶场及白帽子守则篇

白帽子挖洞—SQL注入篇

别忘了投稿哟!!!

合天公众号开启原创投稿啦!!!

大家有好的技术原创文章。

欢迎投稿至邮箱:edu@heetian.com

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。

有才能的你快来投稿吧!

合天网安实验室

网址 : www.hetianlab.com

电话:4006-123-731

长按图片,据说只有颜值高的人才能识别哦→

白帽子挖洞—跨站请求伪造(CSRF)篇相关推荐

  1. 跨站请求伪造(CSRF)-简述

    跨站请求伪造(CSRF)-简述 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 ...

  2. 带你刷burpsuite官方网络安全学院靶场(练兵场)之客户端漏洞——跨站请求伪造(CSRF)专题

    介绍 PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相 ...

  3. django16: csrf跨站请求伪造/CSRF相关装饰器

    CSRF 即跨站请求攻击 跨站请求伪造csrf钓鱼网站本质搭建一个跟正常网站一模一样的页面用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交唯一不同的在于收款账户人不同给用户书写for ...

  4. csrf防御 php,跨站请求伪造CSRF的防御实例(PHP版本)

    跨站请求伪造CSRF的防御:One-Time Tokens(不同的表单包含一个不同的伪随机值) 在实现One-Time Tokens时,需要注意一点:就是"并行会话的兼容".如果用 ...

  5. 浅谈跨站请求伪造(CSRF)

    浅谈跨站请求伪造(CSRF)   这里简单的记录一下CSRF漏洞~~ 什么是CSRF?   CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可 ...

  6. Nginx配置valid_referer解决跨站请求伪造(CSRF)

    Nginx配置valid_referer解决跨站请求伪造(CSRF) 文章目录 Nginx配置valid_referer解决跨站请求伪造(CSRF) 漏洞说明 漏洞描述 危害等级 修复建议 漏洞复现 ...

  7. 跨站请求伪造CSRF防护方法

    CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通常缩写为CSRF或者X ...

  8. 跨站请求伪造(CSRF)+ 跨站脚本攻击(XSS)

    一.CSRF 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 X ...

  9. 跨站请求伪造——CSRF

    目录 csrf与xss的区别 CSRF的介绍 利用过程 实战 靶场下载 过程 一.A用户登录浏览器执行动作 二.B用户抓包制作csrf请求页面 三.本地保存 四.制作钓鱼网站 csrf 防御 csrf ...

最新文章

  1. 为什么不能够用unsigned 修饰 float和double
  2. Linux系统运行级与启动机制剖析
  3. STM32启动文件代码解析
  4. WinForm - 两个窗体之间的方法调用
  5. jfinal mysql 配置文件_JFinal 如何将操作日志存入到数据库中
  6. unique去除重复的向量_R语言向量与因子
  7. mysql 事务sql_mysql存储过程之事务篇
  8. 莫比乌斯反演习题总结
  9. Safari 最新技术预览版来啦,为开发者带来了哪些新功能?
  10. html用ajax做三级联动,怎样使用JS+AJAX做出三级联动
  11. 软件包管理 之 RPM 基础 《RPM 的介绍和应用》
  12. 解决问题 1474 个,Flink 1.11 究竟有哪些易用性上的改善?
  13. 亚马逊云科技携海信集团打造全球服务实践案例标杆
  14. 开源项目_springboot的答题系统+spark大数据实时分析
  15. Python while循环及用法详解
  16. 2017——小米——句子反转
  17. scikit-learn回归类库使用
  18. 鲸探发布点评:8月19日发售《小窗白云与凿山骨》数字藏品
  19. H5+Android混合开发电视APP
  20. hdu 5312 打表加特判

热门文章

  1. 博图V15.1 如何启用仿真
  2. snmp v3 参数_snmp++开发snmpv3注意事项
  3. 【SVF Cloud】「SVF Cloud Designerで開く」をクリックしても何も動作しません。
  4. 嵌入式知识-ARM裸机-学习笔记(8):SoC定时器与看门狗(WDT)
  5. 批处理实现复杂密码(包含大小写字母数字符号)
  6. 又是下棋篇——井字棋( •̀ ω •́ )✧具体实现过程
  7. linux解压rz命令用法,linux压缩和解压缩命令、上传下载,rz和sz
  8. PDF旋转:一分钟解决PDF页面倒置的问题
  9. Trip.io:区块链在旅行住宿预订领域落地
  10. 【五一赠书】盘点云计算领域不可不读的 9 本书