XSS-labs通關挑戰(xss challenge)

XSS-labs通關挑戰(xss challenge)

0x00 xss-labs

  最近在看xss,今天也就來作一下xss-labs經過挑戰。找了很久的源碼,終於被我給找到了,由於在GitHub上你們也知道那個下載速度,因此,我也就直接轉接到本身的碼雲上去了,在這也貼出來,歡迎你們下載使用。javascript

  源碼連接請點擊:https://gitee.com/ruoli-s/xss-labsphp

  安裝沒啥好說的,直接放進本身搭建好的www目錄下,就能夠開始闖關了,xss-labs一共有level 20,作着看吧。html

  (其實以爲這些圖片纔是我真正想作xss challenge的最大緣由img)前端

image-20210115185051244

0x01 Level 1 無過濾機制

image-20210115190305848

  看了半天,原來參數在URL裏放着呢,java

image-20210115192519758

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

image-20210115192731335

  OK,直接走代碼:ssh

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

image-20210115193519094


0x02 Leval 2 閉合標籤

image-20210115194005055

  咱們直接輸入level 1 的 payload,發現直接輸出了,這裏應該是作了實體轉義。xss

image-20210115193744576

  F12查看前端代碼:函數

image-20210115194351470

  第一處就是顯示在頁面上的代碼,第二處是咱們輸入的代碼,這裏應該是作了轉義,咱們構造payload,使用">嘗試閉合input標籤:測試

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

image-20210115194940046


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

image-20210115205058546

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

image-20210115205557603

  發現所有被實體轉義了,咱們去看源代碼:

<?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>";
?>

  咳咳,發現對雙引號作了限制,可是卻放行了單引號',並且竟然在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

這裏也是成功過關。


0x05 Leval 5 javascript僞協議

image-20210116112615699

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

image-20210116150442506

  貌似on被作了手腳,咱們繼續在o後面輸入其餘,發現只有on被替換了,這也就意味着事件是不能用了。

image-20210116150807491

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

image-20210116151044701

  到這裏相信你們都想到了,咱們試試大小寫混用:

image-20210116151747433

  咳咳,在線打臉哈,輸出全爲小寫,看來人家也是作了大小寫過濾了。

image-20210116151900058

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

image-20210116151535724

  好,該試的都試過了,接下來咱們試試 javascript 的僞協議

  要看javascript僞協議的請點這裏

"><a href=javascript:alert(/xss/)>

image-20210116153331190

image-20210116153501066

  最後,咱們也是成功的過關了,固然,仍是看一下源碼比較踏實:

<?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=搜索 />
</form>
</center>';
?>

  也確實如咱們猜的一致,分別對on<script>進行了替換,也作了大小寫過濾。好了,繼續下一關,歐裏給。


0x06 Leval 6 大小寫繞過

  順利來到第6關,咱們正在徒步前行!!!

image-20210116154828872

  咱們直接拿上一關的payload來測試,固然,也不用想,確定是行不通的,直接來看前端代碼,哎呦我去,發現了個啥,此次連href也給過濾了,是個狠人。

image-20210116183918429

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

image-20210116185419800

  咱們直接擼大小寫,使用雙引號">構造閉合:

<ScRipt>alert(/xss/)</scRIpT>

image-20210116185731885

  這裏也是成功過關。繼續,沖沖衝!!!


0x07 Leval 7 雙寫繞過

  來到第七關,嗯,這個圖不錯,很魔性有沒有?

image-20210116190206085

  廢話很少說,先來一波,有木有發現仍是挺管用的?(●'◡'●)。

image-20210116195035217

  發現像script這種關鍵字被過濾了,難道是雙寫?咱們直接使用雙引號"閉合構造payload:

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

image-20210116195454082

  輕鬆搞定😁,下一個。


0x08 Leval 8 編碼繞過

  來到第八關,啥也不是。

image-20210116210245989

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

image-20210116210823200

  這裏,筆者本身通過測試,html實體編碼和hex編碼均可以繞過,我就只放hex編碼吧,看大多數博客上都是HTML實體編碼,不熟悉的能夠本身再瞭解瞭解。

  咱們能夠看到,代碼轉換機制是將script中的ri變成了r_i,因此咱們只編碼ri試試:

字母 十進制 hex(十六進制)
r &#114; &#x72;
i &#105; &#x69;

  編碼連接請點這裏

  構造payload:

javasc&#x72;&#x69;pt:alert(/xss/)

image-20210116213444302

幹得漂亮,下一關。


0x09 Leval 9 檢測關鍵字

  越看這些圖片越喜歡🤭,按照慣例,咱們仍是先搗鼓一番。

image-20210116213925894

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

image-20210116215646648

img

  不行,待老衲去查看源代碼:

<?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('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情連接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的連接不合法?有沒有!">友情連接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情連接</a></center>';
}
?>

  牛逼了,牛逼上天了,除了之前作過的全部過濾,居然還加了個strpos函數,誰都不服就服你,這函數的意思是我們輸入的字符串裏面必需要有http://字符,我,吐了呀,這誰能想的到:

  想要更多瞭解strpos函數的請點這裏

  看到這裏並無對編碼進行過濾,因此咱們仍是延用上題的payload:

javasc&#x72;&#x69;pt:alert('xsshttp://')

image-20210116221407612

  咳咳,這題,,,挺不人道的,下一個,啥也不是。


0x10 Leval 10 隱藏信息

  歷經千辛萬苦,終於來到了整個挑戰的一半,嗚嗚嗚。

image-20210116222501534

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

image-20210116225702764

  沒辦法,去看源碼吧,哎,心碎了💔

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

image-20210116230805030

image-20210116231027885

注意:必定要在前端修改2次type類型,才能完成彈窗。


0x11 Leval 11

持續更新中·····

相關文章
相關標籤/搜索