XSS-labs通關挑戰(xss challenge)

XSS-labs通關挑戰(xss challenge)

0x00 xss-labs

  最近在看xss,今天也就來做一下xss-labs通過挑戰。找了好久的源碼,終於被我給找到了,因為在GitHub上大家也知道那個下載速度,所以,我也就直接轉接到自己的碼雲上去了,在這也貼出來,歡迎大家下載使用。

  源碼鏈接請點擊://gitee.com/ruoli-s/xss-labs

  安裝沒啥好說的,直接放進自己搭建好的www目錄下,就可以開始闖關了,xss-labs一共有level 20,做著看吧。

  (其實覺得這些圖片才是我真正想做xss challenge的最大原因img)

image-20210115185051244

0x01 Level 1 無過濾機制

image-20210115190305848

  看了半天,原來參數在地址欄里放著呢,

image-20210115192519758

  修改參數,頁面也隨之變動,右鍵查看源程式碼,發現有跳轉到level 2 的JS,而我們傳入的參數是幾位的,下面就顯示payload的長度。

image-20210115192731335

  OK,直接走程式碼:

<script>alert(/xss/)</script>

image-20210115193519094


0x02 Leval 2 閉合標籤

image-20210115194005055

  我們直接輸入level 1 的 payload,發現直接輸出了,這裡應該是做了實體轉義。

image-20210115193744576

  F12查看源程式碼:

image-20210115194351470

  第一處就是顯示在頁面上的程式碼,第二處是我們輸入的程式碼,這裡應該是做了轉義,我們構造payload,使用">嘗試閉合input標籤:

"><script>alert(/xss/)</script>

image-20210115194940046


0x03 Leval 3 單引號閉合htmlspecialchar()函數

image-20210115205058546

  來到Leval 3,我們還是先使用上兩關測試的payload來驗證:

image-20210115205557603

  發現全部被實體轉義了,我們去看源程式碼:

<!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/)

image-20210115221343280

  可以看到,在提交之後,沒有立刻彈出,這裡我們還需要將滑鼠移動到文本框,讓事件觸發。

image-20210115221850004

補充:

  htmlspecialchars函數

  html事件屬性


0x04 Leval 4

image-20210115224342651

  我們還是一樣,使用前面測試過的,先一一過一遍,當然,結果必然是失敗的,那麼接下來我們看全端程式碼:

image-20210115234612324

  可以發現源程式碼對><進行了過濾,我們看源程式碼:

<?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/)

image-20210115235939043

這裡也是成功過關。