FavoriteLoading
0

構建XSS Payload是一門藝術,用最簡單的方法繞過XSS的緩解方案

如果你想要繞過測試人員/攻擊者與目標應用之間的安全保護機制,那么最簡單、最可靠的方法就是利用目標應用的敏感字符過濾功能。沒錯,這聽起來似乎有些“以彼之道,還施彼身”的味道。
百科:XSS(跨站腳本攻擊)
XSS 攻擊是代碼注入的一種,它允許攻擊者將代碼寫到 Web 頁面上,Web 應用會錯誤解析頁面內容后執行網頁中的腳本內容,導致其他用戶瀏覽此網頁時觸發頁面上的腳本內容,進而使用戶瀏覽器做出腳本內容相應的行為,完成對用戶的攻擊。由于 Web 頁面在用戶提交文本信息時沒有做合法性檢測或依賴客戶端的合法性檢測,導致腳本文本順利上傳至服務器,而在 HTML 解析時,Web 應用沒有對腳本文本做正確編碼,致使用戶提交的攻擊腳本出現在客戶端瀏覽器中,使用戶加載并執行攻擊者編寫在 Web 頁面中的腳本程序,這些腳本語言通常有:JavaScript、Java、VBScript、ActiveX、Flash 或者是普通的 HTML。攻擊成功后,攻擊者將可獲取到用戶的私密信息。

攻擊思路
可能是出于對安全因素或其他方面的考慮,很多開發人員都會在自己編寫的代碼中添加某種字符過濾功能。但是他們往往都沒有意識到,攻擊者很有可能利用這種功能來欺騙目標設備并實施攻擊。想必各位同學都知道,Web應用防火墻(WAF)以及瀏覽器的防XSS過濾器是目前最常用的兩種威脅緩解方案。那么在這篇文章中,我們將會告訴大家如何利用這項技術影響WAF,并繞過瀏覽器的防XSS過濾器。
開發人員可以通過使用編程語言自帶的函數和自定義函數來過濾/替換掉他們認為可能會具有危險性(或不需要的)的字符或字符串。那么接下來讓我們首先看一看,當一個應用程序過濾掉用戶輸入數據中的空格字符時,程序會發生些什么。
技術分析
為了讓大家更好地理解,我們專門制作了一個PHP網頁[點我訪問]。點開這個網頁之后,大家可以看到該站點的URL地址中有兩個參數,即“p”和“q”。

第一個參數“p”只是一個簡單的“echo $_GET[“p”];”,由于我并沒有將這個頁面添加進我Web應用防火墻的白名單列表中,因此我們并不能使用普通場景下的漏洞利用方法去利用這個漏洞,具體情況如下圖所示。實際上,Sucuri在這里所采用的安全解決方案(CloudProxy)就非常棒了,它并不是通過URL中的“(1)”來檢測XSS攻擊的,它檢測的其實是URL中的“

第二個參數“q”是用來驗證我們的繞過方案是否成功的。該部分的PHP代碼如下所示:

echo str_replace(“ ”, “”, $_GET[“q”]);
這行代碼可以剔除掉用戶輸入數據中的空格字符。這看起來雖然很簡單,但是卻足以欺騙CloudProxy、XSS審計程序、以及谷歌Chrome瀏覽器的XSS緩解方案。運行結果如下圖所示:

從上圖中可以看到,我們在相應參數中添加了符號“+”,通常情況下Web應用程序會將這個字符解析為空格符。我們故意將字符“+”添加進了攻擊向量/payload中,而就是這一個簡單的字符,就能夠讓目標應用的安全防御機制失效。Web應用防火墻無法檢測到這種類型的XSS攻擊,因為“。而且,由于這種形式的payload與XSS攻擊向量樣本庫中的payload有很大不同,因此XSS審計程序同樣也不會將其視為XSS攻擊向量。
由此可見,攻擊者所發送的內容和Web應用真正響應的內容并不一定是相同的。如果攻擊者輸入的數據與數據庫中的惡意payload匹配度很低的話,那么攻擊者所輸入的內容就不會被當作惡意內容處理。
另外一種情況
除了上面這種方法之外,我們還可以利用字符/字符串替換功能來對付這些安全保護措施。為此,我們另外制作了一個網頁[點我訪問]。這一次,我們將要使用四個URL參數,即“p”、“q”、“r”和“s”。我們將該網頁添加進了Web應用防火墻的白名單之中,因此這些參數還沒有強大到能夠繞過WAF:每一個請求中的“但是我們可以用這個方法來對付XSS

分頁閱讀: 1 2
【聲明】:8090安全小組門戶(http://www.jvwkvg.tw)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。