简单尝试利用维控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写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
随机推荐
- js事件、事件流以及target、currentTarget、this那些事
你是如此简单我却将你给遗忘 前面面试被问到js的事件机制 target.currentTarget.碰巧今天有时间来拔一拔,顺便记下.
- 1019. General Palindromic Number (20)
生词以及在文中意思 forward 向前地 backward 向后地 palindromic 回文的 base 基数(如十进制的10 和二进制的2) numeral system 数制 decimal ...
- 棋盘(noip2017普及组)
题目描述 有一个m \times mm×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色 ...
- 第一次靶场练习:SQL注入(1)
SQL注入1 本文章目的是对相关的黑客内容进一步了解,如有人违反相关的法律法规,本人概不负责 一.学习目的: 利用手工注入网站 利用sqlmab注入 二.附件说明 靶场网址:http://117.41 ...
- Linux常用命令之Yum
Linux Yum命令详解Yum全称Yellow dog Updater,Modified,是一个在Fedora和RedHat以及SUSE中提供的基于RPM包的软件包管理工具,能够从指定的服务器自动下 ...
- Spring动态获取已注入的对象的方法
1.根据类获取对象 @Autowired ApplicationContext context; GenericMapper<T,String> dao=(GenericMapper< ...
- Django项目的创建的基本流程---基本配置
一.项目分析: 二.需求分析 三.Git管理代码: 1.创建仓库 2.克隆仓库 3.设置虚拟环境 4.复制前端font代码 在font中打开终端,运行live-server 5.测试前端代码是否可以运 ...
- python 解方程
[怪毛匠子=整理] SymPy 库 安装 sudo pip install sympy x = Symbol('x') 解方程 solve([2 * x - y - 3, 3 * x + y - 7] ...
- ionic3/4 使用NavController 返回两层的方式
ionic3/4 使用NavController 返回两层的方式: this.navCtrl.popTo(this.navCtrl.length() - 3);
- iOS证书申请及使用详细说明
iOS 证书申请和使用详解(详细版)阅读 对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成 ...