gpt4 book ai didi

c - 查找缓冲区的地址

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:57 25 4
gpt4 key购买 nike

我有一个练习,我需要找到缓冲区 (buf2) 的开始和结束地址。我没有编辑代码的权限。

代码如下:

(level2代码的密码是fsckmelogic)

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, const char **argv) {
if (argc < 2) { printf("Fail. More Args...\n"); return 1; }
else {
setresuid(geteuid(),geteuid(),geteuid());
char buf2[4096];
char buf[16];
const char password[]="XXXXXXXXXXX";
strncpy(buf, argv[1], sizeof(buf) - 1);
if (strcmp(buf,password) != 0) {
printf("Wrong.\n");
return 1;
}
else {
strcpy(buf2,argv[2]);
printf("%s",buf2);
return 0;
}
}
}

最佳答案

好的,所以无需更改代码,但我假设您可以编译代码。此外,将从黑客的角度(给定网站)来解决这个问题,并且只使用黑客可能使用的工具和技术。最后,我假设您正在使用 Linux 机器。所以,让我们像这样编译代码,

     gcc level2.c -o so_test

现在我们想找出一些起始地址....所以让我们使用ltrace (我希望它安装在系统上)我们得到:

     ltrace ./so_test XXXXXXXXXXX ababaabaabab
__libc_start_main(0x4006f0, 3, 0x7fff291bddb8, 0x400800 <unfinished ...>
geteuid() = 1000
geteuid() = 1000
geteuid() = 1000
setresuid(1000, 1000, 1000, -1) = 0
strncpy(0x7fff291bdcb0, "XXXXXXXXXXX", 15) = 0x7fff291bdcb0
strcmp("XXXXXXXXXXX","XXXXXXXXXXX") = 0
strcpy(0x7fff291bcca0, "ababaabaabab") = 0x7fff291bcca0
printf("%s", "ababaabaabab") = 12

好吧……那又怎样?

  1. 记住 strncpy返回指向目标字符串的指针,并从代码我们知道目的地是buf , 因此它的起始地址是 0x7fff291bdcb0 (在我的机器上,你的号码会有所不同)。

  2. strncpy 的第三个参数是要复制的字符数,在本例中是15。从代码中我们可以看出strncpy的第三个参数。是sizeof(buf) - 1这意味着 sizeof(buf)返回16。由此我们可以推断出buf的结束地址。是 0x7fff291bdcb1 + 0x10 或 ox7fff291bdcc1

  3. 我们还可以了解到buf2的起始地址是 strcpy 的结果中的 0x7fff291bcca0函数调用。

  4. 由于printf的返回值,我们可以了解到用户输入的字符串长度为12个字符。函数调用。

  5. 那么现在剩下的就是找出buf2的终点了。我们可以开始向它投入输入,直到它把我们炸毁。提示,如果您不想输入相同字符的长字符串,您可以执行以下操作:

    ltrace ./so_test XXXXXXXXXXX `perl -e "print 'A' x 1024;"`  

只需将 1024 更改为您要将多少个字符泵入 buf2。在我的系统上,通过一些试验和错误,我发现我可以输入的最大值是 4151,插入 4152 A 的结果导致段错误(所以我们知道 buf2 的最大大小将是小于此)。

  1. 剩下要做的就是计算出 buf2 的长度。

希望这能给你一个开始,我不想为你完成所有挑战:)

关于c - 查找缓冲区的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450434/

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