0

我需要帮助在使用 GDB 的可执行文件中运行程序。

我有一个可执行文件名vuln。我不知道源代码,因为我正在做 CTF。当我分析可执行文件时,我发现了三个令人兴奋的函数:mainvulnflag. Vuln func 容易受到 BOF 攻击,但我不想那样做。我想做的是在gdb中运行可执行文件,我使用print (void) flag(param1, param2)命令直接运行flagfunc,因为这应该给我一个标志;但是,它不起作用,因为它说我的参数不正确,我确定不是。我也发现了跳转功能,但我不能传递任何参数。

那么有什么方法可以从带有参数的可执行文件中正确运行函数,否则我将不得不经历 BOF 的痛苦。

FLAG 和 VULN Func 的 GHIDRA 反汇编代码如下。

void flag(int param_1, int param_2){
    char local_50 [64];
    FILE *local_10;

    local_10 = fopen("flag.txt", "r");
    if(local_10 != (FILE *)0x0){
        fgets(local_50, 0x40, local_10);
        if ((param_1 == -0x21524111) && (param_2 == -0x3f212ff3)){
            printf(local_50);
        }
        return;
    }
    puts("Hurry up and try in on server side.");
    exit(0);
}

void vuln(void)
{
    char local_bc [180];
    gets(local_bc);
    puts(local_bc);
    return;
}
4

1 回答 1

0

print (void) flag(param1, param2)

不知道你的价值观param1param2是什么,但这似乎对我来说很好:

echo "hello" > flag.txt
gdb -q ./a.out

(gdb) start
Temporary breakpoint 4 at 0x555555555307
Starting program: /tmp/a.out

Thread 1 "a.out" hit Temporary breakpoint 4, 0x0000555555555307 in main ()
(gdb) p (void)flag(-0x21524111,  -0x3f212ff3)
hello
$2 = void
(gdb)
于 2021-05-11T05:42:01.673 回答