用户
搜索

该用户从未签到

i春秋-脚本小子

Rank: 2

1

主题

11

帖子

82

魔法币
收听
0
粉丝
0
注册时间
2015-12-5
发表于 2020-4-26 15:29:45 21668
本帖最后由 whoami1990 于 2020-4-30 10:34 编辑

前端安全之跨域窃取敏感信息
SOP(同源策略)是浏览器的一个安全基石,规定了不同域的客户端脚本在没有明确授权的情况下不能读写对方的资源。假设没有同源策略限制,当受害者打开了一个合法网站,同个浏览器又打开了一个攻击者精心构造的网站,此时攻击者的网站能够随意的读取受害者浏览器所访问的合法网站的当前页面的敏感信息。
在某些场景下,需要进行跨域共享敏感信息,目前有几种跨域技术可以实现此需求:比如cors和jsonp,postMessage、flash和windows.name也能跨域数据传递,但使用的频率要低于jsonp和cors。当开发者对这几种技术应用不恰当的时候,便会产生相应的安全问题,其中最常见的就是跨域读取受害者所登陆合法网站上的敏感信息。所谓的敏感信息,主要包括以下几类:个人的账号密码 姓名 电话 身份证号码 订单号 敏感文件名。
假设某人访问了合法的网站a的个人页面接口 http://a.com/personal,该接口的返回了用户的姓名电话等敏感信息,同时他又用同个浏览器打开了b网站,本paper主要探讨的是如何通过b网站窃取到http://a.com/personal页面的数据。
1.     CORS
CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。通过该标准,可以允许浏览器向跨源服务器发出 XMLHttpRequest 请求,从而克服了AJAX只能同源使用的限制,进而读取跨域的资源。假设用户登陆一个含有CORS配置网站vuln.com,同时又访问了攻击者提供的一个链接evil.com。evil.com的网站向vuln.com这个网站发起请求获取敏感数据,浏览器能否接收信息取决于vuln.com的配置。如果vuln.com配置了Access-Control-Allow-Origin头且为预期,那么允许接收,否则浏览器会因为同源策略而不接收。
CORS的标准定义是通过设置http头部字段,让客户端有资格跨域访问资源。通过服务器的验证和授权之后,浏览器有责任支持这些http头部字段并且确保能够正确的施加限制。
主要的头部字段包含:
1.“Access-Control-Allow-Origin” 指定允许跨域的域名
2. Access-Control-Allow-Credentials: true, 表示是否允许发送Cookie,true即发送cookie
当我们找到服务器上的一些敏感接口时候,便可以利用burp 在请求头里面加入Origin字段,然后将其值设为null、attacker.com等,然后看服务器的返回头里面设定的Access-Control-Allow-Origin和Access-Control-Allow-Credentials字段信息,当其配置错误,攻击者便可以利用cors技术 窃取到该页面的敏感信息。
如下服务器的personal.php用来返回用户名和密码信息,但其错误的进行了cors,攻击者可以自己VPS上的attacker.html页面,窃取到受害者的敏感信息。
Personal.php
q.png
Attacker.html
w.png
当攻击者诱使受害者访问自己VPS上的attacker.html页面,该页面便利用personal.php错误的配置,成功窃取了受害者的敏感数据。
e.png
file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image003.png
2.JSONP的跨域
JSONP也可以进行跨域读取数据,但只支持get请求方式。JSONP劫持,可以理解为一种读类型的CSRF,攻击者可以利用目标站点存在JSONP劫持漏洞的接口,将用户在该网站上的敏感数据发送到攻击者的服务器。
服务器上存在一个如下订单页面order.php,用于给其他服务器上调用订单信息,但由于没做token和refer等验证,导致任意其他钓鱼页面attacker.html也可以调用该接口,当受害者点击攻击者精心构造的钓鱼页面,便可以窃取到受害者的敏感订单信息。
   Order.php
r.png
Acctacker.html
t.png
当受害者访问到攻击者VPS上的acctacker.html页面,便会窃取到敏感的订单信息。file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image005.png
y.png
file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image006.png3. postMessage
postMessage允许每一个Window(包括当前窗口、弹出窗口、iframe等)对象往其他的窗口发送文本消息,从而实现跨窗口消息传递,且这个功能不受同源策略影响。postMessage语法如下:otherWindow.postMessage(message, targetOrigin, [transfer]);
分别代表如下的意思:
otherWindow:其他窗口的一个引用,比如iframe的contentWindow属性、执行window.open返回的窗口对象。
message:将要发送到其他 window的数据。
targetOrigin:通过窗口的origin属性来指定哪些窗口能接收到消息事件,其值可以是字符串”*”(表示无限制)或者一个URI。
transfer :是一串和message 同时传递的 Transferable 对象。
       postMessage技术的安全隐患主要是:(1)伪造发送端导致的XSS (2)伪造接收端导致的敏感信息窃取。
(1)   伪造发送端
victim.html
u.png
attacker.htmlfile:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image007.png
i.png
如上的一个受害者页面victim.html,功能是用来接受其他服务器传递过来的消息,由于没有做任何的校验和过滤,导致任何攻击者都可以给他传递收据。假设攻击者在自己的VPS,建立一个攻击者页面attacker.html,用来向受害者的服务器发送恶意数据,便可以在受害者页面执行任意js代码。
当攻击者诱使正常的用户访问到attacker.html页面时,弹出如下的页面:file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image008.png
o.png
(2)伪造接收端file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image009.png
victim1.html
p.png
acctacker1.html
a.png
file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image011.png
以上受害者页面victim1.html 原本是想把敏感数据发送到特定的页面,由于没有对postMessage的接收端进行任何校验,所以攻击者可以建立一个页面attacker1.html监听一个事件用来接受受害者传递过来的数据.
       当攻击者诱使受害者访问acctacker1.html页面,便会窃取到受害者的敏感信息。
s.png file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image012.png
4.flash 跨域
利用flash 跨域窃取敏感数据的前提必须是服务器web根目录必须存在一个crossdomain.xml配置文件,并且该配置文件进行了不安全的配置。
<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>
位于attacker.com域中的SWF文件要访问victim.com的文件时,SWF首先会检查b.com服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且里边错误的设置了通配符,那么攻击者可以通过让受害者访问自己精心构造的页面,通过里面内嵌的swf文件实现对受害者页面内的敏感数据窃取,但需要受害者浏览器可以正常执行swf文件。
5.windows.name
window.name这个属性不是一个简单的全局属性,只要在一个window下,无论url怎么变化,只要设置好了window.name,那么后续就一直都不会改变,在iframe中,即使url在变化,iframe中的window.name也是一个固定的值,利用这个特点可以实现跨域窃取敏感数据。
       如下页面victim3.html将受害者的敏感信息传递给了window.name,
victim3.html
d.png
攻击者在自己的vps上创建如下的页面attacker3.html,利用window.name的特点,便可以成功窃取到敏感的数据。file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image013.png
attacker3.html
f.png
Proxy.htmlfile:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image014.png
g.png
当攻击者诱使受害者访问到attacker3.html,便跨域窃取的受害者victim3.html上的敏感数据。file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image015.png
h.png file:////Users/malong/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image016.png
参考文章:

e.png
e.png
赞一个
使用道具 举报 回复
太强了
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册