这个问题是关于《黑客:剥削的艺术》第二版第121页上的程序notesearch的利用。

漏洞利用中有些我不明白的地方:



这里的假设是notesearch程序的堆栈框架位于调用漏洞利用程序的堆栈框架之上。当编译版本存在于同一系统上时,这适用。

我的第一个问题是1.即使作为远程hack,这也可以工作吗?

我的第二个问题是
2.由于缓冲区已用于覆盖所有变量,包括返回地址以外的所有变量,因此notesearch程序如何按预期工作?
诸如“printing”之类的变量位于此堆栈框架中,并决定是否打印消息,所有这些似乎都工作正常。
即使调用函数位于相关堆栈帧的顶部(正在泛洪的字符串缓冲区位于该堆栈帧的顶部),但某些关键变量会被覆盖。

问题编号3。
假定String缓冲区是在执行notesearch开始后插入的新堆栈帧的一部分,则该缓冲区将覆盖该notesearch程序中的所有给定变量。缓冲区也是搜索字符串的值。根据程序逻辑,由于搜索字符串与消息不匹配,因此程序不应输出用户消息的详细信息。在这种情况下,将显示消息。我想知道为什么吗?

最佳答案

(供引用:这本书是http://www.tinker.tv/download/hacking2_sample.pdf,可从http://www.nostarch.com/hacking2.htm免费下载该代码。)

继续看书;第122页给出了另一个示例,然后有很多说明性文字,全面介绍了该漏洞利用程序。

这是notesearch的代码的相关部分:

int main(int argc, char *argv[]) {
    int userid, printing=1, fd; // file descriptor
    char searchstring[100];

    if(argc > 1)                        // If there is an arg
        strcpy(searchstring, argv[1]);   //   that is the search string
    else                                // otherwise
        searchstring[0] = 0;             //   search string is empty

    userid = getuid();
    fd = open(FILENAME, O_RDONLY);   // open the file for read-only access

你写了:



不,那是错的。这里只有一个相关的堆栈框架:main()中的notesearch函数的堆栈框架。我们通过./notesearch xyz...内部的system()调用来调用exploit_notesearch的事实是无关紧要的。我们也可以直接在bash命令行上调用./notesearch xyz...,或者欺骗其他一些进程(例如bash)代表我们执行它。



当然。



好吧,它实际上并没有按预期工作。再次查看输出:
reader@hacking:~/booksrc $ gcc exploit_notesearch.c
reader@hacking:~/booksrc $ ./a.out
[DEBUG] found a 34 byte note for user id 999
[DEBUG] found a 41 byte note for user id 999
-------[ end of note data ]-------
sh-3.2#

给您一个 shell 显然不算作“按预期工作”。但即使在此之前,该程序仍声称在/var/notes中为用户ID 999找到注释,这可能表明它有点困惑。作为恶意黑客,我们不在乎关于notesearch程序的垃圾输出的信息;我们只关心它最终到达main()的末尾并返回到我们的shellcode,从而使我们能够访问shell。

但是,如果您想知道我们如何在不覆盖局部变量useridprintingfd的情况下覆盖返回地址,则至少有三种明显的可能性:

A. 也许这些变量分配在堆栈上的searchstring下面。

B. 也许这些变量是在寄存器中分配的,而不是在堆栈中分配的。

C. 绝大多数情况下,这些变量覆盖,但是它们的初始值与程序无关紧要。例如,userid可以获取任何值,因为该垃圾值将立即在下一行被getuid()覆盖。唯一的初始值重要的变量是printing。甚至printing仅在碰巧获得值0时也改变了程序的行为,而它也无法获得值0,因为根据设计,我们要复制的数据完全由非零字节组成。

关于c - Notesearch漏洞利用异常(Hacking : Art of Exploitation),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21074333/

10-16 19:16