原文地址:Advanced web security topics php
(最後更新時間:2018年2月28日)這篇文章討論了我到目前爲止遇到的網絡安全問題 。這是一項正在進行的工做,我將不斷更新。 帖子標題包括「高級」,由於這裏討論的主題涉及聰明的,不平凡的黑客。下面咱們直接進入正題。css
摘要:攻擊者將圖像上傳到包含HTML和Javascript的受信任網站,但欺騙網站將圖像做爲HTML文檔提供。
攻擊步驟(參考下圖):html
摘要:使用CSS3功能的組合將信息泄漏到第三方服務器。 須要用戶提供的CSS樣式但不須要Javascript。
攻擊步驟(參考下圖):android
:: before
或
:: after
僞元素在DOM中建立隱藏信息(例如連接參數,隱藏輸入字段)。這將呈現一般不可見的字符串。有關詳細信息,我建議閱讀參考文獻[4],[5]。此步驟可能會屢次複製要泄漏的文本,由於它須要使用不一樣的字體進行渲染(請參閱步驟2瞭解緣由)。
摘要:一個邪惡的網站經過欺騙瀏覽器將可信網頁加載爲CSS來竊取用戶登陸的可信網頁中的內容。要求攻擊者能夠向受信任的網站注入一些文本。
這個有點舊,由於寬鬆的CSS 解析 [6]以及容許Javascript查看CSS聲明這一事實。我不肯定這是什麼程度的反擊瀏覽器,我在互聯網上閱讀有關這方面的相互矛盾的陳述。該漏洞須要:
1)受害者Victor
2)Victor登陸的網站Webmail,其中包含一些私人內容。只要用戶經過會話cookie進行身份驗證並登陸到Webmail,就沒必要在選項卡或窗口中打開Webmail。
3)攻擊者控制的網站example.com
4)Victor訪問example.com
5)攻擊者必須可以將一些文本注入Webmail(例如,經過向Victor發送一些他能夠在他的Webmail中閱讀的電子郵件)
該漏洞利用以下:
1)Victor訪問咱們的惡意網站example.com
2)example.com包含一個連接HTML元素,它試圖加載外部CSS樣式表。只是,它不是引用有效的樣式表,而是在Webmail上引用Victor的收件箱頁面。這將致使瀏覽器將論壇HTML加載爲CSS並解析它。到目前爲止傷害不大。
3)攻擊者可以在Webmail中注入一些文本,在一些敏感文本以前啓動CSS聲明,並在敏感文本以後結束CSS聲明。一個例子是,若是咱們早日向Victor發送一條消息,主題爲:};。emailList {以及稍後與主題的消息};。如今,咱們發送的第一封和第二封電子郵件之間的收件箱概述中的全部內容均可以解釋爲CSS聲明。
git
摘要:在服務器上呈現很差的用戶輸入的不良內容致使在瀏覽器中的Angular應用程序中執行代碼
注入攻擊涉及惡意用戶提交未正確清理的數據,而後由系統的不一樣部分解釋。有HTML注入攻擊,SQL注入攻擊和Javascript注入攻擊。一個至關新的風格針對瀏覽器模板框架,如AngularJS [9]。
步驟:
1)惡意用戶提交Angular將解釋的一些文本T,例如{{警報(「你好」)}}
2)服務器在包含Angular代碼的頁面上將T呈現爲HTML。因爲沒有像T中那樣的HTML / Javascript標籤,所以大多數服務器端都不會清理對象T.
3)瀏覽器呈現包含T的新HTML頁面。若是頁面運行Angular,則它將獲取T並將其解釋爲Javascript。
Gareth Heyes詳細討論了 Angular 注入 [7]。
若是您想知道爲何任何理智的Web應用程序將執行用戶提交的內容的服務器端呈現(步驟2):針對功能減小的客戶端的SEO或回退策略是常見的用例。angularjs
這種類型的攻擊也稱爲HTTP協議嵌套或 HTTP request smuggling [10]利用了參與設備的HTTP協議實現中的弱點。
該論文的做者討論了針對同名服務器軟件的幾個真實示例,這些示例致使了諸如cache poisoning[11]或憑證劫持等漏洞。這些漏洞主要涉及一系列服務器軟件,如反向HTTP代理和Web服務器。一個例子:
緩存中毒:惡意客戶端將嵌套請求發送到反向Web代理,後面有Web服務器。代理以其認爲請求URL U1的方式解析錯誤請求,而Web服務器以不一樣的方式解析請求以及請求URL U2的內容。而後,Web服務器返回U2的內容,但代理將該內容存儲在URL U1下。所以,對U1的任何進一步合法請求將服務於U2的內容。該漏洞利用工做過於簡單,以下所示:github
POST U1
Content-Length: 0
Content-Length: 123
GET U2
….web
因爲Content-Length語句存在衝突,Web代理可能會認爲POST內容與其後面的Web服務器不一樣,所以Web服務器可能會爲U2服務,但代理可能會將U2的內容存儲在U1下。
做者討論了更多的漏洞;不管如何都值得一讀!shell
惡意網頁能夠在舊版本的流行瀏覽器中找到用戶訪問過的網站,幸運的是,這彷佛 不在可能[12]。 「漏洞利用」簡單而有效:惡意網頁生成一個感興趣的連接列表。若是用戶訪問過去的任何一個,瀏覽器將以不一樣的方式呈現它們。 網頁能夠經過腳本查詢該樣式並將結果發送出去。 瀏覽器填充了這個漏洞,其中包含向腳本報告僞值和限制樣式量的組合(例如,您沒法更改訪問連接的任何維度,所以查詢容器大小將不起做用)。編程
[2016年4月16日]
從這裏[13]:假設一個網站在一個難以想象的網址下公開了一些內容,例如: 經過包含像Google+這樣的UUID,能夠經過私人連接分享私人內容,例如example.com/sdflo234ngnofgo23onigu。 只有知道該URL的人才能訪問該頁面,該訪問應該是安全的,由於「sdflo234ngnofgo23onigu」很是難以猜想。 攻擊者沒法檢查致使example.com的URL的全部可能的字符組合,而且有一種理解和暗示沒有人會在網絡上發佈該URL,不然它將被搜索引擎索引而且多是 發現那裏。
可是,若是您經過URL縮短器傳遞URL,搜索空間將大大減小:example.com/sdflo234ngnofgo23onigu將成爲ex.co/BlD33_。 攻擊者能夠輕鬆掃描縮短服務上的少得多的URL,並發現提交給該縮短器的(私有)URL。
我沒法想出一個更簡潔地描述問題的更好的標題:服務器以保證其神聖性的方式發送編碼/保護/簽名的數據,但容許客戶端將所述數據發送回服務器或其餘服務器具備不一樣的,不太安全的協議。
這個想法來自最近在多個JSON Web令牌實現中發現的 安全漏洞 [14]。 JSON Web令牌實現了驗證數據真實性和完整性的數字簽名,所以當客戶端從服務A獲取數據並將其傳遞給服務B時,該服務B能夠基於JSON Web令牌驗證數據的完整性,而無需直接通訊服務A.在此漏洞中,客戶端能夠請求協議實現,繞過每一個設計的驗證。這裏學到的經驗是:參與通訊的各方將安全方面委派給底層實現應該驗證明現是否有效。
不經驗證安全假設的問題常常出現,例如:在2014年,CERT發現有幾個Android應用程序沒有驗證服務器證書[15]。
[2016年8月31日]
您知道帶有target =「_ blank」的HTML錨連接會在新選項卡或窗口中打開連接頁面。 但你知道window.opener [17] Javascript屬性嗎? 新窗口能夠經過該屬性訪問舊窗口; 值得慶幸的是,window.opener的大多數(子)屬性都不能被新窗口讀取,但能夠更改window.opener.location屬性,這使得它能夠用於網絡釣魚攻擊:您點擊了網絡郵件程序中的連接,它會打開 一個新頁面,在後臺只是重定向了一個窗口,該窗口將webmailer打開到相似域上相同的登陸頁面,告訴您會話已過時並要求您再次登陸。 討論了創始人博客[16]。 在支持的狀況下,解決方案是添加rel =「noopener」標記或根本不使用目標。
[2016年10月24日]
Rowhammer [18]攻擊在硬件級別利用當前DRAM實現中的弱點,其中特殊構造的寫入模式可能干擾不相關的存儲器位置的內容。 Rowhammer.js [19],一個Javascript實現,最近浮出水面(不是這樣),它將Rowhammer移植到瀏覽器中。 雖然我認爲Rowhammer是硬件漏洞,但我仍然提到它的新方法。
[2017年9月1日]
那個真的讓我徹底禁用了自動填充功能。 攻擊基於瀏覽器在識別名稱/值組合時主動填寫表單字段。 演示真的說明了一切。 該漏洞利用以下:
提供了一個HTML表單,要求提供一些基本的詳細信息,如姓名和電子郵件地址。 該表格還包含幾個隱藏的字段,我將在稍後討論。 許多網站要求提供此基本信息,並使用名爲「name」和「email」或相似名稱的表單字段。 當你開始填寫這些時,瀏覽器會建議一個自動完成,固然,你會採起。 可是有一個問題:經過接受建議值,瀏覽器將填寫任何其餘隱藏的字段,它能夠經過名稱記住...而且有不少:「creditcardnumber」,「address」,「phone」等。經過提交表單,你 不只要提交您輸入的姓名和電子郵件,還要提供其能夠匹配的全部其餘字段。
[2018年2月28日]
一個至關具體的SAML漏洞利用[21]能夠推廣到XML解析。 基本思想是XML被用做數據容器格式,但解析XML並處理數據的程序一般不瞭解XML格式的細微之處,這可能致使模糊。 焦點攻擊會影響XML註釋的模糊性:
<name>John<!--comment-->Doe</name>
複製代碼
從概念上講,「name」元素的文本值是什麼? 從w3c的角度來看,「name」元素有三個子元素:一個值爲「John」的文本節點,一個值爲「comment」的註釋節點和另外一個值爲「Doe」的文本節點。
許多編程語言的SDK和框架爲獲取XML節點文本值提供了便利功能。 根據其實現,可能返回值「John Doe」,「John Doe」,「John」或「Doe」。 大多數程序可能會使用這樣的便利功能,可是現代系統由幾個數據處理層(HTTP,WAF,驗證框架,Web應用程序框架)組成,每一個這樣的層可能使用不一樣的「便利」實現。 此次攻擊讓我想起了咱們以前看到的一些「HTTP注入」。
![]() |
[更新2018.05.10] Google YOLO 漏洞利用[22]屬於對用戶社交網絡賬戶的普遍類型的點擊劫持攻擊。 您可能知道「使用Facebook登陸」功能,該功能容許網站經過其社交網絡賬戶識別用戶。 前提是用戶驗證瀏覽器地址欄中顯示的URL,檢查網站請求的訪問類型,並能夠授予(或不授予)該訪問權限。 |
---|---|
這個漏洞:
[1] An XSS on Facebook via PNGs & Wonky Content Types
fin1te.net/articles/xs…
[2] Encoding web shells in PNG IDAT chunks
www.idontplaydarts.com/2012/06/enc…
[3] Scriptless attacks
www.nds.rub.de/media/emma/…
[4] CSS attribute value selector
www.w3schools.com/cssref/sel_…
[5] CSS content attribute
www.w3schools.com/cssref/pr_g…
[6] CSS data theft
www.owlfolio.org/htmletc/css…
[7] XSS without HTML: Client-Side Template Injection with AngularJS
blog.portswigger.net/2016/01/xss…
[8] cssText Web API MDN
developer.mozilla.org/en-US/docs/…
[9] AngularJS
angularjs.org/
[10] HTTP Request Smuggling
www.cgisecurity.com/lib/HTTP-Re…
[11] Cache poisoning
www.owasp.org/index.php/C…
[12] Privacy and the :visited selector
developer.mozilla.org/en-US/docs/…
[13] Gone In Six Characters: Short URLs Considered Harmful for Cloud Services
freedom-to-tinker.com/blog/vitaly…
[14] Critical vulnerabilities in JSON Web Token libraries
auth0.com/blog/critic…
[15] Cert tests Android apps
securityaffairs.co/wordpress/2…
[16] The target=_blank attack
medium.com/@jitbit/tar…
[17] window.opener
developer.mozilla.org/en/docs/Web…
[18] Rowhammer
googleprojectzero.blogspot.de/2015/03/exp…
[19] Rowhammer.js
arxiv.org/abs/1507.06…
[20] Browser autofill phishing
github.com/anttiviljam…
[21] A breakdown of the new SAML authentication bypass vulnerability
developer.okta.com/blog/2018/0…
[22] Google YOLO
blog.innerht.ml/google-yolo…