我不知道改变AMF响应流中的数据是多么可能,但您可能希望确保不能通过与浏览器和/或JavaScript的通信来操纵您的端点。看看这个 文章 在下面 的 恶意数据注入 强> 部分。
它不能是JavaScript注入,因为Flash Player会解释JS?如果我们在播放器中拥有本机JS甚至json支持,那么flash社区将会欣喜若狂。动作脚本没有eval函数,更不用说javascript了
让我们假设它们意味着你可以用actionscript注入它。 AMF协议不发送代码,它以原始类型或通用或类型对象的形式发送数据模型。可能发生的最糟糕的事情是他们分析您的模型并添加其他数据。这将是非常难以做到的,因为您无法注入数据,但必须解析所有数据,添加新数据,解析并保留AMF标头。因为AMF在其数据序列化中使用引用,这意味着当您需要重复的对象类型时,您必须看到第一个对象。然后,引用是偏移量,这意味着添加代码的可能性很小,但只是将值更改为现有参数。
远程对象有一个响应处理程序,它检查数据类型并期望将这些数据类型绑定到ui组件或您的代码所做的任何事情。如果这些数据类型错误,您将收到错误。如果AMF响应序列号错误,您将收到错误。如果在amf数据报中没有完美形成任何内容,您将收到错误。
远程对象自动重试。如果“注入”代码需要很长时间,Flex将重新发送一条消息,并使那个花费很长时间的消息无效。
只是我的两分钱。作为一名AMF开发人员,我经常希望通过amf数据报进行调试和测试很容易。不幸的是,你会收到一个错误。
韦德阿诺德
我无法解释有人会如何利用这个“漏洞”。
但是,您可以通过HTTPS连接而不是直接HTTP传递数据来解决问题吗?假设您的服务器上安装了SSL证书并启用了HTTPS,这应该是您编译到Flex应用程序中的services-config.xml文件中的一个小改动。
我捏了一个我的Adobe同事希望他能提供更多的见解。
我认为这是一个有效的攻击场景。相关的攻击是 GIFAR ,JVM被欺骗将gif文件视为jar。另外,我认为输出编码不是解决问题的正确方法。
攻击的前提是欺骗浏览器认为AMF响应是HTML或Javascript。这是可能的,因为有一个叫做的功能 MIME类型检测 ,本质上是浏览器说“开发人员可能不知道内容类型,我会玩上帝和(可能不正确)找出MIME类型”。
为了实现这一点,以下需要成立 -
<script>
<frame>
<a>
那么,你如何预防呢?
最好确保攻击者无法首先提出请求。一种非常简单有效的方法是在发出AMF请求时添加http请求标头,检查它是否存在于服务器上,如果不存在则拒绝该请求。该值可以是硬编码值,不必是秘密的。这是有效的,因为没有已知的方法通过标准的html技术添加自定义请求标头。你可以通过XmlHttpRequest或flash或silverlight这样做,但是浏览器不会为你解释内容类型,所以没关系。
现在,我对AMF知之甚少,但如果它已经添加了请求标头 - 那么这种攻击方案是不可能的。如果不是,那就添加一个。
转义内容的HTML不是一个好的解决方案。据称,有各种方法可以让浏览器认为响应实际上是HTML。换句话说,恶意输入不需要格式良好的HTML。尝试谷歌搜索mime嗅探,你应该能够找到各种方法来欺骗浏览器。
你好像在这里回答了你自己的疑问。
所以你有一个服务器端实现,它接受amf函数调用的参数,并在返回的输出中的某处包含输入数据。
我理解这主要是理论上的攻击,因为它涉及让有效负载由浏览器呈现而不是amf客户端。可能还需要浏览器/插件中的其他漏洞才能启用此方案。也许只要浏览器将输出处理为html / js,通过gateway.php或类似网站的CSRF帖子就会很容易被滥用。
但是,除非您需要调用者能够将尖括号传递到响应中,否则只需html-encode或剥离它们,这种攻击方案就会消失。
这很有意思。通常,人们只会为预期的数据使用者执行输出编码,但有趣的是,浏览器通常可能是一种特殊情况。这真的是一个地狱般的案例,但我总是让人们习惯于消毒和编码他们不受信任的输入。
这在许多方面让我想起了跨协议注入可以用来滥用协议的反射功能的方式,例如smtp,以在浏览器中实现XSS。看到 http://i8jesus.com/?p=75