小编Mar*_*vin的帖子

使用mmap在共享内存中执行shellcode

我正在尝试将程序代码放入并执行到共享内存区域.初始化和分配共享内存以及将shellcode复制到"新"内存按预期工作,但是一旦我尝试执行它,它就不起作用.有谁知道问题可能是什么?

我想那write(1, 0x6000d8, 13) = -1 EFAULT (Bad address)可能是错误?可能是什么导致了这个?

我包含了代码和stract错误输出.C代码基于Adam Rosenfield本期杂志中的回答.

C代码

#include <string.h>
#include <sys/mman.h>

// My own shellcode, obtained through objdump
// works on its own (a hello world-program)
const char shellcode[] = "\xb8\x01\x00\x00\x00\xbf\x01\x00\x00\x00\x48\xbe\xd8\x00\x60\x00\x00\x00\x00\x00\xba\x0d\x00\x00\x00\x0f\x05\xb8\x3c\x00\x00\x00\xbf\x00\x00\x00\x00\x0f\x05";

int main(int argc, char **argv)
{
    void *mem = mmap(0, sizeof(shellcode), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);

    memcpy(mem, shellcode, sizeof(shellcode));

    mprotect(mem, sizeof(shellcode), PROT_READ|PROT_WRITE|PROT_EXEC);

    int (*func)();
    func = (int (*)())mem;
    (int)(*func)();

    munmap(mem, sizeof(shellcode));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Strace日志

execve("./memory", ["./memory"], [/* 17 …
Run Code Online (Sandbox Code Playgroud)

c mmap shared-memory shellcode

7
推荐指数
1
解决办法
1334
查看次数

标签 统计

c ×1

mmap ×1

shared-memory ×1

shellcode ×1