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

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

    TheHackerWorld官方

渗透基本——Exchange用户邮箱中的隐藏文件夹


剑道尘心

推荐的帖子

0x00 前言

对于Exchange用户的邮箱,可以通过设置文件夹属性来创建隐藏文件夹。用户无法通过owa网页登录或使用Outlook来查看隐藏文件夹的内容。

从渗透测试的角度来看,我们可以使用隐藏文件夹来存储重要信息,作为C2通信的数据通道。

本文将介绍隐藏文件夹的使用,通过程序创建、访问和删除隐藏文件夹,并基于利用的思想给出一些防御建议。

0x01 简介

本文将介绍以下内容:

如何创建隐藏文件夹

隐藏文件夹的常见操作

使用EWS托管API的实现代码

使用EWS SOAP XML消息的实现代码

开放源代码

防御探测

0x02 隐藏文件夹的创建原理

参考资料:

https://docs . Microsoft . com/en-us/exchange/client-developer/exchange-web-services/how-to-work-with-hidden-folders-by-using-EWS-in-exchange

对于Exchange用户邮箱,当文件夹的扩展属性pidgattributeheidden(0x 10f 4000 b)设置为true时,用户看不到该文件夹。

默认情况下,Exchange用户邮箱包括几个常用文件夹,如收件箱、发件箱和草稿。请参考:https://docs . Microsoft . com/en-us/dot net/API/Microsoft . exchange . web services . data . well known foldername?view=Exchange-EWS-API # Microsoft _ Exchange _ web services _ Data _ well known foldername _ MsgFolderRoot

我们可以在根目录下或者任何文件夹下(比如收件箱)创建一个文件夹,并将其扩展属性pidgattributehidden (0x10f4000b)设置为true,那么这个文件夹就是一个隐藏文件夹,对用户不可见。同时,隐藏文件夹中的所有邮件对用户都是不可见的。此外,隐藏文件夹下的邮件内容和附件内容对用户也是不可见的。但是只要我们知道隐藏文件夹的Id,就可以通过程序交换数据。

当通过程序交换数据时,需要考虑以下操作:

(这里以在收件箱下创建隐藏文件夹为例)

在收件箱下创建一个文件夹

检查收件箱下的文件夹列表

在收件箱下创建一个隐藏文件夹

查看收件箱下的隐藏文件夹列表

查看指定文件夹下的邮件列表(无论是否隐藏)

在指定的文件夹下创建邮件(无论它是否具有隐藏属性)

删除指定的文件夹

向指定邮件添加附件

0x03 使用EWS Managed API的实现代码

1.在Inbox下创建文件夹

私有静态void CreateFolderofInbox(ExchangeService服务)

{

文件夹folder=新文件夹(服务);

文件夹。DisplayName=“自定义文件夹”;

文件夹。保存(WellKnownFolderName。收件箱);

控制台。WriteLine([*]FolderId:' folder。id);

}

2.查看Inbox下的文件夹列表

私有静态void ListFolderofInbox(ExchangeService服务)

{

FindFoldersResults find results=null;

folder view view=new folder view(int。max value){ Traversal=folderttraversal。deep };

findResults=servicefind folders(well known foldername。收件箱,查看);

foreach(Folder find results中的文件夹。文件夹)

{

控制台。WriteLine(' \ r \ n ');

控制台。WriteLine(“[*]display name:{ 0 }”,文件夹。display name);

控制台。WriteLine('[*]Id:{0} '),文件夹。id);

控制台。WriteLine(“[*]total count:{ 0 }”,文件夹。total count);

}

}

3.在Inbox下创建隐藏文件夹

私有静态void CreateHiddenFolderofInbox(ExchangeService服务)

