【问题标题】:Finding stack buffer overflows查找堆栈缓冲区溢出
【发布时间】:2015-07-03 02:55:51
【问题描述】:

我已经阅读了关于 堆栈缓冲区溢出 和堆溢出的 5 篇论文/文章和 2 个视频。我编写了一个易受攻击的溢出和利用的程序,在端口 7777 上运行了一个易受攻击、溢出和利用的服务器。但我不明白的是如何在 Windows(或其他操作系统)或软件中查找漏洞。我正在使用 gcc 和 gdb 进行调试,以找到编写漏洞利用程序所需的一切。如何在其他程序/软件上找到堆栈缓冲区溢出漏洞以及如何调试易受攻击的程序或可以使用 gdb?

【问题讨论】:

  • gcc 和 gdb 也可用于 Windows。
  • 你能告诉我你是如何实现你所说的两个漏洞的吗?特别是我想知道的目标操作系统。
  • 如果您尝试做的事情是合法的,那么我认为您可以请求并接收您想要测试其弱点的软件的源代码。
  • 我溢出/利用的第一个程序是一个简单的程序,它接受输入并将其保存到缓冲区而不检查边界。使用 gcc 和 gdb 查找需要多少字节才能到达帧指针。这是在 Windows 7 64 位上完成的。第二个漏洞利用是远程漏洞利用,我在笔记本电脑上托管了一个服务器(操作系统是 kali-linux),服务器程序允许计算机连接到它,然后可以接受输入(命令)并且没有检查它的边界。我将 gdb 连接到服务器,一旦缓冲区溢出,我使用 gdc 和核心转储来查找堆栈指针的位置 - 到 icbytes

标签: c memory stack-overflow heap-memory exploit


【解决方案1】:

查找堆栈缓冲区溢出有两种主要方法:

黑盒测试 测试应用程序是否存在堆栈溢出漏洞的关键是提供与预期相比过大的输入数据。然而,让应用程序处理任意大的数据是不够的。有必要检查应用程序的执行流程和响应以确定是否实际触发了溢出。因此,定位和验证堆栈溢出所需的步骤是将调试器附加到目标应用程序或进程,为应用程序生成格式错误的输入,使应用程序接受格式错误的输入,并检查调试器中的响应。调试器允许测试人员在漏洞被触发时查看执行流程和寄存器的状态

灰盒测试 手动检查代码(反汇编)。在查看堆栈溢出代码时,建议搜索对不安全库函数(如gets()、strcpy()、strcat() 等)的调用,这些函数不会验证源字符串的长度,并盲目地将数据复制到固定大小的缓冲区中。 除了手动检查堆栈溢出的代码外,静态代码分析工具也可以提供很大帮助。尽管它们往往会产生大量误报并且几乎无法定位一小部分缺陷,但它们确实有助于减少与发现低悬成果相关的开销,例如 strcpy() 和 sprintf() 错误。 RATS、Flawfinder 和 ITS4 等各种工具可用于分析 C 风格的语言。

这些测试的最佳工具是:OllyDbg 和 IDA Pro(用于静态和动态调试)。

【讨论】:

  • @user3673835 欢迎您。如果您发现答案有用,如果您能投票并接受答案,我将不胜感激:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多