xss秘籍第一式(常彈)
(1)進入自己搭建的靶場,發現有get請求,參數為name,可進行輸入,並會將輸入的內容顯示於網頁頁面
(2)使用xss的payload進行通關:
http://127.0.0.1/xss/level1.php?name=<script>alert(1)</script>
xss秘籍第二式(構彈)
(1)進入自己搭建的靶場,發現仍然有get請求,並為keyword=test
(2)使用F12或者調用ctrl+shift+i調出網頁源代碼查看欄,對可輸入的地方進行查看,發現輸入框是一個value值的輸入,然后我們進行js惡意代碼拼接
(3)加載payload:如下,一邊進行js代碼調試,一邊進行查看,順利通關
"/><script>alert(1)</script>//
xss秘籍第三式(繞函彈)
(1)查看頁面,仍然是get型請求,會與第二關有什么不同呢?我們查看源代碼:
(2)嘗試着會value的值進行js惡意代碼輸入,發現頁面並沒有彈框,那應該怎么辦呢?
"/><img src=# onerror=alert(1)/>//
(3)將payload修改一下,發現並沒有什么用,但是,如果將payload修改為:
"/><script>alert(1)</script>//
上述並不可用,大概是后端使用了htmlspecialchars函數進行過濾,因此我們可以使用不帶有尖括號的特殊字符進行嘗試:
如' onmouseover='javascript:alert(1)
但為什么要這要做呢?,如果換成" onmouseover=" javascript:alert(1) ,卻並不會成功
這是因為,<input type='text' value=' ' onmouseover=' javascript:alert(1)'>
只有使用單引號,轉換出來的'才有意義
xss秘籍第四式(構繞函彈)
(1)來到第四關卡,發現使用第三關的payload已經不再起作用了,那我們應該怎么辦呢?此時思考一下,它的源代碼肯定也是如此不僅對<>括號進行了過濾,而且還進行了htmlspecialchars()函數過濾,那我們是否還是可以不輸入<>,並且根據input的標簽進行js構造.
(2)輸入payload如下:
" oninput='alert(1)'
" onmouseover='alert(1)'
這樣,我們的第四關就通關成功啦!
xss秘籍第五關 (閉新java彈)
(1)來到第五關卡,仍然和前面的關卡十分相似,這個時候,基於越來越難的道理,我們首先嘗試一下輸入和第四關一樣的payload
(2)發現過濾了on,那我們應該如何避免過濾on呢,嘗試使用大小寫轉換,發現仍然對on進行了過濾
(3)那我們可以試試對這個標簽使用編碼的方式進行繞過過濾,發現網頁似乎無法識別,這個時候不要灰心,我們再把思維放得簡單一點,不使用on的點擊事件,我們回到最初的最簡單的想法,嘗試使用一下<>進行操作,似乎並沒有進行轉義或是過濾。,嘗試一下的payload:
" /> <a href="javascript:alert(1)"/>
(4)似乎發現了被單獨彌留下來的一個超鏈接版的xss代碼,我們點擊進行嘗試,很不錯,這個鏈接盡然彈出了xss代碼
xss秘籍第六關(大小寫)
(1)這次我們直接進入主題
(2)構造payload,繞過對href的過濾,如下所示:變換大小寫
"/><a Href='javascript:alert(1)'>a</a>//
xss秘籍第七關(重復寫)
(1)這一關是直接做了關鍵字的過濾操作,我們無法使用href,src等觸發xss的惡意js
(2)思考一下,是否可以使用別的不使用這些標簽也可以觸發xss的payload呢?但是連script標簽也被過濾了!!使用大小寫仍然無法過濾,那我們是否可以使用重復寫標簽進行xss攻擊呢?構造payload如下所示,發現惡意js成功執行
"/><ScrscriptipT>alert(1)</ScriscriptPT>//<
xss秘籍第八關(DOM)
(1)進入第八關卡,發現這一關非常可能屬於Dom型xss,因此我們需要根據友情鏈接進行惡意js的構造
(2)javascript被過濾了,那試試大小寫或者重復寫,似乎都是無法彈框的,那我們需要換個思路,將這個a標簽閉合,再重新使用新的js標簽,但是,經過嘗試,我們會發現,這個不僅無法重復寫,也無法使用大小寫進行繞過。
(3)嘗試對javascript這個函數的關鍵部分進行編碼操作,無論是16進制編碼還是Unicode編碼均可以
xss秘籍第九關(代碼審計)
(1)當進入第九關的時候,我們需要開始代碼審計了。從圖中可以看出這一欄不僅對代碼進行了過濾,而且還在里面加了http的暗箱操作,如果沒有"http://"這幾個字符,就返回鏈接不合法。
(2)因此可以輸入如下payload:r(是Unicode編碼,r的化身)%0d(空格的url編碼)
javascript:%0dhttp://www.xixi.com%0dalert(1)
xss秘籍第十關(改類型)
(1)進入第十關
<input name="t_sort" value="x&t_sort="type="text" onclick="alert(1)" type="hidden">
居然要get兩個參數。這可是盲猜都猜不到的,然后,似乎只過濾了尖括號的樣子,因此可以隨意構造,type是為了讓頁面展現出一個輸入框,一點擊就會彈出alert
我們試試構造別的payload:
發現輸入的文本都無法顯示,這樣就可以猜測出來,這里只能改變一下keyword的類型,type=text
xss秘籍第十一關(改Refere)
從第九關開始,就需要代碼審計了,那么,讓我們一起來看看第十一關做了哪些代碼上的限制吧!
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];//將payload從http頭的referer欄獲取過來,注意,這就是最重要的,誰也不知道我們需要從referer構造payload
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."
首先,從代碼可以發現,過濾了尖括號與使用了htmlspecialchars函數,t_sort的值來自 上一個連接跳轉的地址,所以我們直接抓包把referer里繞過,23&t_sort="type="text" onclick="alert(1)
(1)在第十關完成的瞬間,我們使用burp抓取數據包
(2)然后修改referer這一欄的為我們的payload,payload可以與第十關的相同,可以發現順利進入了第十一關,並且也有彈出一個輸入的text格式框
(3)此時只要點擊一下那個text輸入框,我們就能順利通關!
xss秘籍第十二關(改User-Agent)
(1)來到第12關,我們發現這個界面似乎與11關無比的雷同。
(2)代碼審計,發現與11關唯一不同的就是這次需要輸入的payload來源不再是refer了,而是user-agent
(3)我們按照上一次11關的過關實驗方法,修改user-agent來試試xss,發現同樣的方法也是OK的,即:在11關過關的時候抓包,修改我們的User-Agent頭,然后直接在burp里改為如下payload即可:
keyword=123&t_sort="type="text" onclick="alert(1)
xss秘籍第十三關(改cookie)
(1)通過第11、12關的經驗,我們已經成功地破解了其中的奧義,就是根據代碼從各個地方注入xss語句,現在繼續觀察一下第13關的代碼
(2)可以看到,這段代碼中,添加了傳說中的cookie,就是我們需要輸入的payload需要在cookie內構造。使用和11、12關同樣的方法,注入xss語句
(3)放行數據包,順利通關!
xss秘籍第十四關(略。。。)
(1)在代碼審計后,才突然發現14關有點與眾不同,它的頁面是這樣的,而且還一直在加載中
(2)反正都不會彈alert(1),干脆就直接進入15關吧!哈哈哈哈!
xss秘籍第十五關(文件包含)
(1)可以很明顯的發現,這一關只有一個src,加載了一張圖片,並告訴你:想個辦法自己走出去吧!
(2)似乎存在文件包含漏洞,因為這里面php代碼echo了一個ng-include的屬性,並把圖片資源加載了進來!而我們已知的文件包含版xss又在哪里呢?讓我們重新回到第一關,在第一關是個特別簡單的什么也沒有過濾過的xss文件,我們只要將其包含過來就可以通關成功了!我們直接輸入如下payload就可以通關成功!
http://127.0.0.1/xss/level15.php?src='level1.php?name=<script>alert(1)</script>'