♤SF♤ 2025-07-10 17:30 采纳率: 75%
浏览 32
已结题

今天打CSRF靶场时,莫名其妙请求了个flash.js

今天打CSRF靶场时,莫名其妙请求了个flash.js
看了一下,发现在请求时,返回

<html>
<head>
<script language="javascript">setTimeout("location.replace(location.href.split(\"#\")[0])",2000);</script>
<script type="text/javascript" src="http://1.1.1.3:89/cookie/flash.js"></script>
<script language="javascript">setURL("1.1.1.3");supFlash("3475905358");</script>
</head>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="0" height="0" id="m" align="center"><param name="allowScriptAccess" value="always" />
<param name="movie" value="http://1.1.1.3:89/cookie/flashcookie.swf" />
<param name="quality" value="high" />
<param name="FlashVars" value="srv=1.1.1.3" />
<embed src="http://1.1.1.3:89/cookie/flashcookie.swf"FlashVars="srv=1.1.1.3" quality="high" width="0" height="0"  name="m" align="center" allowScriptAccess="always" type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>

又请求了一个“flash.js”

;
    }
    
    var flag = 0;
    var resArr = new Array();
    for (var i = 0; i < fontArr.length; ++i)
    {
        flag = 0;
        for (var j = 0; j < excludeList.length; ++j)
        {
            if (fontArr[i] == excludeList[j])
            { 
                flag = 1;
                break;
            }
            if (fontArr[i].match(/\.tmp/))
            {
                flag = 1;
                break;
            }
        }
        if (!flag)
        {
            resArr.push(fontArr[i])
        }
    }
    
    resArr.sort();
    return resArr;
}

function jsSetCookie(fontArr, manu, vers, os)
{
    if(manu == "" || !isArray(fontArr)){
        loadPage();
        return;
    }
    
    if(url == ""){
        loadPage();
        return;
    }
    
    var fontStr = removeExcludeFont(fontArr, excludeList).join("|\n");
    var font_param = "manu_txt=" + manu +
                 "&manu_crc=" + crc32(manu).toString() + 
                 "&version=" + vers    +
                 "&font_crc=" + crc32(fontStr).toString() + 
                 "&os=" + os;
                
    var script = document.createElement("script");
    script.type = "text/javascript";
    var done = false;
    script.onload = script.onreadystatechange = function(){
        if ( !done && (!this.readyState ||
                this.readyState === "loaded" || this.readyState === "complete") ) {
            done = true;
            this.onload = this.onreadystatechange = null;
            loadPage();
            return;
        }
    };
    script.src = url +"?"+font_param+"&"+Math.random();
    document.getElementsByTagName("head")[0].appendChild(script);
}

我的poc并没有这个功能,靶场环境里也没有发现这些东西

img

  • 写回答

