【实战】Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析

本文详细分析了Cyrus IMAP Server中IMAPMAGICPLUS模块的预验证远程缓冲区溢出漏洞。通过对服务器的登录流程和Python信号处理进行研究,揭示了该漏洞的成因和潜在风险。
摘要由CSDN通过智能技术生成

Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析


创建时间:2004-12-06
文章属性:原创
文章提交: san (san_at_xfocus.org)

Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析

Stefan Esser发现了Cyrus IMAP Server的四个漏洞,其中IMAPMAGICPLUS预验证远程缓冲区溢出漏洞最危险,也最容易利用。本小节主要介绍对此漏洞的分析。

1 定位漏洞

通过比较imapd.c源文件的Cyrus IMAP Server 2.2.8和2.2.9版本,可以很快发现问题代码出现在imapd_canon_user函数:

    if (config_getswitch(IMAPOPT_IMAPMAGICPLUS)) {
    /* make a working copy of the auth[z]id */
    memcpy(userbuf, user, ulen);
    userbuf[ulen] = '/0';
    user = userbuf;

userbuf是imapd_canon_user函数的一个局部变量,大小是MAX_MAILBOX_NAME+1,也就是491。user是imapd_canon_user函数带入的参数,并没有做长度检查,当IMAPOPT_IMAPMAGICPLUS选项打开的时候会执行memcpy操作,导致栈溢出,函数返回地址将被覆盖。在Cyrus IMAP Server 2.2.9版本的代码做了如下的修补:

    if (config_getswitch(IMAPOPT_IMAPMAGICPLUS)) {
    /* make a working copy of the auth[z]id */
    if (ulen > MAX_MAILBOX_NAME) {
        sasl_seterror(conn, 0, "buffer overflow while canonicalizing");
        return SASL_BUFOVER;
    }
    memcpy(userbuf, user, ulen);
    userbuf[ulen] = '/0';
    user = userbuf;

可以看到这是一个非常典型的栈溢出漏洞。

2 触发漏洞

虽然很容易就找到问题代码,但重要的是找出触发该漏洞的方法。首先得安装一个存在此漏洞的Cyrus IMAP Server,安装过程参见Cyrus的文档,本文不再详述。安装完以后在/etc/imapd.conf的最后加上如下行:

imapmagicplus: 1

这样就打开了IMAPMAGICPLUS选项,然后启动服务。user变量就是用户输入的用户名,那么尝试用python脚本登陆Cyrus IMAP Server:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值