漏洞起因
可以輸入的地方沒有做好對應的過濾,引發的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>
payload成功執行alert
注意:使用unicode編碼之前要確定對方有沒有過濾“\\”
html轉義:
<code>當瀏覽器接受到一份HTML代碼後,會對標籤之間(
xxx
等,之間的情況:<code>
繞過:
<code>]";/* * */#echo "";?>/<code>
繞過:
<code>1' onclick='alert(1)/<code>
假設輸出在img標籤裡:
<code>";echo $c;#echo "
繞過:
<code>'1/**/onerror='alert(1)/<code>
輸出在標籤裡的繞過總結:
先想辦法閉合周圍的什麼雙引號之類的東西判斷有什麼過濾掉的,如果沒有過濾自然最好查詢標籤對應可以執行js的屬性,然後插入代碼即可
DOM型xss分為兩種:
可見型DOM xss不可見型DOM xss何為DOM?,你插入的代碼會暫存在某些標籤之中,並且影響輸出。
DVWA的DOM xss就是不可見類型。
源代碼不可見:
但是F12可見:
low級無任何防禦直接插入payload:
medimu級過濾了script:
<code>
<code>使用:
high級對default進行了判斷:
<code>/<code>
使用#殺掉判斷:
<code>#/<code>
存儲型xss:當我們插入的惡意代碼都會保留在數據庫,下次在訪問此頁面的時候就會自動執行js。
溫馨提示:用beef來配置存儲型xss是個不錯的選擇哦!
總結:
<code>xss漏洞起因 沒有做好對應的過濾標籤措施,導致攻擊者可以注入惡意代碼對付那種無任何過濾的