gpt4 book ai didi

linux - 内核利用 shellcode

转载 作者:太空宇宙 更新时间:2023-11-04 05:05:31 28 4
gpt4 key购买 nike

我想在 32 位 Linux 上为内核模式编写 shellcode,以实现以下目的:

commit_creds (prepare_kernel_cred(0));

所以我创建一个文件:

xor eax, eax
call 0x1234567
call 0x1234568
ret

其中0x1234567是prepare_kernel_cred的地址,0x1234568是commit_creds的地址,两者都从/proc/kallsyms中找到。

我使用 nasm -f elf 和 objdump -d it 对其进行汇编以获取机器代码。

我得到类似的东西:

31 c0               which is xor eax, eax
e8 7c 67 06 c1 which is call prepare_kernel_cred
e8 7c 65 06 c1 which is call commit_creds
c3 which is ret

这行不通。但是,使用 e8 79 代替 e8 7ce8 74 代替第二个 e8 7c 是可行的。我不记得我从哪里得到第二个机器代码(我把它放在另一个文件中),但我很好奇为什么这会起作用,而不是简单地像那样组装它。

这是什么类型的CALL?为什么如上所示简单地汇编代码不起作用?如果我使用 e8 79e8 74 进行调用,我的玩具漏洞可以很好地对抗我的人工内核错误,但当我使用 nasm/objdump 中的汇编机器代码时会失败。

最佳答案

以 E8h 开头的 CALL 变体是对由相对于当前指令的位移指定的地址的近调用。这解释了为什么不同指令的值需要不同。不过,我对你如何让 nasm 发出该代码感到困惑。你确定这不是作业吗?

关于linux - 内核利用 shellcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14949289/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com