简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞
这是别人给我发的,让我分析一下,看能否写出exp。只怪自己水平不够,最后没能写出exp,以下为自己的分析思路
环境为win10 pro x64 英文版(10.0.16299) 默认安全配置
一、漏洞分析
此漏洞是由于LeviStudioU在处理.G_Picture.xml文件的szFilename时没有对其长度进行检查,导致调用后续的函数MSVCR90!wcscpy时发生缓冲区溢出,从而引发SEH异常。
首先打开LeviStudioU,附加windbg,到达漏洞现场

此时引用了无效指针,再次执行到达可控位置

通过KB回溯堆栈调用,从0x0019d3a8位置的ntdll!KiUserExceptionDispatcher+0x26可判断调用了SEH程序

通过分析0x0019d860位置的Hmi_BmpLib_Dll!GetXmlBmpInfoByPos+0x24c,可判断上层函数为Hmi_BmpLib_Dll!GetXmlBmpInfoByPos;重新启动程序,用windbg中断Hmi_BmpLib_Dll!GetXmlBmpInfoByPos位置

单步运行到0x03042258位置,出现G_Picture.xml的文件路径。

其中eax为漏洞文件G_Picture.xml的路径。

一直单步运行,直到0x0304239e位置,此时程序准备清空缓冲区。

执行完0x30423ac后,此时会调用memset函数将缓冲区置为0,缓冲区的首地址为ecx=0x0019d426,空间大小为0x206h,存储内容为0。

继续执行到0x030423b4处,可以看到szFilename变量。

从0x030423b4至0x030423de处,这个过程会从G_Picture.xml文件中取得szFilename的值,并且值转换为unicode字符,即\x61\x61\x61………变为\x0061\x0061\x0061………。

接下来会调用MSVCR90!wcscpy函数。进入此函数,查看esp的值,其中0x19d424为目的地址,0x058fb988为源地址。

此时重点关注缓冲区地址处0x0019d426的内容值为0

继续执行到0x683b7130处,如下图所示会将源参数src的第一个值\x0061拷贝到缓冲区0x0019d426处。

查看缓冲区位置0x0019d426的值开始变为\0x00000061

以此类推,会将源地址内容逐个拷贝到缓冲区0x0019d426处


执行到漏洞触发位置,因为是seh异常,用!exchain查看异常,可知next SEH的地址为0x0019d854,seh的位置为0x0019d858。

此时改变szFilename的值,将得出:
SEH在第539字节后被覆盖,
Next SHE在537个字节后被覆盖(因为字符要被转换为unicode格式)

二、漏洞利用
根据以上漏洞分析可大致画出如下的栈分布图

思路1:将seh覆盖为pop pop ret(而且要找到类似0x00nn00mm的地址),然后将next seh改为jmp xx,最后在seh后添加shellcode,但最后因没有发现/safeseh OFF的模块而放弃。

思路2:利用加载模块之外的地址,找到pop pop ret、call/jmp dword ptr[ebp + xx]或call/jmp dword ptr[esp + xx]的地址,而且格式要为0x00nn00mm,经过查找,未发现符合0x00nn00mm的地址。

简单尝试利用维控LeviStudioU的一栈缓冲区溢出漏洞的更多相关文章
- Kali学习笔记22:缓冲区溢出漏洞利用实验
实验机器: Kali虚拟机一台(192.168.163.133) Windows XP虚拟机一台(192.168.163.130) 如何用Kali虚拟机一步一步“黑掉”这个windowsXP虚拟机呢? ...
- 简单尝试利用vultr vps自架PPTP上网用于工作学习需要
因为学习和工作的需要用到登陆海外网站查阅相关的资料和文档,之前有需要使用的时候是问网友索要的账户登录本地电脑拨号的,但是老是跟别人要还是不好,决定自己尝试搭建一个长期使用.看到有不少的介绍提到VULT ...
- 尝试利用slmail的漏洞来getshell
作者:Joe 本文属于Arctic shell原创内容计划文章,转载请注明原文地址! 二进制,计算机才可以理解的低级语言,简单来说它是一种信号,用电信号为例,0就是断电,而1就是有电,这样子010 ...
- 缓冲区溢出利用——捕获eip的傻瓜式指南
[译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who can't smash ...
- windows下简单的缓冲区溢出
缓冲区溢出是什么? 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等 ...
- Linux下简单的缓冲区溢出
缓冲区溢出是什么? 科班出身,或者学过汇编的应该知道,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑爆”,从而覆盖了相邻内存区域的数据 成功修改内存数据,可造成进程劫持 ...
- 缓冲区溢出利用与ShellCode编写
一.实验目的 熟悉编写shellCode的流程 掌握缓冲区溢出的利用 二.实验环境 系统环境:Windows环境 软件环境:C++ ,缓冲区溢出文件链接 三.实验原理 要实施一次有效的缓冲区溢出攻击, ...
- (转)sl简单自定义win窗体控件
sl简单自定义win窗体控件 相信大家接触过不少win窗体控件ChildWin子窗口就的sl自带的一个 而且网上也有很多类似的控件,而今天我和大家分享下自己制作个win窗体控件,希望对初学 ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
随机推荐
- Appium简介及工作原理
一.什么是Appium Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持IOS.Android及FirefoxOS平台.Appium使用WebDriver ...
- 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示
第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...
- web前端的前景
随着时代的发展,现在从事IT方向的人有很多,所以励志要成为前端开发工程师的人有很多.当然也有很多人在犹豫不知道该从事哪个方向,我今天就是来给大家分析一下Web前端开发的前景.包括工作内容,发展前景和薪 ...
- webdriver的三种时间等待( sleep(); implicitly_wait(); WebDriverWait();)
https://blog.csdn.net/HeatDeath/article/details/71774572 基于<Selenium 2自动化测试实战>的学习笔记(11)—— 设置等待 ...
- vim安装
vim的下载与安装 在线安装 sudo yum install vim 源码编译安装 1) 下载源码 git clone https://github.com/vim/vim.git 2) 编 ...
- 看到一个简单的背单词java程序的设计,收藏下
https://blog.csdn.net/qq_40605167/article/details/81023836
- 安装mysql5.5遇到的狗屁问题,最后还是细心一下就好
首先巩固下自己已经遗忘了一年的Mysql数据库和navicat可视化数据库,安装数据库没有具体要求直接点下一步就好,我第一次安装提示服务器名无效,后来发现了原因,mysql服务压根没有启动,也就是更直 ...
- Javascript学习二---DOM元素操作
Javascript 主要包括:JS的语法,DOM和BOM操作以及ECMAScript语法. 1 获取元素的方法 获取元素方法: 通过ID:document.getElementById(); 一个 ...
- 关于手机ios和安卓和pc的点击事件的兼容
var u = navigator.userAgent, app = navigator.appVersion; var clickEvent; var isAndroid = u.indexOf(' ...
- 基于Openstack环境下开启SRIOV
主题思想: 先在系统层面修改配置文件,再去openstack里面修改配置文件 compute node系统层面: 先确认下是否含有ixgbe moudle lsmod |grep ixgbe 修改/e ...