如何使用gdb从可执行文件调用带有参数的func
我需要使用GDB在可执行文件中运行程序的帮助 我有一个可执行文件名如何使用gdb从可执行文件调用带有参数的func,gdb,executable,buffer-overflow,ghidra,Gdb,Executable,Buffer Overflow,Ghidra,我需要使用GDB在可执行文件中运行程序的帮助 我有一个可执行文件名vuln。我不知道源代码,因为我正在做一个CTF。在分析可执行文件时,我发现了三个令人兴奋的函数:main、vuln和flag。Vuln func易受BOF攻击,但我不想这样做。我试图在gdb中运行可执行文件,我使用print(void)flag(param1,param2)命令直接运行flagfunc,因为这应该给我一个标志;然而,它不工作,因为它说我的参数是不正确的,我肯定不是。我也发现了跳跃函数,但我不能传递任何参数 那么,
vuln
。我不知道源代码,因为我正在做一个CTF。在分析可执行文件时,我发现了三个令人兴奋的函数:main
、vuln
和flag
。Vuln func易受BOF攻击,但我不想这样做。我试图在gdb中运行可执行文件,我使用print(void)flag(param1,param2)
命令直接运行flag
func,因为这应该给我一个标志;然而,它不工作,因为它说我的参数是不正确的,我肯定不是。我也发现了跳跃函数,但我不能传递任何参数
那么,有没有办法从带有参数的可执行文件中正确运行函数,否则我将不得不经历BOF的痛苦
下面是GHIDRA对FLAG和VULN Func的反汇编代码
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;
}
print(void)标志(param1,param2)
不确定您的param1
和param2
的值是多少,但这似乎对我来说很好:
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)
当您尝试调用函数时,gdb的确切错误消息是什么?实际上没有错误消息。由于我的变量不匹配,只有“puts”(“快点,在服务器端尝试”);“行运行,if语句从未执行。我想,您可以将
rip
更改为指向flagflag()
,准备内存或修改用于比较的标志以指导执行,但是,目标是从远程计算机而不是你的计算机上读取flag.txt
,这样你就不会得到真正的标志。