XSS之xss-labs-level14

文章目录

0x01 XSS-Labs

  XSS(跨站脚本攻击)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页或请求该网页中的内容之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

  XSS按照利用方式主要分为:反射型XSS、存储型XSS、DOM型XSS。反射型XSS是攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS即存储型XSS,非常危险,容易造成蠕虫,大量盗窃cookie。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞

  XSS-Labs是使用PHP编写的一个XSS漏洞练习平台,一共包含20关,其主要为反射型XSS,可以练习基础XSS的过滤和绕过技巧,且每一关的后台源码都重写了alert()方法,只要成功弹框即可调用重写的alert()方法进入下一关或完成本关测试。

0x02 实验工具

  • FireFox
  • HackBar

0x03 实验环境

  • 服务器:Windows Server 2008
  • 中间件:Apache
  • 客户端:Windows 10

实验界面如下图所示:

XSS之xss-labs-level14

0x04 实验步骤

  1. 提交一个测试图片,查看操作显示结果。

    XSS之xss-labs-level14
  2. 在图片属性详细信息中设置其主题值为:<script>alert(1)</script>,结果如下图所示。

    XSS之xss-labs-level14
  3. 重新上传含有payload的图片,操作结果如下图所示。

    XSS之xss-labs-level14
  4. 代码审计。程序源码如下所示:

    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>欢迎来到level14</title>
    </head>
    <body>
    <h1 align=center>欢迎来到level14</h1>
    <!--<center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center>-->
        <?php
       echo "<center>
       <form action=level14.php method=POST enctype=multipart/form-data>
       <label for=file>文件名:</label>
       <input type=file name=file id=file><br>
       <input type=submit name=submit value=提交>
    </form></center>";
    
    // 允许上传的图片后缀
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    echo $_FILES["file"]["size"];
    $extension = end($temp);     // 获取文件后缀名
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpeg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
    && in_array($extension, $allowedExts))
    {
        if ($_FILES["file"]["error"] > 0)
        {
            echo "错误:: " . $_FILES["file"]["error"] . "<br>";
        }
        else
        {
            echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
            echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
            echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
            echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
        
            move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
        }
    }
    else
    {
        echo "非法的文件格式";
    }
        $file = $_FILES["file"]["name"];
        echo $file;
    
        $exif = exif_read_data($file);
        var_dump($exif)
    ?>
    <?php
    
    ?>
    <center>这关成功后不会自动跳转。成功者<a href=/level15.php?src=level15.png>点我进level15</a></center>
    </body>
    </html>
    
    • 由52-53行代码可知:程序读取图片的EXIF信息后直接回显在页面中,未经任何过滤操作。
  5. 未经过滤基于脚本的XSS可以使用。

0x05 实验分析

  • 程序未做任何转义或过滤就将参数回显到HTML页面中,所以此关的payload非常多:

    <script>alert(1)</script>
    ...
    

0x06 参考链接

上一篇:XSS之xss-labs-level13


下一篇:XSS之xss-labs-level20