gpt4 book ai didi

c - 缓冲区溢出改变返回地址 C - 没有 main

转载 作者:太空宇宙 更新时间:2023-11-04 04:22:45 26 4
gpt4 key购买 nike

如何使用缓冲区溢出让 ​​eip 寄存器指向内存地址以在以下程序中执行我的 shellcode?

static int __init onload(void) 
{
void function1(char *arg1)
{
char buffer[10];
strcpy(buffer, arg1);
}

char *kernel_version = kmalloc(MAX_VERSION_LEN, GFP_KERNEL);
printk(KERN_WARNING "Hello world!\n");
// printk(KERN_EMERG "Version: %s\n", acquire_kernel_version(kernel_version));

find_sys_call_table(acquire_kernel_version(kernel_version));

printk(KERN_EMERG "Syscall table address: %p\n", syscall_table);
printk(KERN_EMERG "sizeof(unsigned long *): %zx\n", sizeof(unsigned long*));
printk(KERN_EMERG "sizeof(sys_call_table) : %zx\n", sizeof(syscall_table));

if (syscall_table != NULL) {
//function1("AAAAAAAAAAAAAAAAAAAAAAAAAAAB7F41B63");

original_write = (void *)syscall_table[__NR_write];
syscall_table[__NR_write] = &new_write;
write_cr0 (read_cr0 () | 0x10000);
.
.
so on...
}

这是代码 (https://gitlab.tnichols.org/tyler/syscall_table_hooks/blob/master/src/hooks.c) 的链接,上面显示了我需要创建缓冲区溢出并指向我的返回地址的位置。

我尝试用上面的代码用 26 个 A 溢出缓冲区,然后将我的返回地址指向“0xB7F41B63”,但它不会替换我的返回地址。另外我的代码无法在 gdb 中调试,所以任何人都可以建议调试器来逐步分析代码吗?

PS:我的代码没有 main,我尝试了一个带有缓冲区溢出的 main 的不同代码并且它有效,但是在这里当我插入带有 #include <stdio.h> 的 main 时,它给了我找不到 stdio.h 的错误。我安装了 g++,但我无法升级/更新我的操作系统,因为我无法更改 gcc 版本。

最佳答案

您不能在此处替换寄信人地址。 kmalloc 不直接在栈上分配空间,因此你不能覆盖返回地址。这里有一篇文章展示了如何利用类似的情况: Phrack

Also you CAN debug a kernel module

关于c - 缓冲区溢出改变返回地址 C - 没有 main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44840637/

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