{

文件夹folder=新文件夹(服务);

文件夹。DisplayName='自定义隐藏文件夹';

文件夹。保存(WellKnownFolderName。收件箱);

控制台。WriteLine('[*]Hidden FolderId:' folder。id);

//为PidTagAttributeHidden属性创建扩展属性定义。

ExtendedPropertyDefinition isHiddenProp=new ExtendedPropertyDefinition(0x10f 4,MapiPropertyType。布尔);

property set propSet=new property set(isHiddenProp);

//绑定到文件夹并检索PidTagAttributeHidden属性。

folderhidden=文件夹。绑定(服务,文件夹. Id,propSet);

//将PidTagAttributeHidden属性设置为没错。

folderhidden .SetExtendedProperty(isHiddenProp,true);

//保存更改。

folderhidden .update();

}

4.查看Inbox下的隐藏文件夹列表

私有静态void lishiddenfolderofinbox(ExchangeService服务)

{

//为PidTagAttributeHidden属性创建扩展属性定义。

ExtendedPropertyDefinition is hidden prop=new ExtendedPropertyDefinition(0x 10f 4,MapiPropertyType .布尔);

//创建一个文件夹视图来检索多达100个文件夹

//仅检索PidTagAttributeHidden和显示名称。

文件夹视图文件夹视图=新建文件夹视图(100);

文件夹视图.属性集=新属性集(isHiddenProp,FolderSchema .显示名称);

//指示深度的遍历值,以便检索所有子文件夹。

文件夹视图.Traversal=FolderTraversal .深沉;

//查找MsgFolderRoot下的所有隐藏文件夹。

//此调用导致对EWS的查找文件夹调用。

findfolders results findFolder=service .查找文件夹(众所周知得文件夹名.收件箱,

新搜索过滤器. IsEqualTo(isHiddenProp,true),文件夹视图);

//显示每个隐藏文件夹的文件夹身份证明和显示名称。

foreach(查找文件夹中的文件夹文件夹)

{

控制台WriteLine("[*]显示名称:{ 0 } ",文件夹.显示名称);

控制台WriteLine('[*] FolderId: {0} '),文件夹. id);

控制台WriteLine(' \ r \ n ');

}

}

5.查看指定文件夹(无论是否具有隐藏属性)下的邮件列表

私有静态void ListMailofFolder(FolderId FolderId,ExchangeService服务)

