标签: amf

Flash/Flex中的UDP实时游戏可用开源RTMFP实现

是否有任何使用Flash 10 beta RTMFP UDP协议构建实时Flash游戏的示例.到目前为止,RTMFP示例似乎专注于闪存客户端之间的P2P网络,任何人都知道RTMFP上基于传统客户端/服务器UDP的通信的任何示例.

有谁知道RTMFP能够进行NAT防火墙穿越以允许客户"托管"实时游戏.想象一下,能够通过Flash客户端通过网络执行XBox实时匹配,并允许客户端通过Web浏览器托管基于Flash的实时"使命召唤"游戏服务器.

听起来Adobe的测试版Stratus项目为P2P实时通信提供了"再现"服务.我相信通过协调P2P"rendevous"与中央服务器来实现NAT导航以解决防火墙问题.

此外,Adobe Labs还有另一款名为Live Cycle Collaboration Service的产品:

试试RTMFP和ClientToClient:

使用RTMFP时有几个非常有趣的问题.首先,基于UDP意味着很多防火墙都不允许它.尝试连接并失败是很常见的.Cocomo通过使用几种协议同时尝试几个连接来解决这个问题.无论哪个成功都赢得了作为会话连接的奖励.

LCCS听起来像是一个"更全面"的解决方案,用于提供P2P游戏,以及标准的客户端/服务器UDP或TCP游戏.如果失败,它会尝试P2P UDP,它可以回退到客户端/专用服务器TCP或UDP通信.看起来这将是游戏服务提供商希望能够自己管理的东西("云"LCCS和Stratus服务不能为游戏服务器的"服务器端"提供足够的控制),有没有在相当于这些"rendevous"NAT穿透和TCP回退服务的开源上工作?

任何人都知道任何支持RTMFP(或任何其他Flash 10 beta UDP协议)的开源项目?有没有使用RTMFP的实时游戏示例?

networking actionscript udp amf

15
推荐指数
1
解决办法
8100
查看次数

AMF和Cross Site脚本漏洞混淆

我刚刚代表SFDC对Deloitte的安全审计工作进行了抨击.基本上我们使用flex并通过AMF进行​​通信.我们使用FluorineFX(而不是LCDS和Blaze).我们被告知,因为AMF响应没有编码,有人可以操纵AMF参数并插入Javascript,这是一个XSS漏洞.我正在努力理解AMF响应如何回复,这可以回应在错误消息中传递的JS,可以由浏览器或其他任何事情执行.我对使用HTML和JS的XSS非常有经验,但看到它被AMF标记有点意外.我与FluorineFx团队保持联系,他们也很困惑.

我很惊讶地看到AMF库对响应数据进行编码,Fluorine肯定没有.看起来像PortSwigger和IBM AppScan这样的安全应用程序在他们的工具箱中包含了这种类型的测试.您是否使用AMF遇到此漏洞并且能解释XSS问题如何表现出来?只是好奇.如果存在争论或者修补漏洞,我需要争论我的方法.考虑到使用Flex的AMF,我认为您可能有一些见解.

附加信息 ...

所以来自实际供应商PortSwigger的更多信息.我向他们提出了问题,网,网,他们承认这种类型的攻击非常复杂.最初他们将此归类为高严重性安全问题,但我认为他们的调整现在正在发生变化.我以为我会发布他们回复的内容,因为我觉得这个观点很有意思.

---来自PortSwigger的问题---

谢谢你的留言.我认为答案是这可能是一个漏洞,但开发并非易事.

你是对的,当AMF客户端使用响应时(除非它做了一些愚蠢的事情),问题不会出现,而是攻击者可以设计出浏览器使用响应的情况.大多数浏览器都会忽略HTTP Content-Type标头,并会查看实际的响应内容,如果它看起来像HTML一样会很乐意处理它.从历史上看,人们已经存在大量攻击,其中人们将HTML/JS内容嵌入到其他响应格式(XML,图像,其他应用程序内容)中,这是由浏览器执行的.

