【发布时间】:2017-02-12 21:50:26
【问题描述】:
我是 linux 的新手(只知道基本的东西)。我正在尝试在 linux 虚拟机中完成 Capture-the-flag (CTF) 风格的挑战。所以基本上我有一个 C 程序文件和一个标志。我无权访问标志。我可以读取程序文件并运行它。这是 C 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void check () {
int invalid;
if (invalid) {
printf ("Password invalid!\n");
}
else{
printf ("Password accepted!\n");
system ("/bin/cat flag3");
}
}
void password() {
char password [200];
printf ("Enter the password: ");
scanf ("%s" , password);
}
int main () {
password ();
check();
return 0;
}
我已经尝试调试它并查看了汇编程序的内容,但我不明白如何捕获密码以了解标志的内容。我试图从这个链接的帮助下破解密码,http://eliteinformatiker.de/2012/11/16/howto-crack-a-small-c-program-with-assembler 但我不确定我是否可以编辑 C 程序的二进制文件,因为在 c 文件的给定权限中,我只能读取它不能写入它。所以我想如果我不能修改一个c文件,我怎么能修改它的二进制文件(也许我错了)。在这一点上,我有点卡住了,我尝试调试它,查看了程序集内容,但我不确定我是否可以编辑二进制文件。我不确定要采取什么方法来捕获标志?
【问题讨论】:
-
invalid在哪里/如何设置?我看到它在函数check中使用,但我看不到它是如何设置的。 -
我不确定。其实我也对这一点感到困惑。我没有写过这段代码。我得到了这个代码。当我运行它时,它会要求输入密码,以便让我访问标志的内容。我不知道密码,所以现在我必须找到一些漏洞利用/后门来猜测密码以获得对标志的访问权限。而且我似乎找不到任何漏洞。
-
如果可以调试程序,应该可以修改比较。例如,invalid 是一个局部变量,因此存储在堆栈中。您应该能够在测试之前更改它的值。
标签: c linux binary virtual-machine disassembly