0x01 簡介
XSS漏洞一直被評估為web漏洞中危害較大的漏洞离唐,在OWASP TOP10的排名中一直屬于前三的江湖地位。
XSS是一種發(fā)生在前端瀏覽器端的漏洞,所以其危害的對象也是前端用戶。
形成XSS漏洞的主要原因是程序?qū)斎牒洼敵鰶]有做合適的處理,導(dǎo)致“精心構(gòu)造”的字符輸出在前端時被瀏覽器當作有效代碼解析執(zhí)行從而產(chǎn)生危害醋奠。
0x01 反射型xss(get)
可以看到123的字號明顯是要大一些的,說明這里的語句是被有效執(zhí)行了的翰铡。
彈個窗試試:
<script>alert('Asson');</script>
也是OK的钝域,確定這里有XSS漏洞了,搞個XSS平臺的payload試下锭魔。
順利拿到cookie例证。
0x02 反射型xss(post)
這里看到題目為POST方式的反射型XSS,看到POST迷捧,就掏出大寶貝burpsuite以示尊敬吧织咧。
首先按照提示使用admin/123456進行登錄。頁面來到了一個搜索框漠秋,我們秉承著有框就打的菜鳥精神笙蒙,輸入<script>alert('Asson');</script>
試下效果
彈窗了,試試xss平臺的語句庆锦。
也是沒有問題的捅位,因為打開了burpsuite,所以它的爬蟲一直在爬這個頁面搂抒,因此才收到了這么多的回傳消息艇搀。
不過這關(guān)好像不關(guān)burpsuite什么事~
0x03 存儲型xss
存儲型XSS的危害可就嚴重了,payload會被存到服務(wù)器上求晶,導(dǎo)致每個訪問此頁面的用戶都會收到攻擊焰雕。
這里還是<script>alert('Asson');</script>
演示下效果就好。
換個瀏覽器訪問該頁面也是彈窗的芳杏,足以說明此漏洞的危害性有多大矩屁。
0x04 DOM型xss
dom型xss其實是一種特殊的反射型xss辟宗,秉承著有框就打的原則,先試一下這里是否存在xss漏洞吝秕。
頁面是顯示了一部分內(nèi)容的泊脐,并且我們看到xss語句已經(jīng)寫進了HTML里面,所以此處是存在xss漏洞的烁峭。
觀察下HTML中的語句晨抡,這里是需要進行閉合后能夠構(gòu)造攻擊語句的。
'><src='a' onclick="javascript:alert('Asson');">
注意閉合符號應(yīng)以頁面源代碼中的為準则剃,所以此處為單引號閉合。點擊超鏈接即可彈窗如捅。'><src='a' onmouseover="javascript:alert('Asson');">
或者使用onmouseover事件棍现,鼠標移動到超鏈接處也可彈窗,這都是可以根據(jù)實際情況自由選擇的镜遣。0x05 DOM型xss-x
其實沒太明白dom型xss-x和dom型xss的區(qū)別己肮,網(wǎng)上查了下資料也沒有啥有用的信息,這里可能只是皮卡丘靶場的關(guān)卡命名悲关。仔細看下的話谎僻,是能看到dom型xss-x的payload是可以寫到url中的,這樣是可以構(gòu)造惡意url誘使用戶訪問寓辱。
其余的話沒感受太大的區(qū)別艘绍,使用上一關(guān)的payload也能正常彈窗。
0x06 xss盲打
xss盲打的準則就是見框就打秫筏,雖然我不知道攻擊語句能不能生效诱鞠,但我就是不顧一切的在留言板、意見反饋等功能點見框就插这敬,萬一呢~
登錄皮卡丘靶場后臺可以看到有彈窗出現(xiàn)航夺。
0x07 xss之過濾
看到過濾,就先試了下<>和script都沒被過濾崔涂,但兩者合在一起<script>就被過濾了阳掐,因此這關(guān)就不能使用script標簽來構(gòu)造攻擊語句了。
我們可以發(fā)現(xiàn)我們輸入的內(nèi)容還是會顯示在頁面上冷蚂,因此我們構(gòu)造一個錯誤的img src標簽使其報錯后執(zhí)行onerror事件即可觸發(fā)xss缭保。
'><img src='a' onerror="alert('Asson');">
這里用onclick或者onmouseover事件其實也是OK的。
0x08 xss之htmlspecialchars
看標題就知道這里是使用HTML實體編碼轉(zhuǎn)義了<>符號帝雇,輸入<'">發(fā)現(xiàn)除了單引號之外涮俄,尖括號和雙引號都是被轉(zhuǎn)義了的。
萬幸頁面會將我們輸入的內(nèi)容以超鏈接的方式顯示出來尸闸,因此這里是有一個a標簽的彻亲,我們可以利用這點來構(gòu)造xss語句搪花。
'onclick='alert(/Asson/)'
0x09 xss之href輸出
隨便輸入一點內(nèi)容后按下F12看下HTML語句蝙云,發(fā)現(xiàn)是一個a標簽,然后將用戶輸入的內(nèi)容拼接a標簽后面,那就簡單了后室。
javascript:alert(/Asson/)
0x10 xss之js輸出
按照關(guān)卡提示輸入tmac,出來了一句話+麥迪的圖片齐疙。按照關(guān)卡名字推斷债热,這一關(guān)是使用js來處理用戶輸入的內(nèi)容,那么肯定是存在<script>標簽的抡砂。我們的思路是想辦法閉合掉前面的script標簽大咱,然后再構(gòu)造攻擊語句。
tmac</script><script>alert(/Asson/)</script>
成功注益。
0x11 防御
xss漏洞的防御方法應(yīng)該從輸入和輸入進行考慮:
- 過濾輸入的數(shù)據(jù)碴巾,對例如:單引號、雙引號丑搔、尖括號厦瓢、 on*事件、script啤月、iframe等危險字符進行嚴格的檢查煮仇。這里的輸入不僅僅是用戶可以直接交互的輸入接口,也包括HTTP請求中的Cookie中的變量谎仲,HTTP請求頭部中的變量等浙垫。
- 不僅驗證數(shù)據(jù)的類型,還要驗證其格式强重、長度绞呈、范圍和內(nèi)容。
- 不僅在客戶端做數(shù)據(jù)的驗證與過濾间景,關(guān)鍵的過濾步驟在服務(wù)端進行佃声。
- 對輸出到頁面的數(shù)據(jù)進行相應(yīng)的編碼轉(zhuǎn)換,如HTML實體編碼倘要、JS編碼等圾亏。對輸出的數(shù)據(jù)也要檢查,數(shù)據(jù)庫里的值有可能會在一個大網(wǎng)站的多處都有輸出封拧,即使在輸入做了編碼等操作志鹃,在各處的輸出點時也要進行檢查。
本文僅為個人學(xué)習時所作筆記泽西,非標準答案曹铃,文中如有錯誤,煩請各位師傅批評指正捧杉。