所以问题不在于响应的格式,而在于生成它所需的请求格式.攻击者设计包含有效AMF消息的跨域请求并非易事.XML请求/响应也会出现类似的问题,其中包含类似XSS的行为.当然可以创建一个有效的XML响应,它被浏览器视为HTML,但挑战在于如何在HTTP体内跨域发送原始XML.这不能使用标准HTML表单来完成,因此攻击者需要找到另一种客户端技术或浏览器怪癖来执行此操作.从历史上看,这样的事情在不同的时间都是可能的,直到它们被浏览器/插件供应商修复.我现在还没有意识到任何允许它的东西.

简而言之,这是一种理论上的攻击,它取决于您可以完全忽略的风险配置文件或阻止使用服务器端输入验证,或者通过在服务器上编码输出并在客户端上再次解码.

我认为Burp应该将AMF请求格式标记为缓解此问题,并将影响降级为低 - 我将解决这个问题.

希望有所帮助.

干杯PortSwigger

---更多关于审计的信息---

portSwigger所做的并不一定是二进制有效负载的混乱,他们所做的是混淆了发布到处理程序以指导请求的实际AMF参数.例如,这里是审计的一个片段,它显示了AMF对请求的部分响应......

HTTP/1.1 200 OK
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
P3P: CP="CAO PSA OUR"
Content-Type: application/x-amf
Vary: Accept-Encoding
Expires: Tue, 06 Apr 2010 18:02:10 GMT
Date: Tue, 06 Apr 2010 18:02:10 GMT
Connection: keep-alive
Content-Length: 2595

......../7/onStatus.......
.SIflex.messaging.messages.ErrorMessage.faultCode.faultString
.faultDetail.rootCause.extendedData.correlationId.clientId.destination
.messageId.timestamp.timeToLive    body.headers.#Server.Processing..kFailed 
to locate the requested type 
com.Analytics.ca.Services.XXX5c2ce<script>alert(1)</script>9ccff0bda62..
....I506E8A27-8CD0-598D-FF6E-D4490E3DA69F.Id95ab281-d83b-4beb-abff-c668b9fd42d5
..fluorine.I04165c8e-f878-447f-a19a-a08cbb7def2a.A.q..@............
.        DSId.Aeb5eeabcbc1d4d3284cbcc7924451711.../8/onRes
...[SNIP]...
Run Code Online (Sandbox Code Playgroud)

注意那里的"alert"脚本......他们所做的是将一些脚本附加JS附加到传递的参数之一,其中包含要调用的方法即'com.Analytics.ca.Services.XXX'.通过这样做,JS返回了一条错误消息,但是有很多事情要发生在JS上以便接近执行.似乎是间接威胁.

- 安全审计员的最新观点 -

我和更大的团队讨论过,我们都认为这是一次有效的攻击.正如PortSwigger在他的第一段中提到的那样,理论上,因为你将内容类型设置为x-amf,并希望它不会在浏览器中呈现,大多数浏览器都会忽略此请求并无论如何呈现它.我认为供应商在很大程度上依赖于内容类型设置的事实; 然而,像IE和某些版本的Safari这样的流行浏览器会忽略这一点.

通过利用CSRF或任何其他形式的发起XSS攻击可以轻松触发攻击.

apache-flex security xss amf fluorinefx

13
推荐指数
2
解决办法
4888
查看次数

切换到ColdFusion?

我目前正在为一家中型公司构建一个Adobe Air桌面应用程序,而且我相信我可以将这个应用程序用于其他许多"类似公司".它将大大提高效率,节省资金; 并希望能给我一些钱!:)我正在设计数据库结构和应用程序的布局.

我目前的技能:

  • 在PHP中间
  • 在Actionscript 3.0中间
  • 而且灵活和adobe air是新的

