Exfiltration-利用企业邮件系统构造命令控制-C&-C-和数据窃取-通道的思路探讨 (EXFIL头盔)

教程大全 2025-07-14 12:25:19 浏览

假设场景

我们假设目标企业组织内设置了这样一种安全措施:

01:内部用户工作站电脑不能直接连接互联网,只能通过其中架设的代理 服务器 执行外部Web请求和DNS查询,而且代理服务器又设置了流量监控功能,由其产生的HTTP和DNS请求流量都能被监测发现。

02:由于从某种程度上来说,代理服务器“打破”了内部用户机与外部服务器之间点对点连接模式,包括HTTPS方式,所以像Domain fronting这种隐蔽攻击方式一样可以被监测到,所以只有一些白名单网站可以被放行通过。

03:这种环境下,企业的大部分内部服务器都被设置了联网限制,当然也就不存在服务暴露情况,因为所有企业相关网站或博客等服务可能都被部署在谷歌云存储平台,只有网站管理员以相应的企业社交网络账号从其它隔离的工作站电脑上登录进入管理面板,才能进行内容更新修改操作。

在这种场景下,传统的通过Web或DNS方式进行的C&C(命令控制)和数据窃取操作貌似不可行,此时,我们可以尝试使用另外一种奇技淫巧:利用企业网页邮件系统。

利用思路

如今,灵活便捷的企业邮箱登录是办公手段的必需,如果不考虑所有安全措施,抽象意义上来说,邮箱系统是所有内网环境(如员工电脑)和各式外网终端,如公司配发的具有邮箱登录入口APP的智能手机和平板、通过浏览器方式以IBM iNotes或Microsoft OWA访问登录的电脑等。很多情况下,这种联网的企业网页邮件系统大多都不具备双因素认证(2FA)和科学集中器等安全机制。而且,很多移动端APP都缺乏OAuth或“应用密码”等授权认证机制,只需用户名密码就可对接入系统进行直接登录配置。

因此,如果我们通过网络攻击方式或从一些泄露数据库中,获取到目标机构运行于互联网上的有效企业邮箱系统用户登录凭据(用户名/密码)后,可以藉此为突破口控制利用该企业用户电子邮箱,感染内网用户主机,渗透进入企业内网。之后,针对我们植入的恶意软件,可以构造这样一种C&C通道:在该企业用户电子邮箱的垃圾箱文件夹内设置特殊格式消息文件,恶意软件通过读取这种消息文件信息,执行我们的控制命令;当然,也可以构造一种类似的数据窃取(exfiltration)通道:植入的恶意软件把从企业机构内部窃取的文档数据,上传存储到该企业用户电子邮箱的垃圾箱文件夹内(这些文档数据可以是加密或其它方式的存在),之后,我们可以远程登录进入网页邮件系回收这些文档数据,并且可以不留痕迹地删除这些存储数据。

尽管技术上看似简单,但很难从所有合法网络流量中识别出C&C和Exfiltration方式流量。例如,企业用户在19:00下班,我们可以在已经渗透控制的目标企业用户主机上,在18:30时刻(下班前繁忙的网络流量中很难被发觉是有规律的访问行为),通过植入木马把窃取文档数据上传至被控制电子邮箱的垃圾文件夹内,之后,在20:30时刻,通过Webmail或移动终端API回收窃取数据,因为该时段很难区分出到底是在员工家中还是企业手机端的访问行为。

由于我们不是把消息或数据发送到外部地址,而是通过邮箱自动发送或向特定文件夹内上传消息文件,所以,这种操作行为,在所有进出的SMTP流量中也很难被发现。另外,还可以通过其它手段来增加检测发现难度:当被渗透控制的企业用户主机启动邮箱客户端程序时,运行植入的恶意程序,通过企业内网非黑名单IP接入Webmail端,使用与目标企业机构相同的移动运营商、程序终端、操作系统或浏览器等。

概念性验证攻击展示(PoC)

