剑道尘心 发布于2022年11月8日 分享 发布于2022年11月8日 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,结合利用思路给出防御建议 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子