目錄
前言
XSS漏洞概述
XSS漏洞分類
通關日記
level1
分析
解題
?level2
分析
?解題
?方法一:閉合標簽
方法二:閉合雙引號
level3
分析?
解題
level4
分析
解題
level5
分析
解題
level6
分析
解題
level7
分析?
解體
level8
分析
解題
level9?
分析
解題
level10
分析
解題
level11
分析?
解題
level12
分析
解題
level13
分析?
解題
前言
XSS漏洞概述
XSS(跨站腳本攻擊,Cross-Site Scripting)?是一種常見的Web安全漏洞,攻擊者通過注入惡意腳本到網頁中,當其他用戶訪問該頁面時,惡意腳本會在其瀏覽器中執行,可能導致數據竊取、會話劫持等安全問題。
XSS漏洞分類
-
存儲型XSS(Stored XSS)
-
描述:惡意腳本被永久存儲在目標服務器上,當用戶訪問包含該腳本的頁面時,腳本被執行。
-
示例:攻擊者在論壇帖子中插入惡意腳本,其他用戶查看該帖子時,腳本在其瀏覽器中執行。
-
-
反射型XSS(Reflected XSS)
-
描述:惡意腳本作為請求的一部分發送到服務器,服務器將其反射回用戶的瀏覽器并執行。
-
示例:攻擊者構造一個包含惡意腳本的URL,誘使用戶點擊,腳本在用戶瀏覽器中執行。
-
-
DOM型XSS(DOM-based XSS)
-
描述:惡意腳本通過修改頁面的DOM結構來執行,不涉及服務器端的反射。
-
示例:攻擊者利用前端JavaScript代碼中的漏洞,直接修改DOM元素,導致惡意腳本執行。
-
通關日記
level1
分析
通過觀察URL,發現時GET傳參,修改傳遞的參數時,html頁面發生改變,說明是直接傳遞到了html頁面中,沒有做過濾
解題
直接修改URL參數,注入惡意js語句
<script>alert(1)</script>
level2
分析
還是一樣,我們先在URL處輸入我們的惡意語句
http://127.0.0.1/xss/xsslabs/level2.php?keyword=<script>alert(1)</script>
發現沒有觸發,做了一個實體轉換,將標簽轉換為了一個普通文本,所以在頁面顯示出來了。
之后我們查看網頁源碼
?發現我們注入的語句被放到了value中,這樣瀏覽器就不會執行我們的注入語句,我們要構造閉合
而這時有兩種思路,一種是只閉合雙引號,重新寫一個屬性。另一種是閉合標簽,之后再寫一個標簽
"><script>alert(1)</script>
?解題
?方法一:閉合標簽
"><script>alert(1)</script>
方法二:閉合雙引號
" onclick="alert(1)
?
level3
分析?
我們查看源碼,發現第三關比第二關多了一個htmlspecialchars函數(將特殊字符轉換為HTML實體)默認轉義雙引號,不轉義單引號。加上ENT_QUOTES參數后轉義單引號
解題
a' onclick='alert(1)
level4
分析
我首先嘗試了一下閉合雙引號和單引號,意外的是用第二關閉合雙引號的方法竟然也能成功,那它與第二關有什么區別呢?所以我查看源碼,發現第四關過濾了'<' '>' 。所以其實它的意思是,不允許我們閉合input標簽,不能發生用戶交互
解題
a' autofocus onfocus='alert(1)
level5
分析
查看源碼,發現第五關過濾了script和on,而且不是過濾為空,那么我們就不能雙寫繞過了。strtolower函數也防止了我們大小寫繞過。那我們就要考慮有哪些標簽用不到on了
解題
"><a href="javascript:alert(1)">a</a>
level6
分析
查看源碼,發現第六關過濾script、on、src、data和href,但是它沒有轉小寫的操作。那我們就可以使用大小寫繞過的方法
解題
a" Onclick="alert(1)
level7
分析?
第七關過濾了script、on、src、data和href,也轉小寫了,但是他過濾是過濾為空,此時我們就可以雙寫繞過了
解體
a" oonnclick="alert(1)
level8
分析
在第七關的基礎上,第八關對雙引號做了過濾。我們先隨便輸入一個惡意語句測試一下
很好看出,input我們已經用不了了,我們可以將目光轉向a標簽。雖然他對script有過濾但是我們可以將javascript實體編碼傳入。
解題
javascript:alert(1)javascript:alert(1)
level9?
分析
第九關的源碼比第八關多了一個對http://的檢查如果沒有就會這樣輸出
?那我們不是只需要在第八關的基礎上將alert(1)改為alert('http://')不就可以了嗎
解題
javascript:alert('http://')
?
level10
分析
?檢查網頁源碼
發現他有三個input標簽,但是網頁卻什么都沒有,type=hidden是隱藏的。那我們應該測試這三個input看看有沒有變化?。經過測試,只有t_sort有問題
http://127.0.0.1/xss/xsslabs/level10.php?keyword=well%20done!&t_sort=a%22%20type=%22text%22
那接下來我們在t_sort傳值不就ok了嗎?
解題
http://127.0.0.1/xss/xsslabs/level10.php?keyword=well%20done!&t_sort=a%22%20onclick=alert(1)%20type=%22text
?
level11
分析?
第十一關與第十關相比,它的源碼多了t_ref,并且在t_sort進行了過濾,那我們就要在t_ref上下文章了。我們可以從源碼看出來 t_ref的value值其實就是HTTP_REFERER。而對于referer我們可以使用hackbar插件來進行設置。那我們把referer改成我們的惡意語句不就成功了?
解題
level12
分析
第12關和第11關相比,只是從修改referer變成了ua
解題
level13
分析?
13關與前兩關唯一的區別就是,t_cook的value值是接受的user,我們只需要在構造的時候加上user=即可。