我们以IBM Lotus Notes邮件系统为例,作一个概念性验证展示。企业如果架设了IBM Lotus Notes邮件系统,则对企业内网用户来说,可以使用Notes的邮件客户端,而外网用户则可以通过Webmail方式或该邮件系统的IBM Verse移动APP终端进行访问。

另外,有意思的是,Lotus Notes还提供了对邮件客户端的邮件定制开发API,其中具有一个COM组件方法Notes.NotesSession,我们可以利用它来进行方法调用和定制语言选择。在这里,我们使用PowerShell脚本作为PoC验证。

在我们控制利用的企业用户电子邮箱中,包含可以定期执行我们控制命令的简单PowerShell脚本。我们向企业内网植入的恶意程序,将以预期任务、WMI或其它复杂技巧来请求这些脚本来实现命令控制。

在此,如果Notes邮件客户端正常运行的情况下,我们将只利用其COM组件方法来对邮件作一些定制调用,因为这样可以避免一些用户端的报警警告:

如果Notes邮件客户端没有运行,我们可以初始化COM组件,并打开默认配置的数据库和服务器:

之后,我们可以定义数据窃取Exfiltrate()方法,来存储窃取文档并上传到被控制利用的企业用户电子邮箱垃圾文件夹内:

在以上代码中,可以看到,我们通过实例化方法$db.createdocument()创建了一个新文档,并把文档附加第一个参数中,以$doc.save()方法进行保存,之后调用$doc.remove()方法把文件删除到电子邮箱的垃圾文件夹内(PS:如果我们不调用remove()方法,则新建文档将会存储在一个未知文件夹内,不会出现在收件箱内,只能通过选择“所有附件”按钮才能看到,这也算是另外一种隐蔽消息的方法)。

最终,可以构造形如以下的C&C命令脚本,让植入的恶意程序进行读取执行:

首先,我们打开$SoftDeletions方法查看Notes邮箱数据库,并以此方式调用电子邮箱的垃圾文件夹,以$trash.getfirstdocument()方法查看所有垃圾文件夹内的文件,如果其涉及主题为“powershell”字符串,我们将进一步读取其邮件主体信息,一旦执行完内置该Powershell的Payload之后,将调用$doc.removepermanently()方法进行永久删除。

实际利用

我们如何来操作这段简单的PoC呢?前提是我们获得了能登录Webmail端的企业员工有效用户名密码,并向企业内网某主机植入了窃取数据的恶意程序。攻击者从互联网登录进入该企业员工被控制利用的Webmail端,并以Powershell方式向其邮箱内自动发送消息邮件的大致方式如下:

该消息邮件被删除之后,进入邮箱垃圾文件夹:

我们植入的恶意程序在内网主机运行之后,可以设置其检索该邮箱垃圾文件夹内的以上Powershell消息邮件,通过读取该邮件体中内置的内容执行命令。如以上邮件消息中设置把窃取文件存储到c:\windows\temp\ps.txt文件内,并通过邮件上传附件实现exfiltrate方法的文档外传窃取。

当然,如果攻击者通过互联网方式登录进入Webmail端后,将会在邮箱垃圾文件夹发现以下存储的窃取文件:

最终,攻击者只需简单地下载该文件并删除垃圾文件夹内信息,就能以这种“暗度陈仓”的方式实现C&C命令控制和数据窃取(Exfiltration)。以下为该过程中利用的完整Powershell脚本:

如果目标企业机构使用的是其它架构邮箱系统,如Microsoft (Exchange/Outlook/OWA)等,这其中相关的消息、收件箱、文件夹和命令等属性操作可以直接应用到植入的恶意程序配置内。

如何检测此类可疑行为?


初级电工考试时考哪些内容?我是江苏南通的

