天天看点

windows缓冲区溢出

写的不好多加指教

准备环境:

总体步骤:

windows缓冲区溢出

使用python脚本测试来连接

运行结果:

root@kal:/test# ./01.py

说明连接pop3成功.....

windows端要用immunity debugger打开slmail服务

打开immunity ==> file ==> attach ==>选择下面的那一行

windows缓冲区溢出

点右下角的attach,然后开始运行,运行时候,右下角的pause会变成running状态

windows缓冲区溢出

这时运行下面脚本:

运行情况:

windows缓冲区溢出

当执行到2700时。发现在也不动了,看一下windows状况,右下角已经出现了pase,已经停止了,在2600个字符发完之后还能发送,但是到了2700发送完之后就连接不上了,说明缓冲区溢出临界点发生在2600-2700之间。

windows缓冲区溢出

利用metasploit生成唯一字符串,发送:

root@kal:/test# /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 2700

重启windows的服务,immunity需要重新打开然后attach,让服务运行起来

修改上面的python继续发送:

运行脚本,观察windows停止时eip的位置

windows缓冲区溢出

用metasploit模块求出偏移量:

得知偏移量是2606,说明eip的位置在第2607-2610处

重启windows服务,编写下面脚本

服务再次暂停,这时发现eip处的位置变成4个c,说明确定eip的位置是正确的。

windows缓冲区溢出

查看存放c的个数

windows缓冲区溢出

可以看到下图,计算大概存放了400多个c,足够存放一个shellcode

windows缓冲区溢出

理想状况就是,将eip的内容修改成esp的地址,esp如果放置的是shellcode此时就会被执行,但是每次esp的地址不同,不能直接修改。这时,我们需要利用系统中自带的 jmp esp 帮我们跳转到esp位置,去执行shellcode

首先将mona模块导入immunity中的pycommands中

启动服务,将immunity打开attach上服务。

查看系统的所有模块

windows缓冲区溢出

需要选择前4个是false的,最后一个是true的。就只有三四个,但是其中只有slmfc.dll模块中含有 jmp esp

windows缓冲区溢出

其中 \xff\xe4 是汇编语言中的 jmp esp,可以通过kali工具翻译

输入十六进制需要加上 \x 。后面就以第一个作为jmp esp

双击查找的第一个 jmp esp,就可以看到地址是 5f4a358f

windows缓冲区溢出

接着上面的地址设置断点

windows缓冲区溢出

发送下面的脚本:

启动服务,发送脚本

windows缓冲区溢出

右下角会显示执行到断点处,停止

这时按下f7单步执行

windows缓冲区溢出

就可以看到,已经跳转到esp,里面装的43 也即是c

说明跳转成功了。

重启服务。

编写下面脚本‘’

#!/usr/bin/python

发送脚本,在windows端

windows缓冲区溢出

通过上图可以看到0x0a的字符缺失,并且之后的字符也有丢失,那么我们改掉0x0a继续发送一遍

windows缓冲区溢出

可以看到,我们踢掉0a之后,后面字符串就可以显示了,说明0a是个坏字符。\x0d也没有显示出来,以及\x00

这样就找到三个坏字符0x00 0x0d 0x0a

构造反弹shell

编写脚本:

上面的\x90 代表nop,不执行,目的是防止后面的shellcode因为其他原因缺失前面几个字节。

打开windows服务,用kali监听4444端口,然后发送脚本,得到一个反弹shell。

继续阅读