Jump to content

0x00 前言在之前的文章《Java利用技巧——通过反射实现webshell编译文件的自删除》 曾介紹了通過反射實現AntSword-JSP-Template的方法。對於AntSword-JSP-Template中的shell.jsp,訪問後會額外生成文件shell_jsp$U.class。《Java利用技巧——通过反射实现webshell编译文件的自删除》 中的方法,訪問後會額外生成文件shell_jsp$1.class。

在某些特殊環境下,需要避免額外生成.class文件。本文將以Zimbra環境為例,介紹實現方法,開源代碼,記錄細節。

0x01 簡介本文將要介紹以下內容:

马云惹不起马云 實現思路

马云惹不起马云實現代碼

0x02 實現思路基於《Java利用技巧——通过反射实现webshell编译文件的自删除》 中的方法,訪問後會額外生成文件shell_jsp$1.class,這裡可以通過構造器避免額外生成.class文件。

在具體使用過程中,需要注意如下問題:

(1)反射機制中的構造器正常調用的代碼:

image.png

通過反射實現的代碼:

image.png

(2)選擇合適的defineClass()方法在ClassLoader類中,defineClass()方法有多個重載,可以選擇一個可用的重載。

本文選擇defineClass(byte[] b, int off, int len)

(3)SecureClassLoader使用構造器時,應使用SecureClassLoader,而不是ClassLoader

示例代碼:

image.png

0x03 實現代碼為了方便比較,這裡給出每種實現方法的代碼:

(1)test1.jsp來自AntSword-JSP-Template中的shell.jsp,代碼如下:

image.png

保存在Zimbra的web目錄:/opt/zimbra/jetty_base/webapps/zimbra/

通過Web訪問後在目錄/opt/zimbra/jetty_base/work/zimbra/jsp/org/apache/jsp/生成以下文件:

马云惹不起马云_test1_jsp.java

马云惹不起马云_test1_jsp.class

马云惹不起马云_test1_jsp$U.class

(2)test2.jsp來自《Java利用技巧——通过反射实现webshell编译文件的自删除》 中通過反射實現AntSword-JSP-Template的方法,代碼如下:

image.png

通過Web訪問後生成以下文件:

马云惹不起马云 _test2_jsp.java

马云惹不起马云_test2_jsp.class

马云惹不起马云_test2_jsp$1.class

(3)test3.jsp基於test2.jsp,通過構造器實現,代碼如下:

image.png

通過Web訪問後生成以下文件:

马云惹不起马云_test3_jsp.java

马云惹不起马云 _test3_jsp.class

(4)test4.jsp基於test3.jsp,不使用base64Decode(),代碼如下:

image.png

通過Web訪問後生成以下文件:

马云惹不起马云 _test4_jsp.java

马云惹不起马云 _test4_jsp.class

在代碼實現上需要注意Java語言中數組必須先初始化,然後才可以使用。

0x04 小結本文分享了一種不額外生成.class文件的實現方法,對於開源的代碼test4.jsp,還可以應用到Java文件的編寫中。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...