据我所知,AMF是Flex与服务器端语言之间"最佳"的通信形式.此外,我知道AMF是[ColdFusion到Flex]通信的原生,而PHP需要WebOrb,Zend AMF或AMFPHP进行[PHP到Flex]通信.我真的很喜欢ColdFusion是一个'一体化'.

我的问题是:

如果这是我计划花费几年或更长时间的程序,我会更好地使用ColdFusion或PHP吗?

  • 我不喜欢我不得不依赖PHP的"第三方程序"这一事实
  • ColdFusion,Flex和Adobe Air都是Adobe - >可靠的集成
  • 但是,我必须学习ColdFusion

请帮助,任何信息将不胜感激!

php air coldfusion amf

10
推荐指数
4
解决办法
1006
查看次数

在Flex应用程序和ColdFusion后端之间嗅探流量

在FlexFusion服务器上运行Flex应用程序和基于ColdFusion的后端之间嗅探/跟踪函数调用的好策略是什么?我知道他们使用AMF协议.

我习惯使用Fiddler来嗅探HTTP客户端和服务器之间的事务,只要你使用纯文本或XML HTTP请求和响应(包括那些通过SSL),它就能很好地工作,但它对二进制文件没有多大帮助像AMF over HTTP这样的协议.

在我的情况下,我确实可以访问客户端和服务器的源代码,但我正在寻找一种在任何Flex + ColdFusion情况下被动地嗅探流量的简单方法,而无需在服务器上调整任何内容.

apache-flex debugging coldfusion sniffing amf

7
推荐指数
3
解决办法
3453
查看次数

哪里可以获得Flex-Java DS(Blaze)培训资料?

我想知道你们中间是否有人知道我可以在Flex上获得非常好的培训材料(视频,示例等) - Java数据服务(BlazeDS将是理想的),除了Adobe直接提供的.我在想像David Tucker的博客

java apache-flex blazeds amf dataservice

7
推荐指数
1
解决办法
1475
查看次数

如何将Java对象的AMF(BlazeDS)序列化调试为Actionscript?

我正在使用BlazeDS远程访问我在Flex应用程序中使用的一些Java对象.我的一个课程出现了类型强制错误,但我无法解决这个问题.我有其他类使用相同的数据类型工作正常,我已经超过了我的映射十几次.据我所知,我正在遵循吸气剂和制定者的所有必要约定......

