如何使用gdb从可执行文件调用带参数的函数
how to call a func with parameters from an executable using gdb
我需要帮助运行使用 GDB 在可执行文件中创建程序。
我有一个可执行文件名vuln
。我在做 CTF 时不知道源代码。当我分析可执行文件时,我发现了三个令人兴奋的函数:main
、vuln
和 flag
。 Vuln func 容易受到 BOF 攻击,但我不想那样做。我想做的是 运行 gdb 中的可执行文件,我使用 print (void) flag(param1, param2)
命令直接 运行 flag
func 因为这应该给我一个标志;但是,它不起作用,因为它说我的参数不正确,我确定不是。跳转功能我也知道了,但是不能传任何参数
那么有没有什么方法可以 运行 从可执行文件中正确地获取带有参数的函数,否则我将不得不经历 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;
}
print (void) flag(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
= void
(gdb)
我需要帮助运行使用 GDB 在可执行文件中创建程序。
我有一个可执行文件名vuln
。我在做 CTF 时不知道源代码。当我分析可执行文件时,我发现了三个令人兴奋的函数:main
、vuln
和 flag
。 Vuln func 容易受到 BOF 攻击,但我不想那样做。我想做的是 运行 gdb 中的可执行文件,我使用 print (void) flag(param1, param2)
命令直接 运行 flag
func 因为这应该给我一个标志;但是,它不起作用,因为它说我的参数不正确,我确定不是。跳转功能我也知道了,但是不能传任何参数
那么有没有什么方法可以 运行 从可执行文件中正确地获取带有参数的函数,否则我将不得不经历 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;
}
print (void) flag(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
= void
(gdb)