7条回答 默认 最新

  • 檀越@新空间 2025-07-10 17:32
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    你提到在打CSRF靶场时,莫名其妙请求了一个flash.js文件,并且发现该文件中包含了一些JavaScript代码和一个Flash对象(<object>标签),这些内容似乎与你的POC无关。以下是对这一现象的详细分析及解决方案。


    一、问题分析

    1. flash.js 的作用

    从你提供的HTML代码来看,flash.js 文件可能是一个用于检测浏览器字体信息或执行某些操作的脚本。例如:

    • 使用 setTimeout 将页面跳转到当前URL去掉哈希部分;
    • 引入一个 Flash 文件(flashcookie.swf);
    • 通过 Flash 调用一些函数(如 setURL("1.1.1.3")supFlash("3475905358"));
    • 试图获取用户本地字体信息并进行处理(removeExcludeFont 函数)。

    这些行为通常用于识别用户设备、绕过安全机制、窃取Cookie等

    2. 为什么你的POC没有这个功能?

    你提到自己的POC并没有实现这些功能,但靶场环境却返回了这样的内容,这说明:

    • 可能是靶场环境本身配置了某种攻击向量,比如自动注入脚本;
    • 靶场服务器可能被设置为模拟攻击行为,以测试防御机制;
    • 可能是其他攻击者在同一个靶场环境中植入了恶意脚本,导致你访问时也受到影响。

    二、可能的原因

    | 原因 | 说明 | |------|------| | 靶场服务器配置错误 | 靶场可能设置了自动注入脚本,用于测试CSRF防护 | | 浏览器插件/扩展干扰 | 某些浏览器插件可能修改页面内容,导致意外请求 | | 网络中间人攻击(MITM) | 如果你使用的是非HTTPS连接,可能存在中间人篡改内容 | | 靶场漏洞利用 | 可能存在未修复的漏洞,导致第三方脚本被注入 |


    三、解决方案

    1. 确认靶场环境的安全性

    • 检查靶场是否为官方授权:确保你是在合法的CTF平台或学习环境中操作。
    • 确认是否为真实靶场:有些靶场会模拟攻击场景,可能会注入类似 flash.js 的内容。

    2. 检查你的请求路径

    • 查看你发送的请求是否被劫持
      • 使用浏览器开发者工具(F12)查看网络请求详情;
      • 检查是否有额外的请求被发起,尤其是来自 http://1.1.1.3:89 的请求。

    3. 防止CSRF攻击的措施

    如果你的目标是测试CSRF漏洞,可以采取以下方式增强安全性:

    (1) 使用 CSRF Token

    <input type="hidden" name="csrf_token" value="{{ csrf_token }}">
    

    (2) 验证 Referer 头

    在服务器端验证请求来源,防止跨域请求。

    (3) 使用 SameSite Cookie 属性

    设置 Cookie 的 SameSite=StrictSameSite=Lax,限制跨站请求。

    (4) 使用 HTTP Only Cookie

    防止 JavaScript 读取敏感 Cookie。


    4. 防止 Flash 或其他插件滥用

    由于 Flash 已经被弃用,很多现代浏览器已不再支持。你可以通过以下方式避免被 Flash 相关内容影响:

    (1) 禁用 Flash 插件

    • 在浏览器设置中禁用 Flash 支持;
    • 安装浏览器扩展(如 NoScript)来阻止未知脚本加载。

    (2) 检测 Flash 是否被调用

    • 使用 JavaScript 检测 Flash 是否被加载,并阻止其运行。

    5. 检查你的代码逻辑

    如果你的POC中没有涉及 Flash 或 flash.js,请检查以下内容:

    • 是否存在隐藏的 iframe 或 script 标签
    • 是否在页面中动态加载了外部脚本
    • 是否使用了第三方库或框架,它们可能引入了额外的资源。

    四、示例:防止 Flash 注入的简单 JS 代码

    // 检测并阻止 Flash 对象加载
    document.addEventListener('DOMContentLoaded', function () {
        var flashObjects = document.getElementsByTagName('object');
        for (var i = 0; i < flashObjects.length; i++) {
            if (flashObjects[i].hasAttribute('classid') && 
                flashObjects[i].getAttribute('classid').indexOf('clsid:d27cdb6e') !== -1) {
                // 如果发现 Flash 对象,移除它
                flashObjects[i].parentNode.removeChild(flashObjects[i]);
            }
        }
    });
    

    五、总结

    • flash.js 的出现可能是靶场环境设置的测试内容,并非你的POC所致;
    • 建议检查靶场配置、网络请求和浏览器行为,排除中间人攻击或插件干扰;
    • 加强CSRF防护措施,如使用 Token、SameSite、HTTP Only 等;
    • 避免 Flash 内容加载,可使用 JavaScript 检测并拦截。

    如需进一步帮助,请提供更多信息,如靶场名称、使用的工具、以及你尝试的具体攻击方式。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 7月18日
  • 已采纳回答 7月10日
  • 创建了问题 7月10日