CSRF入门解读

Csrf入门介绍以及dvwa靶场csrf解读

1 什么是CSRF?

Csrf(Cross-site request forgery)跨站请求伪造。首先我们来介绍一下什么叫CSRF。 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

我们举个例子深入理解:

正常情况下

某用户青花在网站上向银行发起存款请求,

url

假设为

xxx.xx.php?user=qinghua&money=1000

建立

cookie

,并且确认身份就是青花。

1562729937823

之后黑客hack发现url可以控制转账的用户,然后恶意的控制url
xxx.xx.php?user=hack&money=1000,之后构造页面,等待别人点击上钩。

然后某一天,青花恰好在刚刚存完钱之后,浏览网站的时候有个美女图片,青花一激动,想看看美女长什么样,然后点击,这恰好是黑客hack构造的恶意url,之后就中招了。这时候银行那边的服务器会认为这就是qinghua,但是其实这个请求是黑客借青花之手发起的,从而就导致了青花的钱无声无息的转入黑客那里。

1562729994600

看完了上述的例子,想必大家对csrf有一个基础的理解,我们来简述一下攻击流程。

  1. 用户a访问网站,在与该网站建立请求之后,建立session,并且存储服务器返回的cookie。

  2. 用户a访问玩用户之后并没有退出网站,没有断开连接。之后访问其他网站。

  3. 黑客构造了恶意网站诱导用户a点击,通过用户a的浏览器执行,这时候服务器会执行该恶意请求,其实这个请求并不是a发出的,而是黑客发出的,他只是借用了用户a的身份,从而在a的权利下进行操作。

在理解完csrf的简单介绍后,我们来用dvwa靶场的环境来简单的搞一搞csrf,以便加深对csrf的理解。

2.DVWA靶场简单练习

2.1LOW级别

  • 1562730067860

  • 1562730081750

我们看url,这里被修改掉了。当用户登录的时候,点击黑客构造的恶意链接,就会无形中修改我们的密码,我们举个例子,当然在这个页面这种直接暴露Url的连接成功率还是比较低的。那么怎么利用呢,我们看下面。

首先我们构造一个恶意的页面

1562730110765

当用户点击查看这个连接就会跳转到这个页面

1562730142208

这个是代码。当我们在登录dvwa的时候访问该页面,就会修改我们dvwa的密码为qinghua.

1562730168844

我们现在假设我们点击这个查看美女图片

1562730192769

虽然这里显示了美女图片,但是在已经暗中执行了恶意代码。

  • 1562730213935

我们这时候在用password这个密码就上不去了。

我们看一下数据库

1562730239833

发现密码居然被改为了qinghua。

怎么样?这我们就模拟了一次csrf的简单攻击过程。

(ps:这里上面说到利用方式如果暴露url的话,会很容易被发现,于是我这里就用ifarm框架来隐藏我们对该url进行访问,叫用户不知不觉,但是在网上看到某些大佬们也用缩短url的方式诱导用户点击,其实类似的骚操作也不少,我们也可以对url进行加密等等,当然啦,只要大家发挥想象力就可以搞出好多骚操作,其实宗旨就是把url隐藏,使其无声无息的被访问。)

本来说着dvwa的靶场,一激动觉得这个利用方式不能叫大家感受深刻,所以就花了一些时间搞了个实例来说明一下,我们继续返回正题。继续说我们的dvwa靶场。

2.2 medium级别

  • 1562730293908

我们先来分析代码,在该段代码中上来先用if语句判断,其中的条件是判断用户主机名以及referer是否一致来确定是否执行以下代码。其实就是判断来源是否一致。来判断,但是这个其实也形同虚设。我们接下来来解读一下。

这里用到了stripos(a,b)这个函数,这个函数的功能是,判断b是否出现在a中,出现就返回ture不出现就返回false.这里我们就有绕过思路了,我们通过修改Host使其中的内容处于referer中就行了,因为一般在进行csrf攻击的时候比如说点击美女图片,都是在被攻击的浏览器发起请求的,但是访问的referer确实在黑客诱导的页面,所以host跟refer肯定会有所差异。那么我们可以这样想,我们只要交host在referer内容之中把被攻击者的ip就能够绕过此类过滤。

我们举个实例来说明:

还是我们上面用到的样本。

我们先抓一个包。来说明一下。

PS:这里我们用到了一个云虚拟主机,来存储我们攻击者的样本

  • 1562730332031

当受害人点击美女图片之后就会造成攻击的发生。

我们先抓个包来看一下。

1562730347859

这个是不同的即使点击了也不会修改密码,因为前面我们过滤了。

1562730375242

我们放包发现过滤了。修改密码是失败的。

我们前面讨论过,要绕过那就要使得host处于referer之中才会是条件为真,那么我们只要构造referer使得host处于其中就ok了。

那么我们把攻击者服务器哪里的恶意文件的名字改为受害者的ip地址,也就是Host的值,我们就可以绕过了。

1562730396427

当我们修改之后我们就发现,这时候host肯定能够在referer中匹配到。

我们在放包

1562730420532

密码被成功修改。

我们在查看数据库。

1562730441755

密码确实被修改了。

2.3high级别

1562730475822

在high级别的代码里面,我们发现这里设置了token的验证,什么是token的,我们可以理解为一个令牌。就是当我们与服务器建立连接之后,服务器会给我们一个token,每次我们连接都需要验证token,如果token不通过是无法访问的,就比如这里,如果token不通过,黑客就无法验证token所以即使受害者访问的危险的连接,也无法构成csrf,那么这个时候黑客就要想办法获得token。

那么我们继续来模仿一下攻击过程吧。

青花还没有改掉好色的毛病,有一天又点开了美女图片。

这时候黑客故意利用一个xss来获取青花的cookie,进而获取token。

这只是个故事,具体利用不详细赘述。在dvwa靶场中,我们利用xss漏洞来获取cookie。

1562730499796

我们获取cookie之后,就可以去拿受害者的token了。我们随便输入一个改密啥的,然后抓包,这个就相当于我们是黑客,我们在操纵黑客的账户,利用受害者的cookie获得他的token.

1562730516272

1562730528591

之后我们修改密码字段,发现将包发送过去,密码被修改了。

  • 1562730544383

2.4Impossible级别

1562730584833

在impossible级别中,我们发现要修改密码还需要旧密码,这个安全型是比较高的。也就是说,即使我们点击了黑客的恶意链接,在不知道密码的情况下,这个请求也是无法建立的,相对于token来说,这个安全性还是比较高的。

3.小结

​ 在我们此次认识csrf的过程中,我们知道了一些防御机制,比如说我们可以验证referer,token或者说要在此输入密码,总的来说csrf的危害还是比较大的,在防御csrf的过程中我们要严格的划定cookie的域防止全站通用cookie,以免发生high那种危害,其次我们应该对referer进行严格的过滤,同样在url我们应该尽量少的暴露我们的信息,最好用post。