我已阅读了5篇关于堆栈缓冲区溢出的论文/文章和2个视频,以及堆溢出。我编写了一个容易被溢出和利用的程序,在端口7777上运行了一个易受攻击,溢出和利用的服务器。但我不明白的是如何在Windows(或其他操作系统)或软件中查找漏洞。我正在使用gcc和gdb进行调试,以找到编写漏洞所需的一切。如何在其他程序/软件上找到Stack Buffer Overflow漏洞,如何调试易受攻击的程序或者我可以使用gdb?
答案 0 :(得分:8)
查找堆栈缓冲区溢出有两种主要方法:
黑匣子测试 测试堆栈溢出漏洞应用程序的关键是提供与预期相比过大的输入数据。但是,使应用程序受到任意大的数据是不够的。有必要检查应用程序的执行流程和响应,以确定是否实际触发了溢出。因此,定位和验证堆栈溢出所需的步骤是将调试器附加到目标应用程序或进程,为应用程序生成格式错误的输入,使应用程序受到格式错误的输入,并在调试器中检查响应。调试器允许测试人员在漏洞被触发时查看执行流程和寄存器的状态
灰箱测试 手动检查代码(反汇编)。在查看堆栈溢出代码时,建议搜索对不安全库函数的调用,如gets(),strcpy(),strcat()等,这些函数不验证源字符串的长度,并盲目地将数据复制到固定大小的缓冲区中。 除了手动查看堆栈溢出代码之外,静态代码分析工具也可以提供很大帮助。虽然它们往往会产生很多误报并且几乎无法找到一小部分缺陷,但它们肯定有助于减少与发现低挂果相关的开销,例如strcpy()和sprintf()错误。 RATS,Flawfinder和ITS4等各种工具可用于分析C风格的语言。
这些测试的最佳工具是:OllyDbg和IDA Pro(用于静态和动态调试)。