Mini-streamRipper栈溢出初体验

余生长醉 提交于 2019-12-04 16:28:24

0x00前言

感觉自己一段时间不理bin的话bin就离我远去了
必须得每天照顾它,才不会忘掉,唉
上软件,成就感和印象会加深不少
准备开始

0x01准备

这次找了一个有很多教程的 有缓冲区溢出漏洞的软件 miniripper
百度搜索就可以找到 在虚拟机里面下载安装
安装完了之后我们写一个py脚本 来测试他的崩溃

这里我们就是已经知道了 输入超长的文件会使软件崩溃
好下面我们先来生成一个文件

import os

filename = "test.m3u"
myfile = open(filename,"w")
filedata = "A" * 30000
#3000个A
myfile.write(filedata)
myfile.close

下面把这个生成的文件用ripper打开 就可以观察到崩溃了

0x02控制EIP

崩溃是崩溃了,可是我们怎么控制程序的流程嘞?

我们祭出神器mona 这是windbg可以用的一个插件 有好多很好的功能 慢慢学习

mona验证过程:

!load pykd.pyd
!py mona

首先我用mona生成一个30000长度的字符串,然后通过看崩溃时候
程序执行到的那个位置 来确定EIP的位置

生成字符串

!py mona pattern_create 30000

我们看到

显示生成了文件

进去文件里面复制生成的字符串 再次生成test.m3u 用ripper打开

首先先用windbg attach一下

查看崩溃

大专栏  Mini-streamRipper栈溢出初体验>

可以看到崩溃在了0x48336c48的位置,然后我们还可以用神器mona去计算偏移

!py mona pattern_offset 0x48336c48

可以看到显示出来偏移是5799 可是真正的偏移前面还要加上20280,为什么呢

因为mona生成的是循环的 我们用010看一下 右下角 每一个循环是20280的长度
所以最后的偏移就是20280+5799

下面试验一下是不是真的可以控制EIP了

我们把后几位变成ABCD的十六进制 看看程序的走向

果然是我们的0x44434241

0x03完成shellcode

好下面很清晰啦 我们要把这改成 jmp esp 所以我们的文件应该是

"A"*(20280+5799) + ""(jmp esp的地址) + ""{要执行的shellcode}

找jmp esp的命令

使用mona

!py mona jmp -r esp

我们随便选一个 0x7d322ebf

接下来是shellcode 选取一个弹框的 然后改成自己的名字!

这里就是需要知道 这里需要写一个弹框的MessageBoxA的地址,这个也是需要修改的 怎么去寻找呢 使用windbg里面的x命令

x User32!MessageBox

0x04查看结果

这样我们的shellcode全部完成 重新生成test.m3u文件,使用ripper打开!

泪水流下来T-T

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!