跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Outlook MAPI开发指南


Anonymous

推荐的帖子

0x00 前言

Outlook MAPI提供了一组访问观点的接口,用来扩展观点应用程序的开发,本文将会介绍Outlook MAPI的基本用法,开源一份Outlook MAPI的实现代码mapi_tool,便于后续的二次开发。

0x01 简介

本文将要介绍以下内容:

基本知识

使用Outlook MAPI访问观点资源

开源代码mapi _工具

mapi _工具功能介绍

多种环境下的利用思路

0x02 基本知识

参考资料:

https://份文件。微软。com/en-us/office/客户端开发人员/outlook/mapi/outlook-mapi-参考

Outlook MAPI的使用前提:需要安装观点客户端

Outlook MAPI同EWS的区别:

Outlook MAPI用来访问观点客户端中的资源

EWS用来访问交换服务器中的资源

关于EWS的使用可以参考之前的文章《Exchange Web Service(EWS)开发指南》

观点客户端中的用户邮件存储在后缀名为原声音乐的文件中,和交换服务器中的数据库保持一致

原声音乐文件的默认保存位置:% local appdata % \ Microsoft \ Outlook \

邮件应用程式接口(邮件应用程序编程接口)主要包括以下三个功能:

通讯簿,设置电子邮件类型、协议等参数

运输,文件的发送和接收

消息存储,发送接收等信息的处理

0x03 使用Outlook MAPI访问Outlook资源

1.安装Outlook客户端并配置参数

2.启动Outlook客户端进行用户登录

3.使用C Sharp开发程序,实现读取收件箱邮件的功能

参考资料:

https://份文件。微软。com/en-us/点网/API/微软。办公室。互操作。展望?view=outlook-pia

https://份文件。微软。com/en-us/office/VBA/API/outlook。命名空间

开发环境:VS2015

新建工程,选择控制台应用程序,引用文件:微软办公室。Interop.Outlook.dll

注:

安装观点客户端后,可在c:\ Windows \ assembly \ GAC _ MSIL微软办公室。互操作. Outlook\下获得微软办公室。Interop.Outlook.dll

微软办公室。Interop.Outlook.dll要同观点的版本保持一致

微软办公室。Interop.Outlook.dll的文件属性-详细信息-产品名称对应支持观点的版本,产品版本对应具体的观点版本,如下图

2-1.png

产品版本对应具体的观点版本可参考:

https://份文件。微软。com/en-us/Exchange/new-features/build-numbers-and-release-date?redirectedfrom=MSDNview=exch server-2019

升c调代码示例:

使用系统;

使用微软办公室。互操作。观点

命名空间控制台应用程序3

