这是我们的实验环境
kali 172.18.5.118
smtp windows2003 172.18.5.117 pop3 110 smtp 25
本机 172.18.5.114
已经知道slmail存在PASS处的缓冲区溢出漏洞 当你输入的足够长的时候会缓冲区溢出
但是如果我们进行手动测试会显得很麻烦 所有这里我们使用脚本来跑这是01.py
import socket s = socket.socket(socket.AF_INET,socket.SOCKET_STREAM) try: print"\nSending evil buffer..." s.connect(('172.18.5.117',110)) data = s.recv(1024) print data s.send('USER Aadministrator'+'\r\n') data =s.recv(1024) print data s.send('PASS password\r\n') data =s.recv(1024) print data s.close() print "\nDone!" except: print "Could not connect to POP3"
先建立一个链接
发送魔鬼buffer \n是换行的意思
s.connect是连接目标的110端口
data 是回显的信息 pirnt输出显示信息
s.send是你要发送的内容
然后close这个链接
最后是未执行成功的报错(except)
但是小编这里遇到了这个问题 原来是windows的py与liunx不兼容造成的
以下是解决链接
https://blog.csdn.net/u010383937/article/details/73161475
这里是在kali里面在创一个记事本然后复制代码上去 改名为001.py完成的不兼容绕过
改好后
用户名收到 OK 密码回显错误 脚本是可以的
我们不断的增大向目标服务器的数据数量
接下来是002.py
在服务器端观察一下进程是如何溢出的
进入
点击播放来实时的监管这个344端口的进程
然后我们从客服端向服务器发送 数据在服务端在查看 这是进行的002.py
发到2900的时候发现他一直没有动了 那我们来到服务端来看一下
这是ASCII编码转换为10进制后就是40+1
EIP是下一步这个进程要进行的操作的地址 我们在这里发送大量的A将其复制了
所有说这里下一步的进程被我们发送的大量的A覆盖了 简单说就是这个程序被搞崩溃了。因为414141不是原来要执行的地址
这里我们进行重新启动一下
将A改成B
可以看出slmail的PASS命令存在缓冲区溢出的漏洞
EIP是存放下一条指令的地址 这是原来的EIP
精确的定位溢出位置 继续查找 刚才2900停了
现在我们发2700个A
2700个A也发生EIP寄存器的溢出了
我们试试2600个A
发现存在溢出了但是 2600不足以溢出到EIP
我们可以用以下方法
用kali里面现成的脚本来实现唯一字符串
下是的事目录 kali里面的默认目录
usr/share/metasploit-framework/tools/pattern_create.rb 2700
sploit-framework/tools/pattern_create.rb 2700
现在EIP里面存在了这么一串字符串
39 69 44 38
38 69 44 39
8 D i 9
但是windows内存里面的存放规则是高位
./pattern.offset.rb 39694438
自动计算后面的数字在数组里面产生的位置 也就是偏移量
找到位置是2606 所以我们在2607开始填充
验证EIP溢出位置是否真确
我们在2067位置填充BBBB
ASCII?是42424242
验证成功 溢出位置正确
紧跟着eip的是ESP20个c一个不少
我们可以在后面不填充20个C 从而让你的服务器来连接我的一个端口这样 就可以访问我的服务端口来访问你的服务器了
usr/share/metasploit-framework/tools/pattern_create.rb 2700