黑客攻防技术宝典web实战篇:攻击本地编译型应用程序习题

猫宁!!!

参考链接:http://www.ituring.com.cn/book/885

随书答案。

1. 如果不采用特殊的防御措施,为什么栈缓冲区溢出比堆溢出更容易被攻击者
利用?


利用基于栈的溢出,通常可以立即控制栈上的已保存返回地址,并因此控制当前
功能返回的指令指针。可以将指令指针指向包含 shellcode 的任意地址(通常位
于触发溢出的同一缓冲区内)。
利用基于堆的溢出,通常可以将内存中的任意指针设置为任意值。正常情况下,
利用这种修改来控制执行流还需要采取其他步骤。此外,使堆缓冲区溢出后,渗
透测试员可能无法立即实施攻击,而要依赖于影响堆内存分配的意外事件。


2. 在 C 与 C++语言中,字符串的长度如何决定?


标准 C/C++字符串的长度并没有具体的限制。这类字符串在遇到第一个空字节时
结束。


3. 与在因特网上运行的所有权 Web 应用程序中存在的溢出漏洞相比,非定制网
络设备中存在的缓冲区溢出漏洞为什么更可能被攻击者所利用?


虽然探查和检测远程 Web 应用程序中存在的缓冲区溢出漏洞相对较为容易,但要
设计出针对这类漏洞的有效攻击往往极为困难(尽管并非完全不可能)。
另一方面,通过在本地访问易受攻击的网络设备,就可以附加调试设备并全面调
查漏洞的本质,从而设计出经过优化的攻击,对漏洞加以有效利用。


4. 下面的模糊漏洞字符串为什么无法确定许多格式化字符串漏洞?
%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n%n...


默认情况下,最新的 printf 系列函数禁用了格式说明符%n。因此,应始终提交
大量%n 说明符,如果应用程序以危险的方式处理输入,这些说明符将受到支持,
并很可能会触发异常。
此外,仅仅使用 printf 系列说明符无法检测对其他格式化函数(如
FormatMessage)的危险调用。


5. 假设在一个大量使用本地代码组件的 Web 应用程序中探查缓冲区溢出漏洞,
发现了某个请求的一个参数可能存在漏洞,然而无法让监控到的反常行为再次发
生。有时,提交一个长度较长的值会立即造成系统崩溃,有时则需要重复提交几
次才能导致崩溃。另外,如果提交大量“良性”请求也会引起系统崩溃。
什么原因最有可能导致应用程序出现这种行为?


这可能说明应用程序中存在堆溢出漏洞。提交的每一个超长请求都可能破坏堆控
制结构。但是,通常情况下,只有在执行相关堆操作时,堆受到的破坏才会引发
异常,而堆操作的时间可能取决于与所提交的请求无关的其他事件。
请注意,在极少数情况下,其他操作也会导致上述行为——例如,由于负载平衡
或对输入的延期处理。

猜你喜欢

转载自www.cnblogs.com/landesk/p/10888574.html