gpt4 book ai didi

linux - heap overflow - segmentation fault 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:37 26 4
gpt4 key购买 nike

您好,我有以下程序:

int main(int argc, char **argv) {
char *buf1 = (char*)malloc(1024);
char *buf2 = (char*)malloc(1024);

printf("buf1 = %p ; buf2 = %p\n", buf1, buf2);
strcpy(buf1, argv[1]);
free(buf2);

}

输入是:

0000000: 41414141 41414141 41414141 41414141  AAAAAAAAAAAAAAAA
0000010: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000020: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000030: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000040: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000050: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000060: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000070: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000080: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000090: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00000a0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00000b0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00000c0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00000d0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00000e0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00000f0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000100: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000110: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000120: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000130: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000140: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000150: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000160: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000170: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000180: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000190: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00001a0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00001b0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00001c0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00001d0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00001e0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00001f0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000200: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000210: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000220: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000230: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000240: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000250: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000260: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000270: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000280: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000290: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00002a0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00002b0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00002c0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00002d0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00002e0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00002f0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000300: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000310: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000320: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000330: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000340: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000350: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000360: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000370: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000380: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
0000390: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00003a0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00003b0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00003c0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00003d0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00003e0: 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
00003f0: 41414141 ffffffff 42424242 42424242 AAAA....BBBBBBBB
0000400: f8ffffff f0ffffff ffffffff ffffffff ................
0000410: fc9f0408 aab00408

:- 0x804b0aa:shellcode 的地址(目前还没有,但如果它在那里也不起作用)- 0x8049ffc:空闲 - 0xc 地址(空闲函数位于:0804a008)- 0x804b008:指向第一个缓冲区数据的指针- 0x804b410: 指向第二个缓冲区数据的指针

每当我运行程序时,我得到:

buf1 = 0x804b008 ; buf2 = 0x804b410
*** glibc detected *** ./vuln: free(): invalid pointer: 0x0804b410 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0x19b501]
/lib/libc.so.6(cfree+0xd6)[0x19fec6]
./vuln[0x80484b4]
/lib/libc.so.6(__libc_start_main+0xe7)[0x145ce7]
./vuln[0x80483c1]
======= Memory map: ========
00110000-0012c000 r-xp 00000000 08:01 268227 /lib/ld-2.12.1.so
0012c000-0012d000 r--p 0001b000 08:01 268227 /lib/ld-2.12.1.so
0012d000-0012e000 rw-p 0001c000 08:01 268227 /lib/ld-2.12.1.so
0012e000-0012f000 r-xp 00000000 00:00 0 [vdso]
0012f000-00286000 r-xp 00000000 08:01 268245 /lib/libc-2.12.1.so
00286000-00288000 r--p 00157000 08:01 268245 /lib/libc-2.12.1.so
00288000-00289000 rw-p 00159000 08:01 268245 /lib/libc-2.12.1.so
00289000-0028c000 rw-p 00000000 00:00 0
0028c000-002a6000 r-xp 00000000 08:01 261718 /lib/libgcc_s.so.1
002a6000-002a7000 r--p 00019000 08:01 261718 /lib/libgcc_s.so.1
002a7000-002a8000 rw-p 0001a000 08:01 261718 /lib/libgcc_s.so.1
08048000-08049000 r-xp 00000000 08:01 149954 /home/eleanor/testing/heap/vuln
08049000-0804a000 r--p 00000000 08:01 149954 /home/eleanor/testing/heap/vuln
0804a000-0804b000 rw-p 00001000 08:01 149954 /home/eleanor/testing/heap/vuln
0804b000-0806c000 rw-p 00000000 00:00 0 [heap]
b7fec000-b7fed000 rw-p 00000000 00:00 0
b7ffd000-b8000000 rw-p 00000000 00:00 0
bffdf000-c0000000 rw-p 00000000 00:00 0 [stack]
Aborted (core dumped)

这让我很担心,因为堆上的值是正确的。 linux malloc/free 是否有可能发生变化,所以这不再可能了。如果是,我怎样才能使学习成为可能?如果不是,那似乎是什么问题,所以它不起作用?

最佳答案

每当您尝试了解溢出利用时,请记住禁用 ASLR 和 Canaries:

root@mfsec # echo 0 > /proc/sys/kernel/randomize_va_space

root@mfsec # gcc vuln.c -o vuln -fno-stack-protector

这应该可以解决问题,如果您不打算很快重新启动,请记住再次启用 ASLR ;)

关于linux - heap overflow - segmentation fault 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073181/

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