无论如何,我的问题是:我该如何调试这个问题? 在调试模式下运行Flex应用程序会向控制台发出一些通用错误,这些错误实际上没有多大帮助(TypeError:错误#1034:类型强制失败:无法将Object @ 5d1d809转换为valueObjects.SomeClass.).

我是这个整个AMF/Flex + Java的新手,所以任何提示都会非常感激.

java apache-flex blazeds amf livecycle

7
推荐指数
1
解决办法
1万
查看次数

在可能被序列化的类上使用字节码增强技术是安全的吗?为什么?

我还没有尝试过,但它似乎有风险.我正在考虑的案例是使用JiBX来处理简单的VO类.这些VO将通过AMF和其他可能的方案进行序列化.任何人都可以确认或否认我的怀疑,即像字节码增强这样的幕后操作可能会弄乱一些东西,并提供一些背景信息,为什么?另外,我对JiBX的具体情况感兴趣.

java serialization amf bytecode-manipulation jibx

7
推荐指数
1
解决办法
623
查看次数

6
推荐指数
1
解决办法
2741
查看次数

如何从AIR程序加载AIR运行时作为进程内共享库

我想在C语言中沿着java.exe构建一个特殊的AIR启动程序.

我已经看过使用进程查看器运行AIR程序,并且能够找到正在使用的AIR运行时DLL.AIR程序与Java不同之处在于它们作为特定于平台的可执行文件安装,这些可执行文件一旦启动就将AIR运行时绑定为进程内共享库(用户双击它们的图标).

好吧,我想制作一个类似java.exe的AIR启动器.

java.exe作为平台OS进程启动,该进程作为进程内共享库绑定到Java JVM运行时(JRE).要执行的java应用程序被指定为java.exe的命令行参数.一旦java.exe运行并且JVM完全正常运行,JVM类加载器就会加载指定的java应用程序类以供执行.然后,指定的Java应用程序接管,从某种意义上说"劫持"java.exe的进程.当然,指定的java应用程序在任何进程列表中显示为托管它的java.exe程序.

我想让AIR应用程序启动这样的工作.为什么?因此,我可以探索破解AIR的方法,并可能克服其中的许多不足之处.例如,对于初学者,我想使用一些可用于正在运行的AIR应用程序的新API来扩展AIR运行时体验.

我的第一笔业务是:

  • 实现ActionScript3到C的绑定接口,该接口与.NET PInvoke相当
  • 添加用于进程启动的API,与用于执行此操作的Java SE中的API相当(Runtime.exec,ProcessBuilder,Process)
  • 添加对AIR应用程序的支持,以便能够与stdin,stdout,stderr进行交互.奇怪的是,尽管Adobe在AIR中添加了对本地文件访问的支持,但他们忽略了与这些标准文件管道的交互(但它们可以在AIR支持的任何OS平台上找到).
  • 通过stdin,stdout,stderr实现对AMF的支持 - 因此AIR(或Java或任何支持AMF的语言)应用程序可以通过交换AMF对象来进行通信间处理.这将为AIR添加一点微软的PowerShell.

目前Merapi提供了一个带有Java的AMF桥,因此证明了它的功效.唉,Merapi必须使用localhost端口和套接字来进行进程间通信 - 相对于使用stdin/stdout/stderr进程间管道而言,这是一种笨拙的方式.

air pinvoke java-native-interface amf interprocess

5
推荐指数
0
解决办法
1273
查看次数

使用flex套接字读取AMF对象

我目前正在尝试使用套接字和AMF序列化对象在java和flex之间进行通信.

在java方面,我使用BlazeDS的Amf3Input和Amf3Output(flex-messaging-common.jar和flex-messaging-core.jar).

连接已正确建立,如果我尝试将对象从flex发送到java,我可以轻松读取对象:

FLEX方面:

protected function button2_clickHandler(event:MouseEvent):void
{
    var tmp:FlexAck = new FlexAck;
    tmp.id="123456789123456789123456789";
    tmp.name="A";
    tmp.source="Aaaaaa";
    tmp.ackGroup=false;
    s.writeObject(tmp);
    s.flush();
}
Run Code Online (Sandbox Code Playgroud)

JAVA方面:

ServerSocket servSoc = new ServerSocket(8888);
Socket s = servSoc.accept();
Amf3Output amf3Output = new Amf3Output(SerializationContext.getSerializationContext());
amf3Output.setOutputStream(s.getOutputStream());
Amf3Input amf3Input = new Amf3Input(SerializationContext.getSerializationContext());
amf3Input.setInputStream(s.getInputStream());
while(true)
{
    try
    {
      Object obj = amf3Input.readObject();
      if(obj!=null){
          if (obj instanceof AckOrder){
          System.out.println(((AckOrder)obj).getId());
      }
      }                 
}
catch (Exception e)
{
      e.printStackTrace();
  break;
}
  }
  amf3Output.close();
  amf3Input.close();
  servSoc.close();
Run Code Online (Sandbox Code Playgroud)

通过这种方式它可以很好地工作,但问题是读取从java端发送的对象.

我在java中使用的代码是:

for(int i=0;i<10;i++){
    ack = new AckOrder(i,"A","B", true);
    amf3Output.writeObject(ack); …
Run Code Online (Sandbox Code Playgroud)

java sockets apache-flex amf

5
推荐指数
1
解决办法
3125
查看次数