一、名词解释: 1、三相交流电: 由三个频率相同、电势振幅相等、相位差互差 120 °角的交流电路组成的电力系统,叫三相交流电。 2、一次设备: 直接与生产电能和输配电有关的设备称为一次设备。 包括各种高压断路器、隔离开关、母线、电力电缆、电压互感器、电流互感器、电抗器、避雷器、消弧线圈、并联电容器及高压熔断器等。 3、二次设备: 对一次设备进行监视、测量、操纵控制和保护作用的辅助设备。 如各种继电器、信号装置、测量仪表、录波记录装置以及遥测、遥信装置和各种控制电缆、小母线等。 4、高压断路器: 又称高压开关,它不仅可以切断或闭合高压电路中的空载电流和负荷电流,而且当系统发生故障时,通过继电保护装置的作用,切断过负荷电流和短路电流。 它具有相当完善的灭弧结构和足够的断流能力。 5、负荷开关: 负荷开关的构造秘隔离开关相似,只是加装了简单的灭弧装置。 它也是有一个明显的断开点,有一定的断流能力,可以带负荷操作,但不能直接断开短路电流,如果需要,要依靠与它串接的高压熔断器来实现。 6、空气断路器 (自动开关):是用手动(或电动)合闸,用锁扣保持合闸位置,由脱扣机构作用于跳闸并具有灭弧装置的低压开关,目前被广泛用于 500V 以下的交、直流装置中,当电路内发生过负荷、短路、电压降低或消失时,能自动切断电路。 7、电缆: 由芯线(导电部分)、外加绝缘层和保护层三部分组成的电线称为电缆。 8、母线: 电气母线是汇集和分配电能的通路设备,它决定了配电装置设备的数量,并表明以什么方式来连接发电机、变压器和线路,以及怎样与系统连接来完成输配电任务。 9、电流互感器: 又称仪用变流器,是一种将大电流变成小电流的仪器。 10 、变压器: 一种静止的电气设备,是用来将某一数值的交流电压变成频率相同的另一种或几种数值不同的交流电压的设备。 11 、高压验电笔: 用来检查高压网络变配电设备、架空线、电缆是否带电的工具。 12 、接地线: 是为了在已停电的设备和线路上意外地出现电压时保证工作人员的重要工具。 按部颁规定,接地线必须是 25mm 2 以上裸铜软线制成。 13 、标示牌: 用来警告人们不得接近设备和带电部分,指示为工作人员准备的工作地点,提醒采取安全措施,以及禁止微量某设备或某段线路合闸通电的通告示牌。 可分为警告类、允许类、提示类和禁止在等。 14 、遮栏: 为防止工作人员无意碰到带电设备部分而装设备的屏护,分临时遮栏和常设遮栏两种。 15 、绝缘棒: 又称令克棒、绝缘拉杆、操作杆等。 绝缘棒由工作头、绝缘杆和握柄三部分构成。 它供在闭合或位开高压隔离开关,装拆携带式接地线,以及进行测量和试验时使用。 16 、跨步电压: 如果地面上水平距离为 0.8m 的两点之间有电位差,当人体两脚接触该两点,则在人体上将承受电压,此电压称为跨步电压。 最大的跨步电压出现在离接地体的地面水平距离 0.8m 处与接地体之间。 17 、相序: 就是相位的顺序,是交流电的瞬时值从负值向正值变化经过零值的依次顺序。 18 、电力网: 电力网是电力系统的一部分,它是由各类变电站(所)和各种不同电压等级的输、配电线路联接起来组成的统一网络。 19 、电力系统: 电力系统是动力系统的一部分,它由发电厂的发电机及配电装置,升压及降压变电所、输配电线路及用户的用电设备所组成。 20 、动力系统: 发电厂、变电所及用户的用电设备,其相间以电力网及热力网(或水力)系统连接起来的总体叫做动力系统。 二、选择题 1、两只额定电压相同的电阻,串联接在电路中,则阻值较大的电阻( A )。 A、发热量较大 B、发热量较小 C、没有明显差别 2、万用表的转换开关是实现( A )。 A、各种测量种类及量程的开关 B、万用表电流接通的开关C、接通被测物的测量开关 3、绝缘棒平时应( B )。 A、放置平稳 B、使他们不与地面和墙壁接触,以防受潮变形 C、放在墙角 4、绝缘手套的测验周期是( B )。 A、每年一次 B、六个月一次 C、五个月一次 5、绝缘靴的试验周期是( B )。 A、每年一次 B、六个月一次 C、三个月一次 6、在值班期间需要移开或越过遮栏时( C )。 A、必须有领导在场 B、必须先停电C、必须有监护人在场 7、值班人员巡视高压设备( A )。 A、一般由二人进行 B、值班员可以干其它工作C、若发现问题可以随时处理 8、倒闸操作票执行后,必须( B )。 A、保存至交接班 B、保存三个月 C、长时间保存 9、接受倒闸操作命令时( A )。 A、要有监护人和操作人在场,由监护人接受 B、只要监护人在场,操作人也可以接受C、可由变电站(所)长接受 10 、直流母线的正极相色漆规定为( C )。 A、蓝 B、白 C、赭 11 、接地中线相色漆规定涂为( A )。 A、黑 B、紫 C、白 12 、变电站(所)设备接头和线夹的最高允许温度为( A )。 A、 85 ℃ B、 90 ℃ C、 95 ℃ 13 、电流互感器的外皮最高允许温度为( B )。 A、 60 ℃ B、 75 ℃ C 、 80 ℃ 14 、电力电缆不得过负荷运行,在事故情况下, 10k V以下电缆只允许连续( C )运行。 A、1 h 过负荷 35 % B、 1.5h 过负荷 20 % C、 2h 过负荷 15 % 15 、电力变压器的油起( A )作用。 A、绝缘和灭弧 B、绝缘和防锈 C、绝缘和散热 16 、继电保护装置是由( B )组成的。 A、二次回路各元件 B、各种继电器C、包括各种继电器和仪表回路 17 、信号继电器动作后( C )。 A、继电器本身掉牌或灯光指示B、应立即接通灯光音响回路 C、应是一边本身掉牌,一边触点闭合接通其它信号 18 、线路继电保护装置在该线路发生故障时,能迅速将故障部分切除并( B )。 A、自动重合闸一次 B、发出信号C、将完好部分继续运行 19 、装设接地线时,应( B )。 A、先装中相 B、先装接地端,再装两边相C、先装导线端 20 、戴绝缘手套进行操作时,应将外衣袖口( A )。 A、装入绝缘手套中 B、卷上去 C、套在手套外面 21 、某线路开关停电检修,线路侧旁路运行,这时应该在该开关操作手把上悬 挂( C )的标示牌。 A、在此工作 B、禁止合闸 C、禁止攀登、高压危险 三、填空题 1、安全工作规程是中规定:设备对地电压高于 250V 为高电压;在 250V 以下为低电压;安全电压为 36V 以下;安全电流为 10mA 以下。 2、值班人员因工作需要移开遮栏进行工作,要求的安全距离是 10k V时 0.7 m , 35k V时 1.0 m , 110k V时 1.5 m , 220k V时 3.0 m 。 3、雷雨天气需要巡视室外高压设备时,应 穿绝缘靴 ,并不得 接近避雷器、避雷针 和 接地装置 。 4、遇有电气设备着火时,应立即将 该设备 的电源 切断 ,然后进行 灭火 。 5、值班运行工的常用工具

