Windows缓冲区溢出之SLMail

基本概念与环境准备

缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获取服务器控制权限等。

在Windows XP或2k3 server中的SLMail 5.5.0 Mail Server程序的POP3 PASS命令存在缓冲区溢出漏洞,无需身份验证实现远程代码执行。

注意,Win7以上系统的防范机制可有效防止该缓冲区漏洞的利用:DEP。阻止代码从数据页被执行;ASLR,随机内存地址加载执行程序和DLL,每次重启地址变化。

环境准备:SLMail 5.5.0 Mail Server,ImmunityDebugger_1_85_setup.exe,mona.py

安装好环境之后,确认SLMail的端口是否正常开启:


可以看到,25、110、180、8376端口都开放了。

接着查看services.msc:


邮件相关的服务的都开启了。

接着在Immunity Debugger中调用mona.py:先到Immunity Debugger的根目录中找到PyCommands目录,如C:\Program Files\Immunity Inc\Immunity Debugger\PyCommands,然后将mona.py放入该目录中。

接着Kali Linux来ping通SLMail服务器(win 2k3 server)并用nc连接SMTP的25、110端口:



对于未知协议的模糊测试,第一种方法是查看是否有RFC,有的话查看并在用户输入的部分进行测试;第二种是没有RFC指定的协议,可以通过Wireshark来抓包、查看该协议是如何进行指令传输的、命令格式时如何的。


POP3模糊测试(110端口)

可以尝试如上对命令输入大量的数据测试是否存在溢出,一种是nc连接110端口然后手工进行测试,另一种可以用脚本实现。

手工输入大量数据测试:


使用脚本自动化测试,由于各个测试阶段脚本变化不大,在最后再贴上汇合的脚本代码:



测试PASS命令接收到大量数据时是否会溢出

改进脚本,实现不断增大发送的数据量来进行测试:

同时,先开启Immunity Debugger的动态调试,确认监听SLMail的POP3进程:





回到Kali,运行2.py脚本:


发送到2700~2900字节的数据之后,发现程序崩溃了:


41即“A”的ASCII码十六进制值,可以看到几个寄存器都被“A”占满了,其中EIP也是。EIP寄存器存放下一条指令的地址,也就是说下一条指令的地址可以被溢出覆盖。

再到services.msc中查看,POP3服务以及关闭了:


接着重启它即可。

接着确定溢出的大致的字节数范围,改进脚本3.py:


同样溢出了:


接着重启服务,修改3.py脚本中的字节大小为2600再尝试看看:


可以看到程序还是崩溃掉了,但是EIP寄存器的数值并非是发送的“A”的ASCII码,即还没溢出到EIP寄存器上。


找出精确溢出的4个字节

通常找出精确字节的方法有如下两种:

1、二分查找法

2、唯一字串法:

这里为了方便便使用唯一字符串法,其可在Kali Linux的/usr/share/metasploit-framework/tools/exploit/pattern_create.rb脚本中可以生成唯一字符串:


然后将该字符串替换到脚本的buffer中。运行4.py:



</

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LogonUI缓冲区溢出是一种计算机安全漏洞,指的是在Windows系统登录界面(LogonUI)中,由于缺乏有效的输入验证措施,导致恶意用户能够向缓冲区内注入超出其分配空间的数据,从而造成系统崩溃或者远程攻击的风险。 缓冲区溢出的原因主要是由于程序员在编写代码时未正确考虑到输入的数据长度,导致输入数据超出了预分配的缓冲区空间。攻击者可以利用这一漏洞,向缓冲区注入恶意代码,从而执行远程攻击、篡改程序行为或窃取敏感信息等恶意行为。 为了防止LogonUI缓冲区溢出,开发人员应采取以下措施: 1. 输入验证:在接收用户输入数据时进行验证,确保输入数据的长度不超过预分配的缓冲区空间,避免缓冲区溢出。 2. 使用安全的API函数:使用安全的API函数来代替不安全的函数,这些安全API函数在处理缓冲区时会自动检查缓冲区边界,减少缓冲区溢出的风险。 3. 安全编程实践:开发人员应掌握安全编程实践并遵循最佳实践,如避免使用已知的不安全函数、特殊字符过滤、最小化权限等,以提高代码的安全性。 4. 及时修补漏洞:及时更新操作系统和应用程序的安全补丁,以修复已知的漏洞并提高系统的安全性。 总之,要防止LogonUI缓冲区溢出漏洞的发生,开发人员应积极优化代码、加强输入验证、使用安全的API函数,并及时修补漏洞。同时,用户也应定期更新系统和应用程序,增强系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值