{

IdString=folderId

文件夹文件夹=文件夹. Bind(服务,id字符串);

查找项目结果查找结果=null

ItemView view=new ItemView(int .最大值);

属性集itempropertyset=新属性集(BasePropertySet .FirstClassProperties);

itempropertyset .RequestedBodyType=BodyType .文本;

查看PropertySet=itempropertyset

findResults=文件夹FindItems(视图);

foreach(查找结果中的项目项。项目)

{

控制台WriteLine(' \ r \ n ');

如果(项。主题!=空)

{

控制台WriteLine('[*]主题:{0} ',项目。主题);

}

其他

{

控制台WriteLine('[*]Subject:');

}

控制台WriteLine([*]有附件:{ 0 } ',项。附件);

如果(项。附件)

{

电子邮件消息=电子邮件消息。绑定(服务,项目身份证,新属性集(项目架构.附件));

foreach(邮件中的附件附件。附件)

{

文件附件文件附件=附件作为文件附件

文件附件load();

控制台WriteLine(' - Attachments:{0} ',fileAttachment .姓名);

}

}

控制台WriteLine('[*]ItemId:{0} ',item .id);

控制台WriteLine([*]创建日期时间:{ 0 }”,项目.datetime已创建);

控制台收到的WriteLine("[*]datetime:{ 0 } ",项目收到日期时间);

控制台WriteLine('[*]DateTimeSent:{0} ',item .发送的日期时间);

控制台WriteLine('[*]DisplayCc:{0} ',item .显示抄送);

控制台WriteLine('[*]DisplayTo:{0} ',item .显示到);

控制台WriteLine('[*]InReplyTo:{0} ',item .作为对的答复);

控制台WriteLine('[*]Size:{0} ',item .尺寸);

项目load(itempropertyset);

如果(项身体。ToString().长度100)

{

项目. Body=项目身体。ToString().子串(0,100);

控制台WriteLine('[*]MessageBody(太大,仅输出100):{0}”,项目.体);

}

其他

{

控制台WriteLine('[*]MessageBody:{0} ',item .体);

}

}

}

6.在指定文件夹(无论是否具有隐藏属性)下创建邮件

私有静态void创建邮件(FolderId FolderId,ExchangeService服务)

{

电子邮件消息msg=新电子邮件消息(服务);

味精. Subject='测试邮件;

味精. save(folderId);

}

7.为指定邮件添加附件

私有静态void AddFileAttachment(ItemId,字符串文件名,ExchangeService服务)

{

电子邮件消息=电子邮件消息绑定(服务,id);

消息附件。AddFileAttachment(文件名);

消息更新(conflictsresolutionmode .总是覆盖);

控制台WriteLine('\r\n[ ]AddAttachment成功');

}

8.删除指定文件夹

EWS管理的应用程序接口不支持直接删除,需要构造可扩展标记语言格式的肥皂包

0x04 使用EWS SOAP XML message的实现代码

为了节省篇幅,只介绍中的内容

1.在Inbox下创建文件夹

{姓名}

2.查看Inbox下的文件夹列表

所有属性

3.在Inbox下创建隐藏文件夹

这里需要发送三个数据包,依次为创建文件夹,添加隐藏属性和更新隐藏属性

创建文件夹:

{姓名}

添加隐藏属性:

IdOnly

更新隐藏属性:

真实的

4.查看Inbox下的隐藏文件夹列表

IdOnly

5.查看指定文件夹(无论是否具有隐藏属性)下的邮件列表

所有属性文本

6.在指定文件夹(无论是否具有隐藏属性)下创建邮件

测试邮件

7.为指定邮件添加附件

{name}{data}

8.删除指定文件夹

0x05 开源代码

1.使用EWS Managed API

https://github.com/3gstudent/ewsManage

使用示例

(1)在收件箱下创建隐藏文件夹测试一

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx EWS路模式CreateHiddenFolderofInbox-Name test1

获得文件夹对应的FolderId:aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hntq 5 lwzkywy 0 zgzhdm 0 ngauaaaaaaaaaaaaaaaaaabeblgh 6 ur wqp 6 NLG 9 rxlmyaqa 1 ZC fag 9 a 0 sq 75 no 2 jozsqaaaaaa fuaaaa=

(2)查看收件箱下的隐藏文件夹

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx EWS路模式列表隐藏文件夹-文件夹收件箱

(3)在隐藏文件夹测试一下创建测试邮件

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx-Mode EWS路径create test mail-Id aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hntq 5 lwzyyy 0 zgzhdm 0 ngauaaaaaaaaaabeblgh 6 urw qp NLG 9 rxlmyaqa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaaa fuaaa=

(4)查看隐藏文件夹测试一下的所有邮件

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx EWS路模式listmailofolder-Id aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hntq 5 lwzkywy 0 zgzhdm 0 ngauaaaaaaaaaabeblgh 6 urwqp NLG 9 rxlmyaqa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaaa fuaaa=

获得测试邮件对应的ItemId:aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hnt q 5 lwzyyy 0 zgzhddm 0 ngbb gaaaaaaaaabeblgh 6 ur wqp 6 NLG 9 rxlmybwa 1 ZC fag 9 a 0 sq 75 no 2 jozsqaaaa 1 fuaaaa 1 ZC fag 9 a 0 sq 75 no 2 jozsqaaaa 1 fvaaa=

(5)向测试邮件添加附件

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx-Mode EWS路径添加附件-Id aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hntq 5 lwzyyy 0 zgzhd m0 ngauaaaaaaaabeblgh 6 urw qp NLG 9 rxlmyaqa 1 ZC fag 9 a 0 sq 75 no 2 jozsqaaaaaa 1 fuaaa=-附件文件c:\ test \ 1。可执行程序的扩展名

(6)读取测试邮件的内容

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx EWS路模式查看邮件-Id aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hntq 5 lwzyyy 0 zgzhdm 0 ngauaaaaaaaabeblgh 6 urwqp NLG 9 rxlmyaqa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaaa 1 fuaaa=

(7)保存测试邮件中的附件

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx EWS路模式保存附件-Id aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hnt q 5 lwzyyy 0 zgzhsdm 0 ngauaaaaaabeblgh 6 ur wqp NLG 9 rxlmyaqa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaaaaa fuaaa=

(8)删除测试邮件

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx-Mode EWS路径删除邮件-Id aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hnt q 5 lwzyyy 0 zgzhsdm 0 ngauaaaaaaaabeblgh 6 ur wqp NLG 9 rxlmyaqa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaaaaa fuaaa=

2.使用EWS SOAP XML message

https://github。com/3g学生Python作业/blob/master/EWS经理。巴拉圭

(1)在收件箱下创建隐藏文件夹测试2

创建文件夹:

新闻管理明文test.com用户一密码一创建文件夹

获得id:aamkadc 4 yjrlndc 1 lwi 0 yjctndezzi 1 hnt q 5 lwzyyy 0 zgzhdm 0 gauaaaaaaaaaabeblgh 6 urw qp 6 NLG 9 rxlmyaqa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaaa 1 u AAA=,更改键:aqaabyaaaa 1 ZC fag 9 a 0s 75 no 2 jozsqaaaaage/

添加隐藏属性:

新闻管理明文test.com用户一密码1 SetHiddenPropertyType

更新隐藏属性:

新闻管理明文test.com用户一密码一更新隐藏属性类型

(2)查看收件箱下的隐藏文件夹

新闻管理明文test.com用户一密码listhiddenfolderofinbox

(3)在隐藏文件夹测试一下创建测试邮件

新闻管理明文test.com用户一密码一创建测试邮件

(4)查看隐藏文件夹测试一下的所有邮件

新闻管理明文test.com用户一密码一列表邮件文件夹

(5)向测试邮件添加附件

新闻管理明文test.com用户一密码一创建附件

(6)读取测试邮件的内容

新闻管理明文test.com用户一密码1个getmail

(7)保存测试邮件中的附件

获得附件对应的Id:

新闻管理明文test.com用户一密码1个附件

保存附件:

新闻管理明文test.com用户一密码一保存附件

(8)删除测试邮件

新闻管理明文test.com用户一密码一删除邮件

(9)删除测试邮件隐藏文件夹测试一

新闻管理明文test.com用户一密码一删除文件夹

0x06 防御检测

1.通过程序查看是否存在隐藏文件夹

例如:

ewsManage.exe-CerValidation无交换版本exchange 2013 _ SP1-u test1-p test 123!-https://test.com/ews/Exchange.asmx EWS路模式列表隐藏文件夹-文件夹收件箱

新闻管理明文test.com用户一密码listhiddenfolderofinbox

2.查看邮件用户上次登录时间

使用Exchange Server PowerShell:

Get-mailbox database | Get-mailbox statistics | fl显示名称,LastLogonTime

3.查看ews访问日志

默认位置:C:\ inetpub \ logs \ log files \ w3svc 1,搜索关键词/EWS/Exchange.asmx

0x07 小结

本文介绍了交换用户邮箱隐藏文件夹的使用方法,分别介绍使用EWS管理的应用程序接口和EWS SOAP XML消息实现创建、访问和删除隐藏文件夹的方法,开源代码新闻管理和ewsManage.py,结合利用思路给出防御建议

留下回复

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

黑客攻防讨论组

黑客攻防讨论组

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

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