堆溢出 对DWORD SHOOT的原理进行简单了解

2023-11-20 16:40

本文主要是介绍堆溢出 对DWORD SHOOT的原理进行简单了解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码

#include <windows.h>
main()
{ HLOCAL h1, h2,h3,h4,h5,h6;HANDLE hp;hp = HeapCreate(0,0x1000,0x10000);h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);h3 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);h4 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);h5 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);h6 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);_asm int 3//break the processHeapFree(hp,0,h1);HeapFree(hp,0,h3);HeapFree(hp,0,h5); _asm int 3h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);return 0;
} 

实验目的

简单理解DWORD SHOOT

实验准备

环境:windows xp
编译器:vc++
调试器:OD

实验过程

1.根据之前动调空表的经验直接找到申请的堆块的位置,六块申请了8个字节的空间,算上堆头8个字节,就相当于六块16个字节的内存,直接从尾块上面“切”下来。

在这里插入图片描述

2.释放奇数位的堆块,防止堆块合并
发现h1,h3,h5都链入了Freelist[2]

在这里插入图片描述
此时堆块的占用状况

NAMEFlag向前指针向后指针
h11 占用态0x003a06a8 (h3)0x003a0188(Freelist[2])
h20 空闲态NULLNULL
h31 占用态0x003a06c8 (h5)0x003a0688(h1)
h40 空闲态NULLNULL
h51 占用态0x003a0188(Freelist[2])0x003a06a8 (h3)
h60 空闲态NULLNULL

如果这时候对某一串数据的向前指针或是向后指针进行修改,那么就能使自己的shellcode成功的载入进程序里面.

MOV ECX,DWORD PTR DS:[EDI+0C]
MOV EAX,DWORD PTR DS:[EDI+8]
CMP EAX,ECX    
MOV DWORD PTR DS:[ECX],EAX
MOV DWORD PTR DS:[EAX+4],ECX

堆块的装载最后有类似以上的代码,如果将h3中的后向指针改为0x12345678前向指针改成0x11111111,那么最后执行链表拆卸的时候就是把0x12345678指向的东西移到前向指针的位置上。如果把这些地址换成shellcode的地址就成功装入程序了。
实际上堆块的分配、释放、合并操作都能引发 DWORD SHOOT,因为都涉及到了链表,只要修改指针就能导入恶意代码。

摘抄《0day安全》

这本书简单的介绍了一下溢出的攻击方式,感觉介绍的也比较全面,所以直接摘抄一手。
(1)内存变量:修改能够影响程序执行的重要标志变量,往往可以改变程序流程。例如,更改身份验证函数的返回值就可以直接通过认证机制。栈溢出时溢出的数据必须连续,而 DWORD SHOOT 可以更改内存中任意地址的数据。
(2)代码逻辑:修改代码段重要函数的关键逻辑有时可以达到一定攻击效果,例如,程序分支处的判断逻辑,或者把身份验证函数的调用指令覆盖为 0x90(nop)。
(3)函数返回地址:栈溢出通过修改函数返回地址能够劫持进程,堆溢出也一样可以利用DWORD SHOOT 更改函数返回地址。但由于栈帧移位的原因,函数返回地址往往是不固定的,甚至在同一操作系统和补丁版本下连续运行两次栈状态都会有不同,故 DWORD SHOOT 在这种情况下有一定局限性,因为移动的靶子不好瞄准。
(4)攻击异常处理机制:当程序产生异常时,Windows 会转入异常处理机制。堆溢出很容易引起异常,因此异常处理机制所使用的重要数据结构往往会成为 DWORD SHOOT 的上等目标,这包括 S.E.H、F.V.E.H、进程环境块中的 U.E.F 、线程环境块中存放的第一个S.E.H 指针。
(5)函数指针:系统有时会使用一些函数指针,比如调用动态链接库中的函数、C++中的虚函数调用等。改写这些函数指针后,在函数调用发生后往往可以成功地劫持进程。但可惜的是,不是每一个漏洞都可以使用这项技术,这取决于软件的开发方式。
(6)P.E.B 中线程同步函数的入口地址:天才的黑客们发现在每个进程的 P.E.B 中都存放着一对同步函数指针,指向 RtlEnterCriticalSection()和 RtlLeaveCriticalSection(),并且在进程退出时会被 ExitProcess()调用。如果能够通过 DWORD SHOOT 修改这对指针中的其中一个,那么在程序退出时 ExitProcess()将会被骗去调用我们的 shellcode。由于 P.E.B 的位置始终不会变化,这对指针在 P.E.B 中的偏移也始终不变,这使得利用堆溢出开发适用于不同操作系统版本和补丁版本的 exploit 成为可能。这种方法一经提出就立刻成为了 Windows 平台下堆溢出利用的最经典方法之一,因为静止的靶子比活动的靶子好打得多,我们只需要把枪架好,闭着眼睛扣扳机就是了。

这篇关于堆溢出 对DWORD SHOOT的原理进行简单了解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/395995

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构