堆溢出的DWORD Shoot核心原理-口语化

1、双向链表上有a、b、c一共3个连续的堆块,a、b、c三者之间的实际物理地址可能相差很大,但是绝对不会三者之间无其他字节,如果无其他字节,那表示他们三个可以合并成一个物理连接起来的大块,堆管理系统很快会让他们三者搞基成一个大个子堆块,拆下来重新按照其尺寸重新链接到该去的链表位置去。。。而不会放纵其在链表上物理地址紧密链接的同时还分成3个堆块串联在链表上。

2、返回正题,拆下其中一个堆块b时,会产生a、c之间的空缺,导致a、c无法相互知晓。所以堆管理系统会在拆b时,把a和c缝缝补补,连在一起,成为新链表,等待下次拆分、合并等等。

  关键来了,

  【1】双向链表上a与b之间有从左往右的一条线(这条线体现在:每个堆块都在距离自身堆块块首的相对第9~12字节保存他前方那个堆块(远离链表头的方向)的块数据的地址)连起来.

  【2】又有从右往左的一条线连起来(这条线体现在:每个堆块都在距离自身堆块块首相对13~16字节处保存他屁股后面那个堆块(当前堆块屁股位置是靠近链表头地址的那边)的块数据的地址);

  以此类推每2个相邻堆块之间由于双向可循,由于每个堆块上都记载着往该块左边或右边方向走的下一个地址(即上述9~12、13~16字节数据均为地址值),所以断掉一个块(暂称为块b)时,该断掉的块的左右两边欲形成新连接,必须知道彼此的地址。这个重新知晓相互地址的任务由即将被拆下来的堆块去处理,因为它才同时熟悉两边的邻居,知道他们地址,知道他们联系电话,QQ号,微信号。。。于是该堆块(又叫节点)把他身上距离头顶第9~12字节的4个字节的数据(实际上是他右邻居堆块的门牌号地址,举例0x001A0038)抄下来,给到左邻居。怎么给?在他身上距离头顶第13~16字节处的4个字节,就是他左邻居的门牌号地址(这个数据肯定比他右邻居的门牌号地址小,假设0x001A000A),我们于是按照这个左邻居地址,在堆管理系统帮助下,把0x001A0038这个数值给到左邻居家去:mov [0x001A000A],0x001A0038    。。。。都知道[]方括号的意思吧。等右邻居的地址给了左邻居后,再把左邻居的地址按此方法给到右邻居,他此时也就从链表上断下来了,因为空表链表上已经没有他存在的痕迹了。

  而这个断掉块b过程之前,我们先通过字符串变量溢出,将字符串从其他块溢出到块b中,即覆盖了他的第9~16字节数据,效果就是改了他身上所保管的左、右邻居门牌号地址,一般就是右邻门牌号覆盖为shellcode入口地址,左邻门牌号覆盖为各种特殊地址,比如重要函数调用地址,栈帧中函数返回地址,栈帧中SEH的句柄。这样,在块b断下来时,他会把shellcode地址赋值到某个经常调用的函数的地址上,或栈帧中当前函数返回地址上,或栈帧中距离当前栈最近的SEH异常处理最近的那个句柄。

  然后堆块这边就没他们什么事了,就等着某个函数被调用,错误跳转到shellcode地址去执行我们构造的code;等着栈帧中当前函数返回时执行的却是跳转到shellcode地址去执行我们构造的code;溢出发生了导致系统启动异常处理,执行了SEH异常处理相关函数,跳转到shellcode地址去执行我们构造的code。。。。。。

  溢出并恶意执行了我们的代码。

  现在回头去看,堆块断下来时,把错误的右邻居门牌号(子弹,shellcode入口地址,共计4个字节,即为DWORD双字),抄给左邻居时(左邻居的地址已经被改为目标地址,任何能被调用的地址),就是发生了子弹射击,DWORD Shoot是也。

   --至于后面的把左邻居地址给右邻居地址的操作,会导致反射,影响shellcode,这个以后再分享了。

转载于:https://www.cnblogs.com/taonull/p/3930054.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

* 类描写叙述:字符串工具类 类名称:String_U