Linux由哪几部分组成?

一、Linux shellShell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。 它接收用户输入的命令并把它送入内核去执行。 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。 不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。 Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。 Linux提供了像Microsoft Windows那样的可视的命令输入界面--X Window的图形用户界面(GUI)。 它提供了很多窗口管理器,其操作就象Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。 现在比较流行的窗口管理器是KDE和GNOME。 每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。 同 Linux本身一样,Shell也有多种不同的版本。 目前主要有下列版本的Shell: Bourne Shell:是贝尔实验室开发的。 BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux的发行套件使用的都是这种shell。 Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。 C Shell:是SUN公司Shell的BSD版本。 二、Linux 实用工具标准的Linux系统都有一套叫做实用工具的程序,它们是专门的程序,例如编辑器、执行标准的计算操作等。 用户也可以产生自己的工具。 实用工具可分三类:编辑器:用于编辑文件。 过滤器:用于接收数据并过滤数据。 交互程序:允许用户发送信息或接收来自其他用户的信息。 Linux的编辑器主要有:Ed、Ex、Vi和Emacs。 Ed和Ex是行编辑器,Vi和Emacs是全屏幕编辑器。 Linux的过滤器(Filter)读取从用户文件或其他地方的输入,检查和处理数据,然后输出结果。 从这个意义上说,它们过滤了经过它们的数据。 Linux有不同类型的过滤器,一些过滤器用行编辑命令输出一个被编辑的文件。 另外一些过滤器是按模式寻找文件并以这种模式输出部分数据。 还有一些执行字处理操作,检测一个文件中的格式,输出一个格式化的文件。 过滤器的输入可以是一个文件,也可以是用户从键盘键入的数据,还可以是另一个过滤器的输出。 过滤器可以相互连接,因此,一个过滤器的输出可能是另一个过滤器的输入。 在有些情况下,用户可以编写自己的过滤器程序。 交互程序是用户与机器的信息接口。 Linux是一个多用户系统,它必须和所有用户保持联系。 信息可以由系统上的不同用户发送或接收。 信息的发送有两种方式,一种方式是与其他用户一对一地链接进行对话,另一种是一个用户对多个用户同时链接进行通讯,即所谓广播式通讯。 三、Linux 文件系统文件结构是文件存放在磁盘等存储设备上的组织方法。 一个文件系统的好坏主要体现在对文件和目录的组织上。 目录提供了管理文件的一个方便而有效的途径。 我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限,设置文件的共享程度。 使用Linux,用户可以设置目录和文件的权限,以便允许或拒绝其他人对其进行访问。 Linux目录采用多级树形结构,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,访问那里的文件。 文件结构的相互关联性使共享数据变得容易,几个用户可以访问同一个文件。 Linux是一个多用户系统,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录。 内核,Shell和文件结构一起形成了基本的操作系统结构。 它们使得用户可以运行程序,管理文件以及使用系统。 此外,Linux操作系统还有许多被称为实用工具的程序,辅助用户完成一些特定的任务。 四、Linux内核内核、Shell、文件系统这三个部分构成了linux系统;Linux内核内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。 它从用户那里接受命令并把命令送给内核去执行。 在dos系统下:内核 在windows操作系统中:NT核心 在linux操作系统中:kernel

