漏洞起因
可以輸入的地方沒有做好對應的過濾,引發的xss攻擊
漏洞危害
- 盜取cookie
- 劫持用戶瀏覽器
- 釣魚攻擊
- 掛馬
- 在一定的條件下可以getshell
- 會話劫持
漏洞類型
- 反射型XSS(危險級別:低),插入的語句停留在當前頁面。
- DOM型XSS (危險級別:中), DOM型xss又分為兩種 (a.可見型、b.不可見型),插入的語句影響js 。
- 存儲型XSS(危險級別:高),插入的語句保存在數據庫 。
- 其他型XSS(例如:Flash xss)。
漏洞實驗
本次實驗我們以著名的安全脆弱性平臺DVWA為例:
在low級別下的測試,沒有任何防禦。可以插入任意標籤如:
<code>/<code>
如果過濾了alert()如何繞過呢?
直接上後端PHP代碼:
<code>/<code>
前端顯示html代碼如下:
<code> <title>Demo1/<title>輸入你的名稱
/<code>
當輸入alert的時候就會被替換成空,當然我們可以使用其他的什麼標籤來代替script,但是如果只用script如何繞過呢?使用js轉義。將alert轉義。
當js解釋器在標識符名稱(例如函數名,屬性名等等)中遇到unicode編碼會進行解碼,並使其標誌符照常生效。而在字符串中遇到unicode編碼時會進行解碼只會被當作字符串。
也就是說unicode編碼只能編碼屬性名
示例payload如下:
<code>/<code>
經過js轉義後,代碼如下:
<code>/<code>
注意:使用unicode編碼之前要確定對方有沒有過濾“\\”
html轉義:
<code>當瀏覽器接受到一份HTML代碼後,會對標籤之間(xxx
等,之間的情況:<code>繞過:
<code>]";/* * */#echo "";?>/<code>繞過:
<code>1' onclick='alert(1)/<code>假設輸出在img標籤裡:
<code>";echo $c;#echo "";#echo " ";/* * */#echo "";?>/<code>繞過:
<code>'1/**/onerror='alert(1)/<code>輸出在標籤裡的繞過總結:
- 先想辦法閉合周圍的什麼雙引號之類的東西
- 判斷有什麼過濾掉的,如果沒有過濾自然最好
- 查詢標籤對應可以執行js的屬性,然後插入代碼即可
DOM型xss分為兩種:
- 可見型DOM xss
- 不可見型DOM xss
何為DOM?,你插入的代碼會暫存在某些標籤之中,並且影響輸出。
DVWA的DOM xss就是不可見類型。
源代碼不可見:
但是F12可見:
low級無任何防禦直接插入payload:
medimu級過濾了script:
<code><code>使用: //要閉合select標籤,因為img在select標籤裡面是不可見的/<code>high級對default進行了判斷:
<code>/<code>使用#殺掉判斷:
<code>#/<code>存儲型xss:當我們插入的惡意代碼都會保留在數據庫,下次在訪問此頁面的時候就會自動執行js。
溫馨提示:用beef來配置存儲型xss是個不錯的選擇哦!
總結:
<code>xss漏洞起因 沒有做好對應的過濾標籤措施,導致攻擊者可以注入惡意代碼對付那種無任何過濾的 輸出在<script>之間的情況(意思就是你在script裡面,得把前面的閉合了在注入語句,然後因為你在script裡面直接輸入語句即可) 先閉合上一個script然後在注入惡意代碼: 構造的xss語句:http://xxx.com/jj.php?xxx=%0aalert(1) //) #通過%0a換行符,換到了沒有註釋的下一行然後閉合掉後面的括號使用反斜杆構造xss 當輸入的語句處於多行js代碼之中,使用\\分開,例子: 使用\\分割語句然後想辦法閉合 :反彈xss一般出現在url攔DOM型xssDOM型的xss就是通過輸入,改變了js代碼的一部分。dom型xss又分兩種:1.可見型DOM xss,輸入的東西改變了頁面的源碼。但是F12查看源碼可見類似於:<strong>按職業1檢索:aaaaaaa aaaaa為我們輸入的,假設現在被過濾了。但是\\沒被過濾,該如何構造xss呢由於\\沒有被過濾,使用unicode編碼,變為被url解釋器解釋完後為 ,url中出現了javascript:,指明瞭後面的語句要當作js執行,所以再次把解釋後的字符交給js解釋器解釋,可以彈窗。當js解釋器在標識符名稱(例如函數名,屬性名等等)中遇到unicode編碼會進行解碼,並使其標誌符照常生效。而在字符串中遇到unicode編碼時會進行解碼只會被當作字符串。如: unicode編碼在標籤的屬性之中可用,如果在輸出使用不會影響上下文 參考文章:https://www.cnblogs.com/iceli/p/8598709.html2.不可見型DOM xss 類似於DVWA裡的DOM型xss,只能用調試工具定位。審核源代碼是看不見的 記錄一些DOM型xss常用的語句: 在iframe中執行js:<iframe> <iframe> <iframe> IE執行VBScript代碼 <iframe> chrome執行data協議代碼 <iframe> 上面的變體 <iframe> chrome下的srcdoc屬性 總結:在探測一個地方是否有xss的時候,插入好搜索的語句例如:aaaaaa。然後f12源碼搜索,分析出現的地方,看看哪裡能實現xss。如果有被過濾 了,先試試html轉義,注意閉合。當\\符號沒被過濾的時候可以使用unicode編碼來進行代替被過濾的函數或符號 (前提是在script標籤裡) 存儲型xss: 一定要記住本節最開頭的話,存儲型XSS,輸出的位置不一定出現在輸入的位置。 7. 因而我們有時候需要逆向的思維,來尋找存儲型XSS。大概思路如下: 7.1 先找到輸出點,然後猜測此處輸出是否會被過濾。 7.2 如果覺得可能沒過濾,我們再找到這個輸出是在哪裡輸入的。 7.3 接著開始測試輸入,看輸出的效果。 7.4 如果沒過濾,那麼你就成功了,否則你可以放棄掉它。xss 存儲型payload:http://html5sec.org//<iframe>/<code>"/<code>
分享到:
閱讀更多 KillBoy安全實驗室 的文章