DVWA-CSRF模块 包括代码审计

从攻击者、受害者角度描述CSRF

  1. 攻击者角度:

攻击者通过一些手段欺骗用户取访问一个自己曾经认证过的网站并且运行一些操作,通常是支付的操作。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。攻击者不能窃取用户的任何信息,但是攻击者能欺骗用户浏览器,让其以用户的名义进行操作。

  1. 受害者角度:

受害者访问一个信任的网站A,并且在本地生成Cookie,在受害者不登出该网站或者Cookie没有过期时,受害者访问危险网站B时,就会受到攻击者的CSRF的攻击。

Low等级

查看源代码如图2所示,发现并没有任何对CSRF的预防语句,只是对输入的两次密码进行校对而已,因此预测该页面存在CSRF漏洞。

img

图2

正常步骤的更改密码,具体如图2.1、图2.2所示。

img

图2.1

img

图2.2

对更改密码过程进行抓包,抓包的结果如图2.3所示。

img

图2.3

根据图2.2所抓包分析得到的输入框和按钮的name来伪造一个html页面,html页面的伪造如图2.3所示。

img

为了诱骗受害者点击该html文件,需要起一个具有吸引力的名字,如图2.4所示。

img

图2.4

只有在用户浏览器还有DVWA页面或者Cookie还没清除时打开该html文件时才有效,否则就会跳转到登陆页面,如图2.5所示,这是因为DVWA是需要登录才能进行访问的,而html文件里面的url是CSRF漏洞模块的页面,因此DVWA发现没有登陆就直接输入CSRF模块时会直接跳转到登录页面。img

图2.5

受害者登录DVWA,且点击该html时并且点击点击查看更多美图的按钮时,受害者发现密码发生了更改,html的运行如图2.6、图2.7所示。

img

图2.6

img

图2.7

注销后,进入登录页面查看是否确实更改,如图2.8、2.9,发现登录成功,说明CSRF攻击成功。

img

图2.8

img

图2.9

Medium等级

查看源代码如图2.10所示,可以发现Medium等级是在Low等级的基础上增加了对Referer的值进行校验,因此如果直接在任何一个非DVWA的页面输入攻击者的链接时,并无法攻击成功;只有在一个DVWA页面内打开攻击者的链接时才能攻击成功,或者通过抓包更改Referer的值即可,Referer说明当前的页面是有哪个页面跳转过来的,如果没有值说明当前页面并不是从其他页面跳转过来的:

img

图2.10

提交一次正常的数据,并且抓包,具体如图2.11、2.12所示:

img

图2.11

img

图2.12

将上图中的Referer的值进行复制,并且对攻击者的html页面进行抓包,往包中添加上图的Referer的值,并且点击发送,可以发现攻击成功,具体如图2.13-2.15所示。

img

图2.13

img

图2.14

img

图2.15

因此要攻击受害者时,必须要在网站的服务器内上传攻击者的攻击html,诱导用户在新的空白页面打开该链接,即可完成攻击。具体如图2.16-2.18所示。

img

图2.16

img

图2.17

img

图2.18

High等级

查看源代码如图3.1,可以发现High等级是在Low的基础上增加了token的校验,因为每一次用户修改密码时,得到的token的值都是不一样的,所以尝试CSRF的实现十分困难。

img

图3.1

首先通过正常的一次更改密码抓包,具体如图3.2所示,可以发现token的值是直接放在URL中的,因此可以使用和暴力破解中High难度相似的办法进行爆破,但是这里就不使用暴力破解的方式了,而是使用获取用户Token的方式来进行攻击。

img

图3.2

受害者登录任意的一个DVWA页面,如图3.3所示

img

图3.3

攻击者伪造的html攻击页面,如图3.4所示

img

图3.4

是已经登录过DVWA的浏览器那里,打开新标签页,并且把攻击者的html软件位置放上即可,具体运行如图3.5-3.7所示,发现High等级的CSRF攻击完成。

img

图3.5

img

图3.6

img

图3.7

Impossible等级的机制以及修复、防御CSRF的方法

查看Impossible等级,并对源代码进行分析,如图4.1所示。

img

可以发现Impossible的验证方法有检查token值,虽然检验token的值可以使用暴力破解等方法来进行获取,但是相比于没有检验token值的安全度高了不少;改密码前需要输入旧密码,因为旧密码攻击者是不知道的,因此使用旧密码来检验身份可以很有效地防御攻击者,虽然我在网上搜索了很多如何破解impossible等级,但是我并没有找到impossible,但是天底下没有绝对安全,我还是觉得使用旧密码的方式并无法来保证绝对安全;使用PDO预处理的方式处理数据,就我所学习的php知识认为,PDO是php中的严格最安全的mysql处理语句。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值