将 URL 调用嵌入到图像/电影中

逆向工程 文件格式 嵌入式 开发
2021-06-13 20:59:57

有没有办法在图像或电影文件的原始数据中嵌入 URL 调用,以便在打开图像或电影时调用网络服务器?我希望能够通过向某人​​发送图像来获取他们的外部 IP,然后让图像回调我控制的网络服务器。

我只是想知道是否可以将某些 PHP 脚本嵌入到图像文件中。

2个回答

任何此类功能都取决于所使用的播放器或查看器。我知道没有任何图像格式需要观众进行任何类型的交互,但某些视频格式确实(或者更确切地说,确实)使用了它。

除了0xea提到的Quicktime,Windows Media/ASF格式允许嵌入脚本命令,其中之一就是打开一个URL:

http://support.microsoft.com/kb/828026

当内容所有者创建音频或视频流时,该内容所有者可以添加嵌入流中的脚本命令(例如 URL 脚本命令和自定义脚本命令)。播放流时,脚本命令可以触发嵌入式播放器程序中的事件,或者它们可以启动您的 Web 浏览器,然后连接到特定的网页。此行为是设计使然。

但是,这种行为:

  • 依赖于支持它的播放器(例如,我认为 VLC 或 mplayer 不支持它)
  • 用户可以禁用

所以,我不会依赖它。

编辑

说到图像,我刚刚意识到 SVG 使用的是 XML。XML 文件可能包含对外部 URL 的引用,例如 DTD 或模式。此外,SVG 本身支持引用同一文档中的其他元素,有时也支持引用外部元素:

http://www.w3.org/TR/SVG/struct.html#Head

我刚刚尝试过并打开以下 SVG 结果以获取到 Opera 中的远程服务器,但不是 IE:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="8cm" height="3cm" xmlns="http://www.w3.org/2000/svg" version="1.1">
  <desc>Local URI references within ancestor's 'defs' element.</desc>
  <defs>
    <linearGradient id="Gradient01">
      <stop offset="20%" stop-color="#39F" />
    </linearGradient>
  </defs>
  <!-- reference to a local definition -->
  <rect x="1cm" y="1cm" width="6cm" height="1cm" 
        fill="url(#Gradient01)"  />

  <!-- this element triggers a fetch of the specified URL in Opera -->
  <rect x="1cm" y="1cm" width="6cm" height="1cm" 
        fill="url(http://example.com/test1)"  />
</svg>

所以,它再次是特定于观众的,但您可能有更多的机会进行这项工作。

您要求的是非常接近远程代码执行,这通常是安全禁忌。有一些格式允许类似的事情。

据我所知,MOV 文件格式允许您在其中嵌入 url 或别名以用于电影的替代版本。我认为它通常用于流媒体目的,以便播放器可以请求更高或更低质量的电影和类似的东西。

我不知道这方面的很多细节,但您可以查看 MOV 文件格式。包含 url 的原子是 DREF。苹果应该有更多信息。查看QuickTime 文件格式规范了解详细信息。

例如,这里的示例文件(来自mplayer 示例数据库,已被证明是适用于各种媒体文件的非常宝贵的资源),实际上仅包含对另一个文件的引用,托管在http://stream.qtv.apple .com/events/jan/cat_power/cat_power_ref_28.mov服务器肯定能够通过这种方式确定客户端的 IP 地址。