获取文件夹下的所有子文件夹及文件的名称?

private void Files_Copy(TreeView TV, string Sdir, TreeNode TNode, int n)

DirectoryInfo dir = new DirectoryInfo(Sdir);

if (!)//判断所指的文件或文件夹是否存在

DirectoryInfo dirD = dir as DirectoryInfo;//如果给定参数不是文件夹则退出

if (dirD == null)//判断文件夹是否为空

TNode = ();//添加文件夹的名称

TNode = ();//添加文件夹里面各文件夹的名称

FileSystemInfo[] files = ();//获取文件夹中所有文件和文件夹

//对单个FileSystemInfo进行判断,如果是文件夹则进行递归操作

C&

foreach (FileSystemInfo FSys in files)

FileInfo file = FSys as FileInfo;

if (file != null)//如果是文件的话,进行文件的复制操作

FileInfo SFInfo = new FileInfo( + \\ + );//获取文件所在的原始路径

();//添加文件

string pp = ;//获取当前搜索到的文件夹名称

Files_Copy(TV, Sdir + \\ + (), TNode, 1);//如果是文件夹,则进行递归调用

catch (Exception ex)

#endregion

private void button1_Click(object sender, EventArgs e)

thdAddFile = new Thread(new ThreadStart(SetAddFile)); //创建一个线程

(); //执行当前线程,来自

private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)

if ( == null)

Tem_Dir = ();

if (Tem_Dir == )

Tem_Dir = UpAndDown_Dir(tempstr) + \\ + ;

(@Tem_Dir);

private void Form1_Load(object sender, EventArgs e)

Tem_TView = new TreeView();

Tem_TView = treeView1;

}//位您提供支持

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