袁世雄在"二进制漏洞挖掘学习分享"中深入探讨了基于数据处理的漏洞挖掘方法。他首先介绍了数据处理漏洞挖掘过程,包括关键步骤:
1. **寻找攻击界面**:这是漏洞挖掘的起始阶段,关注用户可控制的数据输入渠道,如网络接口(如recv、recvfrom等)、文件共享、命名管道、邮槽、IoCode、ActiveX、自定义URL协议、API hook中的参数以及窗口消息等,这些都是可能被恶意输入污染的地方。
2. **定位相关处理点**:通过调试工具(如ida、od、windbg)设置断点,包括内存断点和硬件断点,来跟踪数据在系统中的流动路径,找到涉及数据处理的API调用,例如recv、ReadFile、MapViewOfFile、DeviceIoControl等。
3. **标记污染数据的传播**:在代码执行过程中,通过经验和fuzz技术(即输入异常数据观察程序反应)来识别哪些部分会处理到输入的污染数据,从而标记数据的传播路径。
4. **分析污染数据的处理**:通过对处理代码的分析,了解程序如何处理输入的数据,包括但不限于逻辑型漏洞的利用。这可能涉及到逆向工程,比如理解解密函数以生成针对性的畸形数据包。
5. **网络fuzz遇到的问题与解决方案**:网络fuzz测试中面临的问题包括数据包格式要求、加密通信、多交互需求等。为提高fuzz的有效性,袁世雄建议逆向分析数据包结构,并据此生成定制化的畸形数据。他还提到inlinehook fuzz技术,通过动态挂钩解密函数,对解密后的数据进行操作,从而测试程序的敏感性。
6. **文件格式fuzz与IAT hook**:对于文件格式漏洞,使用IAT hook可以减少判断逻辑,提高程序运行效率。这种技术允许在目标程序的关键点上插入钩子,以便监控或修改数据处理行为。
7. **应对动态变化的hook点**:面对每次hook点都可能变化的情况,需要灵活的方法和技术来应对,这体现了在实际漏洞挖掘中的适应性和创新思维。
袁世雄分享的这个主题着重于二进制漏洞挖掘中的技术细节和策略,涵盖了从数据来源追踪、处理点定位到数据包分析和利用技术的多个层面,展示了在实际安全测试中的实战技巧和思考。