根据这个错误报告,第一个漏洞可以泄露敏感信息。
但是由于它没有提到要泄漏什么信息,我猜它会是堆栈?这对漏洞利用开发有何帮助?
根据这个错误报告,第一个漏洞可以泄露敏感信息。
但是由于它没有提到要泄漏什么信息,我猜它会是堆栈?这对漏洞利用开发有何帮助?
通常,这种泄漏(读取不是以 NULL 结尾的字符串)会导致读取恰好在字符串之后驻留在 RAM 中的内容。那么这取决于字符串的位置。如果字符串是堆栈分配的,那么这会公开堆栈的一部分(由于堆栈“增长”,这将探索当前函数的调用者的局部变量)。如果字符串是堆分配的,那么读取将在相邻块中溢出,这可能是任何事情,取决于自上次启动以来所有先前的分配,所以这是相当不可预测的。
内核中有一些高价值的目标(例如内核加密操作的加密密钥)。这些目标可以是局部变量、块分配的对象……这真的取决于上下文。简单地读取本地堆栈可以帮助微调缓冲区溢出漏洞(未调整的缓冲区溢出会导致崩溃,调整的缓冲区溢出会导致任意代码执行)。
大多数对内核内存的窥探不会揭示任何有价值的东西,因为某些代码(无论是内核还是某些应用程序)使用的 99.9%(至少)内存并不是真正保密的,并且可以在没有不良影响的情况下被揭示。但是,很难精确定位剩余的 0.1%:在一般情况下,保证给定信息不敏感几乎是不可行的。因此,将此类信息泄漏漏洞视为“潜在严重”并修复它们是最安全的。
在内核领域,读取内存地址的能力会破坏 ASLR。随机化是关于秘密的,如果你能读懂这些秘密,那么 ASLR 就不是很有帮助。
Web 应用程序世界中的一个简单示例是使用错误信息披露来获取完整路径。使用完整路径,您可以使用目录遍历来访问 Web 根目录,或使用 mysqlinto outfile或load_file()访问 Web 根目录中的文件。