/******************************************* 类描写叙述:字符串工具类 类名称:String_U* ******************************************/public class String_U {private String_U() {}/*** 检查手机号是否合法* * param phoneNum* return boolean tru…

git 撤销 merging

当我们在合代码的时候经常会遇到一些问题,这时候分支就处于merging状态,这时候可以用下面的命令撤销$ git reset --hard HEAD (or sha_1) 不知道有没有更好的办法,希望大家能给出自己的办法 转载于:https://www.cnblogs.com/WangHaiMing/p/80…

php 命令安装tp5,tp5.1框架的下载与安装方法步骤(图文)

大家可以都知道啊,tp框架5.1之前的版本都是可以在thinkphp的官网进行下载压缩包来安装框架的,那么在从tp5.1开始啊,就取消了下载压缩包安装的方法,那么我们如何进行下载呢?tp5.1的手册中开始就有提到tp5.1框架有两种安…

[连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计

目 录 第十三章 中英文版本切换设计... 2 13.1 不用自带的资源文件的理由... 2 13.2 配置文件... 2 13.3 语言管理类... 3 13.4 应用管理类... 12 13.5 小结... 12 第十三章 中英文版本切换设计 13.1 不用自带的资源文件…

【JavaScript】apply和call的区别在哪?

我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里我做如下笔记,希望和大家分享.. 如有什么不对的或者说法不明确的地方希望读者多多提一些意见,以便共同提高.. 主要我是要解…

php js动态显示系统时间,PHP+JS动态显示服务器时间

摘要:JS默认只能获取当前系统时间,若想获取服务器时间,必须加上后端语言配合,PHPJS获取服务器端时间代码:运行结果:2017-4-4 15:...JS默认只能获取当前系统时间,若想获取服务器时间,…

SQL中的事物【转】

来源于:http://www.cnblogs.com/zhuifengnianshao/archive/2010/11/24/1886939.html事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位…

Mybaitis JdbcType 和javaType

2019独角兽企业重金招聘Python工程师标准>>> MyBatis 通过包含的jdbcType类型 BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINEDTINYINT REAL VARCHAR BINARY BLOB NVARCHARSMALLINT DOUBLE …

装箱和拆箱(js的问题)

装箱:基本数据类型 -> 引用数据类型 var num 123; var numObj new Number(123);console.log(typeof num) // number console.log(typeof numObj) // object 拆箱:引用数据类型 -> 基本数据类型 var numObj new Number(123);console.log(numO…

php文件缓存代码,php文件缓存实例代码

php教程文件缓存实例代码缓存在实际使用当中应用很广泛,可以减轻对服务器数据库教程的访问,提高运行速度。目前很多cms内容管理系统中频繁使用缓存机制来提高系统运行的效率cache.php 代码如下:php代码/*用户需要事先定义的常量:_…

[架构] 分布式和集群的区别

一次在群里面看到群友们在讨论这个的区别,看了他们发表的言论,觉得很有道理,很通俗易懂,就当做学习的笔记记录在这里: 用两个例子看清楚分布式和集群的区别: 例子1: 如果一个任务由10个子任务组…

JQuery.lazyload 图片延迟加载

1.引入 jquery.lazyload.js 2. 延时加载的方式 <script type"text/javascript">   $(function() {     $("img").lazyload({     effect : "fadeIn"    });   });   </script> 3. 把阀值设置成200 意思就是当图…

如何把UIView转成UIImage,解决模糊失真问题

最近工作中&#xff0c;遇到一个需求&#xff0c;需要把一个UIView对象转成UIImage对象显示。经过网络搜索&#xff0c;找到如下答案&#xff1a; ?12345678-(UIImage*)convertViewToImage:(UIView*)v{CGSize s v.bounds.size;UIGraphicsBeginImageContext(s);[v.layer rende…

php数据趋势曲线,数据曲线图怎么做

数据曲线图怎么做&#xff1f;1、在电脑桌面上&#xff0c;新建一个excel文件(操作过程即为点击右键&#xff0c;在选项中选择“新建”选项&#xff0c;然后再选择“excel文件”&#xff0c;即可成功新建excel文件了)2、双击将新建的excel文件打开&#xff0c;输入你需要统计制…

ceph 分布式存储安装

[rootlocalhost ~]# rm -rf /etc/yum.repos.d/*.repo 下载阿里云的base源 [rootlocalhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [rootlocalhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/r…

基本技能

1、分析Android游戏积分机制、付费机制、存档机制2、游戏破解嵌入特定页面&#xff0c;页面涵盖logo&#xff0c;url外链等基础内容3、破解游戏呈现无限金币、免费道具、无敌等表现方式1、精通汇编语言、Java或C/C语言&#xff0c;对逆向工程有浓厚兴趣2、有代表作品3、 熟练掌…

STM32学习之路-SysTick的应用(时间延迟)

开发板&#xff1a;奋斗V5 好~ 菜B要来搞实验了.. 前面已经说了SysTick的工作原理什么的了,这里就不说了.. 先来做第一个实验&#xff1a; 盗自奋斗的样例,嘿嘿, 用SysTick产生1ms的基准时间,产生中断,每秒闪烁一次(LED1 V6) &#xff08;1&#xff09;外围时钟初始化&#xf…

centos akonadi mysql,MySQL数据库之在CentOS7上安装MySQL5.7

本文主要向大家介绍了MySQL数据库之在CentOS7上安装MySQL5.7 &#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习MySQL数据库有所帮助。获取RPM包# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm列出RPM包里都有哪些文件# rpm -q…

usaco-crypt1-pass

这个想了半天&#xff0c;终于过了&#xff1a; /* ID: qq104801 LANG: C TASK: crypt1 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>void debug_dummy() {return; }int n; int d[10];int numlen(int x) { …

凡事预则立(Beta)

听说——凡事预则立 吸取之前alpha冲刺的经验教训&#xff0c;也为了这次的beta冲刺可以更好更顺利地进行&#xff0c;更是为了迎接我们的新成员玮诗。我们开了一次组内会议&#xff0c;进行beta冲刺的规划。 上一张我们的合照&#xff1a; 具体会议议程如下&#xff1a; 1、讨…