V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

联动主页 base64 存图片贴,图床挂马的原理是啥?

  •  
  •   LeeReamond · 226 天前 · 944 次点击
    这是一个创建于 226 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,联动https://www.v2ex.com/t/847238,不得琪姐。

    挂马的目的应该是通过修改图片的二进制文件,在其中人工加入恶意代码,然后通过某种方式让这段代码在服务器或者客户端上运行。

    对于服务器而言,服务器提供的只是图床软件,本质上只是接受上传的二进制数据,然后再把它分发出去,整个过程完全不涉及可能运行代码的操作,所以看起来挂马对服务器不存在。唯一可能有风险的操作是图床要读取并判断一个二进制流是不是图,不过这种判断一般就是看看文件头啥的,也不会导致恶意代码被执行。

    而对于客户端而言,比如用户在网页里看到一张图片,图片中如果挂载了恶意代码难道不会被浏览器拦截吗。如果浏览器连拦截不合法图片都做不到,那网络世界岂不是处处充满危险。因为实际情况是用户可以随意浏览网页,所以可知浏览器不担心类似的攻击。

    所以图片挂马到底是指啥,感觉没有任何意义

    9 条回复    2022-04-17 07:46:49 +08:00
    x86
        1
    x86  
       226 天前
    想起了 n 年前的 iis 的解析漏洞
    misdake
        2
    misdake  
       226 天前   ❤️ 1
    “整个过程完全不涉及可能运行代码的操作” 实际情况并没有那么绝对。脚本语言服务器没做好区分的话可能会在运行时执行图片里藏的脚本,也可能针对图片解码库的错误而达成缓冲区溢出之类的。
    浏览器是 to C 的,内核种类数量很少,活下来的都是老兵,更新也相对频繁,危险都防住了。很早的时候漏洞一大堆,被攻击算是挺常见的。
    服务器端折腾好了经常几年不升级,每个服务器都不一样,很多也不会针对漏洞进行主动防御。如果看的是老教程或者选了老版本,完全有可能在解析图片的时候被攻击,完全有可能执行服务器脚本的时候不小心被嵌入脚本。
    LeeReamond
        3
    LeeReamond  
    OP
       226 天前
    @misdake 所以什么操作会引发执行脚本?解码缓冲区溢出倒是确实见过,以前 PIL 就发生过类似情况,不过为啥要解码,就算校验文件类型稍微读读文件头也就完事了。。
    misdake
        4
    misdake  
       226 天前   ❤️ 1
    @LeeReamond
    服务器端读取图片:比如服务器根据用户头像生成一个海报发个动态,比如给图片加水印,都是很常见的需求
    执行脚本:我查了查基本都是图片和文本直接拼在一起,具体的搜一下吧,比如 https://backwallkid.github.io/2017-08/php-vs-python-detect-malicious-img.html
    InDom
        5
    InDom  
       226 天前   ❤️ 2
    假如:你的服务器是 PHP 或者 ASP 的脚本语言,而你的执行器 php-fpm 或者 iis 会执行将所有的文件当作脚本尝试执行。

    而很巧,有人上传的一张图片里面恰好有一段 PHP 或 ASP 的代码,

    那么,这个图片就算是可以在你服务器上为所欲为了。

    “怎么会有人把图片作为动态脚本执行”,很傻是不,很不巧,曾经确实如此。
    LeeReamond
        6
    LeeReamond  
    OP
       226 天前
    @misdake 确实,我只考虑了图床需求,没考虑其他网站接受图片上传可能有各种各样的需求,感觉有点被原贴关于储存方式的讨论带跑偏了。仔细看了你的帖子似乎是 nginx+phpfpm 相关的漏洞,随着现代 nginx 被当做反代使用方式增多和 php 使用减少本身发生这个特定漏洞的情况应该很少了,所以在 2022 年的角度考虑可能就是维护图片解码库的朋友注意一些就不会有啥问题。。
    cmdOptionKana
        7
    cmdOptionKana  
       226 天前
    @misdake 比如给图片加水印等操作,转换成 base64 也不是个好办法呀。任何操作都需要先还原成原来的文件。
    zerofancy
        8
    zerofancy  
       225 天前 via Android
    曾经防止数据库文件被下载的一个手段是将后缀改为 asp ,然后解释为脚本就不可以下载了。然后有人就发现可以直接往数据库里扔一句话木马。
    zerofancy
        9
    zerofancy  
       225 天前 via Android
    不过这是超远古居民了😂
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1221 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.