{

班级计划

{

静态void Main(string[] args)

{

微软办公室。互操作。展望。应用程序app=新微软办公室。互操作。展望。应用程序();

微软办公室。互操作。展望。命名空间ns=应用程序.获取命名空间(“MAPI”);

微软办公室。互操作。展望。mapi文件夹收件箱=ns .GetDefaultFolder(Microsoft .办公室。互操作。展望。oldefaultfolders。olfolderinbox);

微软办公室。Interop.Outlook.Items项目=收件箱。物品;

控制台WriteLine('Size:' inbox .项数);

foreach(项目中的变量项目)

{

var mail=item as Microsoft .办公室。互操作。展望。mailitem

如果(邮件!=空)

{

如果(邮件。未读==真)

控制台WriteLine('[ ]未读邮件');

其他

控制台WriteLine('[]Mail ');

控制台WriteLine([*]Subject:' mail .主题);

控制台WriteLine('[*] From:' mail .发件人姓名);

控制台WriteLine([*]To:' mail .到);

控制台WriteLine([*]CC:' mail .CC);

控制台WriteLine([*]接收时间:'邮件.收到时间);

如果(邮件。附件。计数0)

{

控制台WriteLine('[]附件:'邮件。附件。计数);

微软办公室。互操作。展望。附件附件=邮件附件;

foreach(微软。附件中的办公室。互操作。展望。att附件)

{

控制台WriteLine(' Name:' att .文件名);

}

}

控制台。WriteLine('[*] Body:\r\n' mail。体);

控制台。WriteLine('[*]outlook version:' mail。outlook version);

控制台。WriteLine('[*] EntryID:' mail。EntryID);

}

}

}

}

}

代码执行后,将枚举收件箱中的消息,并输出以下内容:

收件箱号码

你读过吗?

主题

发言人

承销人

为…复印一份

收到时间

附件名称

文本内容

Outlook版本

EntryID

代码执行后,Outlook客户端会弹出警告,如下图所示

2-2.png

选择后,成功获取收件箱信息,如下图所示。

2-3.png

弹出窗口的原因:当前系统的防病毒软件未激活或已过期。

参考资料:

https://support . Microsoft . com/en-us/help/3189806/a-program-is-trying-to-send-an-e-mail-message-on-your-mission-I

两种关闭方法:

1.打开并更新杀毒软件。

2.修改注册表关闭警告。

注册表位置:HKEY _本地_机器\软件\微软\办公室\ \ outlook \安全

64位操作系统安装32位Office的注册表位置:HKEY _本地_机器\软件\ wow6432node \微软\ office \ \ outlook \ security

要和Office的版本一致,比如Office2010的值是14.0,Office2013的值是15.0。

注册表项:ObjectModelGuard,类型:REG_DWORD,值2

在使用时需要注意的细节如下:

1.引用的Microsoft.Exchange.WebServices.dll应该与Outlook客户端的版本一致。

2.在默认配置下,某些操作不会弹出警告。

例如:

列出收件箱邮件的数量

列出邮件主题。

列出邮件接收时间。

列出邮件附件名称。

3.如果后台没有运行Outlook客户端

程序可以读取当前Outlook客户端中的资源,但获取资源后会弹出一个框提示凭据,如下图所示。

2-4.png

如果选择记住凭据,则在后续操作中不需要输入凭据。凭证的使用请参考之前的文章《渗透技巧——Windows中Credential Manager的信息获取》。

0x04 开源实现代码mapi_tool

地址:3359 github . com/3g student/homework-of-c-sharp/blob/master/mapi _ tool . cs

在编译上,为了增加通用性,代码支持用csc.exe编译。

支持。Net 3.5或更高版本,编译命令:

C:\Windows\Microsoft。NET \ framework 64 \ v 3.5 \ CSC . exe mapi _ tool . cs/r:Microsoft。Office.Interop.Outlook.dll

或者

C:\Windows\Microsoft。NET \ framework 64 \ v 4 . 0 . 30319 \ CSC . exe mapi _ tool . cs/r:Microsoft。Office.Interop.Outlook.dll

出于测试目的,我上传了Office2010下的Microsoft.Office.Interop.Outlook.dll和Office2013下的Microsoft.Office.Interop.Outlook.dll。

在功能实现上,区分是否弹出安全提示。

不弹出安全提示的功能:

获取所有文件夹中的邮件长度。

获取配置信息,包括CurrentProfileName、ExchangeMailboxServerName、ExchangeMailboxServerVersion。

列出指定位置的消息,包括消息主题、接收时间、附件中的文件名和EntryID。

列出指定位置的未读邮件,包括邮件主题、接收时间、附件文件名和EntryID。

会弹出安全提示的功能:

获取配置信息,包括Account-DisplayName、Account-SmtpAddress、Account-AutoDiscoverXml和Account-AccountType。

获取联系信息

获取全球地址

列出指定位置的邮件,包括邮件主题、发件人、收件人、抄送、接收时间、附件文件名、正文内容、Outlook版本和EntryID。

列出指定位置的未读邮件,包括邮件主题、发件人、收件人、抄送、接收时间、附件文件名、正文内容、Outlook版本和EntryID。

保存指定邮件中的附件。

在代码开发中,您需要注意以下细节:

保存附件时需要使用绝对路径。

获取联系人列表时,数组从1开始,而不是从0开始。

获得配置信息后,数组从1开始,而不是从0开始。

0x05 多种环境下的利用思路

1.正在运行Outlook客户端

Mapi _工具可以用来访问Outlook客户端的资源,有些操作可能会弹出安全提示。

关闭安全提示的两种方法:

打开并更新防病毒软件。

修改注册表关闭警告

导出Outlook客户端所有邮件信息的方法:

(1)获取ost文件

ost文件的默认保存位置:% local appdata % \ Microsoft \ Outlook \

无法直接复制,提示文件已被占用。

你可以用乔比亚莱克的NinjaCopy复制被占用的文件。

(2)将ost文件转换成pst文件

有许多工具,这个工具提供了一个:高级Exchange恢复

(3)将pst文件导入Outlook客户端

2.没有启动Outlook客户端

Mapi _工具可以用来访问Outlook客户端的资源,有些操作可能会弹出安全提示。

如果您执行需要与服务器交互的操作,例如获取配置信息,系统会提示您输入凭据。如果凭据管理器已经存储了相应的凭据,则不会提示您。

查看保存的凭据的命令:

cmdkey /list

导出Outlook客户端所有邮件信息的方法:

(1)获取ost文件

可以直接复制ost文件。

(2)将ost文件转换成pst文件

方法同上

(3)将pst文件导入Outlook客户端

方法同上

0x06 小结

介绍了使用Outlook MAPI访问Outlook资源的方法,开源代码mapi_tool,方便后续二次开发。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...