跨站的藝術-XSS入門與介紹
什麼是XSS?
XSS全稱跨站腳本(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故縮寫為XSS,比較合適的方式應該叫做跨站腳本攻擊。
跨站腳本攻擊是一種常見的web安全漏洞,它主要是指攻擊者可以在頁面中插入惡意腳本代碼,當受害者訪問這些頁面時,瀏覽器會解析並執行這些惡意代碼,從而達到竊取用戶身份/釣魚/傳播惡意代碼等行為。
上圖就是一個典型的存儲型XSS。
什麼是Payload?
Payload是一個專業術語,中文翻譯過來是是有效荷載,可能經常會從搞安全的口裡說出,那麼什麼是Payload?什麼又是Exp?什麼又是PoC?
先介紹PoC,PoC的全稱是Proof of Concept,意思為概念驗證,通俗的可以理解為漏洞驗證腳本;而Exp是Exploit的簡寫,意思為漏洞利用,兩者的區別即使一個僅限於驗證,而一個是攻擊利用。那麼Payload呢?Payload是組成PoC和Exp的必要部分,也可以理解為驗證代碼。
打個比喻,假如某個窗戶存在問題,任何鑰匙都可以開,那麼這個比喻為一個漏洞,那麼用鑰匙打開窗戶,看下是否可以打開,這是PoC做的事,而打開窗戶後進去偷東西,這是Exp做的事,而那把鑰匙就可以理解為Payload,Payload不區分是否攻擊利用。
比如剛才上圖中的那個XSS漏洞的Payload 如下:
XSS是怎麼產生的?
經常也會聽到一個詞,注入點,或者說專業術語是向量,指的是黑客可控內容的提交的位置,比如下圖中,搜索框,黑客可以控制輸入的內容,然後進行提交,那麼實際在測試漏洞的時候,就可以把注入點的內容替換為Payload進行驗證。
而XSS或者說Web漏洞是怎麼產生的?對非預期輸入的信任!
安全的本質是信任的問題,在上圖中,搜索框的設置對於開發者來說,理論上應該輸入的是正常的字元串,進行搜索,這是一種對輸入的信任,並且這種信任對於開發者來說是有預期的,在他的預期里輸入是正常的字元串,而漏洞的產生就在於出現了非預期的情況,開發者沒有針對性的做處理。
這是以前挖的一個聯想商城的XSS。
XSS分類
接下來來看看不同的XSS分類。
反射型(非持久型)
存儲型(持久型)
DOM型
這是最常見的三種分類:
存儲型
存儲型XSS也叫持久型XSS,存儲的意思就是Payload是有經過存儲的,當一個頁面存在存儲型XSS的時候,XSS注入成功後,那麼每次訪問該頁面都將觸發XSS,典型的例子是:
如留言板
1、插入留言=>內容存儲到資料庫
2、查看留言=>內容從資料庫提取出來
3、內容在頁面顯示
如果這裡存在XSS,Payload可以通過留言內容提交,然後顯示在頁面的時候可以生效,那麼就是典型的存儲型XSS。
反射型
反射型XSS也叫非持久型XSS,最常見的是Payload是構造在網址的某個GET參數的值里。
比如這樣的:
與存儲型相反,反射型XSS的是通過提交內容,然後不經過資料庫,直接反射回顯在頁面上,比如說以下代碼就存在反射想的XSS,通過參數get的值提交Payload:
這是之前微信朋友圈的一個活動,一個很常見的形式,通過微信點擊進入,授權登錄,自動獲取微信昵稱,然後生成邀請函,而實際上讀取的昵稱是構造在網址上的,由於沒有過濾,於是存在反射型XSS,點擊的話就會跳轉我的博客。
DOM 型
其實DOM型也屬於反射型的一種,不過比較特殊,所以一般也當做一種單獨類型。
比如之前挖過的一個wechat.com的DOM型XSS,最終構造完網址地址是這樣的:
而其背後代碼生效大概是這樣的:
其他類型XSS
上面是大家經常聽到的XSS類型,其實細分下來還有其他的XSS類型:
mXSS 突變型XSS
UXSS 通用型XSS
Flash XSS
UTF-7 XSS
MHTML XSS
CSS XSS
VBScript XSS
其中UTF-7、MHTML XSS、CSS XSS、VBScript XSS 只在低版本的IE中可以生效,現在應該基本不可見了,不過還是給大家介紹下。
mXSS
mXSS中文是突變型XSS,指的是原先的Payload提交是無害不會產生XSS,而由於一些特殊原因,如反編碼等,導致Payload發生變異,導致的XSS。下面的漏洞是存在於以前版本的PC的QQ客戶端的頁面預覽功能。
這是博客園提交的一篇文章,可以看到,提交的XSS Payload已經被轉義了,不產生危害。
上圖是在QQ客戶端里分享上面的博客園那篇文章的鏈接,而QQ存在網址預覽功能,於是點擊網址可以在右側顯示出優化後的頁面的內容,就導致了XSS的產生;這個預覽功能實際上是QQ客戶端內嵌了一個網頁,這個頁面對原網頁內容進行提取和處理的過程中,將原本無害的XSS Payload進行了轉碼操作,於是導致了Payload 變異而產生了XSS,我記得這個XSS,我前後一共繞過了三四次,然後提交給了TSRC。
實際上,頁面預覽這個功能不是針對所有網址都可以預覽,對於一些大型的網站,估計是有白名單機制或者是認證的網站,才能進行預覽,隨便一個網址是不可以的,這本身也是一種信任的限制在裡面,如果是隨意的網站,那就更好控制內容了,所以對於域名是有限制的;這裡也存在一個信任的問題,理論上,這些大站的內容應該是沒問題的,但實際情況是可被控制而導致產生XSS。
UXSS
UXSS全稱Universal Cross-Site Scripting,翻譯過來就是通用型XSS,也叫Universal XSS。UXSS是一種利用瀏覽器或者瀏覽器擴展漏洞來製造產生XSS的條件並執行代碼的一種攻擊類型。UXSS 可以理解為Bypass 同源策略。
上圖就是一個安卓內核瀏覽器存在的UXSS,訪問www.0xsafe.org/x.html,頁面嵌套TSRC的頁面,然後可以讀取到TSRC站點的Cookie,具體的介紹我之前有寫過一篇文章:http://www.fooying.com/uxss/
Flash XSS
Flash 產生的XSS主要來源於:
getURL/navigateToURL 訪問跳轉
ExternalInterface.call 調用js函數
前者是訪問跳轉到指定URL,後者則是調用頁面中JS函數,比如上面的代碼就會導致彈框。
這是之前蝦米的一個播放器頁面,然後分享功能可以通過網址里的參數直接控制一些值,於是就存在了可控的注入點,通過構造Payload可以觸發,當點擊進行分享的時候就會觸發XSS。
這裡也有篇介紹Flash XSS的文章:https://www.secpulse.com/archives/44299.html,大家感興趣可以看下。
UTF-7 XSS
在以下兩種場景可以在低版本IE瀏覽器觸發UTF-7 XSS:
meta未指定編碼,特定版本IE發現內容存在UTF-7編碼內容,則自動以UTF-7解碼處理
指定編碼為UTF-7
UTF-7 XSS與普通XSS的區別就在於構造的Payload是UTF-7編碼的,而基於上面兩個場景的特性,低版本IE瀏覽器會自動解碼,於是就可以產生XSS。
上圖中,a變數的值就是UTF-7 XSS 的Payload,實際上是正常Payload UTF-7編碼後的結果。
MHTML XSS
MHTML XSS 同樣只存在於低版本的IE中,MHTML是MIME HTML (Multipurpose Internet Mail Extension HTML,聚合超文本標記語言)的縮寫,把一個多附件(如圖片,flash動畫等)的網頁內容都保存到單一檔案的標準,是類似HTTP的協議,在IE中,當嵌入資源的URL的協議為MHTML 時,IE將調用MHTML Protocol Handler,把該資源當作MHTML格式文件解析處理。
其中
通過特定的訪問方式:
就可以觸發XSS,具體更多內容大家也可以自己搜索看看。
CSS XSS
CSS XSS 是緣於IE8 Beta2以前版本支持使用expression在CSS中定義表達式(公式)來達到建立元素間屬性之間的聯繫等作用,於是就可以通過以上代碼的方式觸發XSS。
VBScript XSS
VBScript XSS 同上面幾種XSS一樣,也是微軟的產物,也可以觸發XSS。
XSS防禦
XSS的防禦我就不多說了,之前有翻譯過OWASP Xenotix XSS 漏洞利用框架作者Ajin Abranham寫的一個《給開發者的終極XSS防禦備忘錄》,已經放在附件里,大家可以自己看看。
其他
其實關於XSS,有很多東西可以深入,包括說學習XSS需要了解各種編碼轉義,各種繞過,這篇文章主要是進行入門的介紹,然後附件里還附了一個附件是介紹XSS蠕蟲的,以前翻譯的,大家也可以自己看看,下面是是一些學習資源。
一些在線XSS遊戲
http://prompt.ml/答案:https://github.com/cure53/xss-challenge-wiki/wiki/prompt.ml
http://escape.alf.nu/答案:http://blog.163.com/cmdbat@126/blog/static/17029212320149385547765/
https://xss-game.appspot.com/答案:http://www.freebuf.com/articles/web/36072.html
http://xss-quiz.int21h.jp/答案:http://blog.163.com/cmdbat@126/blog/static/1702921232013112542728566/
一些學習網址
https://www.owasp.org/index.php/XSS
https://www.google.com/about/appsecurity/
http://www.freebuf.com/author/black-hole(看原理與剖析系列)
http://html5sec.org/
http://www.pkav.net/
https://xssing.org/
文末隨筆:
這是之前寫在內網的一篇文章,關於XSS的入門,其實更早的是創宇內部的一個培訓,整理成文章發出來;後續應該還會有一些如果適合放在外網的文章,我會發到公眾號和博客,然後大家也可以關注下我們實驗室的公眾號『雲鼎實驗室』,有些文章,特別是技術類的應該會首發在那。
優主張
關注信息安全,產品運營以及各種好玩的東西;分享一些個人的體驗與心得,一些想法,一些安全的科普。
by Fooying


TAG:優主張 |
※GMV-TOPS-別墅型多聯機-一站式打造您的藝術家居
※科技與藝術的結合,小米MIX2S上手圖賞
※24小時:鄭容和-東方神起-EXO-CBX-《百想藝術大賞》MC-《漂亮姐姐》-WINNER
※高管曬小米MIX 2S發布會綵排照:手機中的藝術品
※GIF:腳印的藝術
※藝術喚醒鄉土-瀨戶內國際藝術節-1AU視界
※TANE典藏:墨西哥的白銀設計藝術
※插畫:開滿鮮花的庭院-藝術家VICTOR ARRIOLA作品
※SIMON MO——勇者與浪漫的博弈藝術
※品牌打造 | SIMON MO——勇者與浪漫的博弈藝術
※#X視點#PUMA 首度攜手藝術家SHANTELL MARTIN 推出聯名系列 | Xsneaker
※小米MIX 2S尊享版上手實拍:手機中的藝術品
※葡萄牙 VERITAS 古董藝術品及珠寶拍賣會:從里斯本到聯拍在線
※米蘭:與工作相伴,與藝術相融,ANTONIO ARICò的秘密花園
※HTC聯袂當代藝術家,VR里的藝術世界
※零距離感受「手機中的藝術品」 AI雙攝小米MIX 2S品鑒會在漢舉行
※旅居的藝術——2018 LV OBJETS NOMADES系列香港展
※PUMA首度攜手藝術家SHANTELL MARTIN推出聯名系列
※韓國新銳藝術家推介:HWANG HYE JUNG
※MARYLING | 摩登藝術的極致展現,天馬行空,星耀米蘭