IIS突袭–使用本地模块构建的IIS后门 - 黑客门户-介绍 早在2018年,PaloAlto Unit42公开记录了RGDoor,这是APT34使用的IIS后门。这篇文章重点介绍了一些细节,这些细节引起了我的兴趣,并激发了我编写...

TZB互联网安全

黑客门户
关注于网络安全
首页>> 渗透测试 >>IIS突袭–使用本地模块构建的IIS后门 - 黑客门户



IIS突袭–使用本机模块对IIS进行后门操作

介绍

早在2018年,PaloAlto Unit42公开记录了RGDoor,这是APT34使用的IIS后门。这篇文章重点介绍了一些细节,这些细节引起了我的兴趣,并激发了我编写IIS-Raid(IIS后门模块)的功能,该模块允许红队操作员在IIS Web服务器上保持隐秘的持久性。

在此博客文章中,我们将讨论该工具的一些关键组件,其构建方式并演示其功能。

本机模块和IIS-Raid

本机模块是Win32 DLL,可用于扩展IIS,以提供所需的应用程序功能。本质上,IIS Raid是一个本地IIS模块,它滥用IIS的可扩展性对Web服务器进行后门操作,并执行攻击者定义的自定义操作。

IIS允许您使用可以通过两种方式开发的模块来扩展服务器:

  • 托管模块–使用.NET扩展API-s
  • 本机模块–使用IIS本机服务器可扩展性API-s

两种方法都有优点和缺点,但是可以确定的是,构建本机模块将提供更好的功能,因为API比.NET更为丰富,即使开发时间更长。

在实际开始编写该工具之前,已经进行了研究以确定该领域以前的工作。我们确定第一篇文章描述了如何对IIS进行后门操作,但信息有限,并且没有公开的POC。

另一个项目也注意到了其中的概念证明代码,并建立在C#。但是,没有找到公开可用的本机模块。

建立IIS团队

任何IIS模块的核心都是创建一个导出RegisterModule函数的DLL 该功能负责在服务器上注册模块,创建http模块工厂以及注册将由模块处理的所有事件。

对于IIS-Raid,RegisterModule函数如下所示:

CMyHttpModuleFactory * pFactory = NULL;

HRESULT __stdcall RegisterModule(DWORD dwServerVersion, IHttpModuleRegistrationInfo * pModuleInfo, IHttpServer * pHttpServer)
{

    HRESULT hr = S_OK;

    // Factory class is responsible for manufacturing instance of our module for each request.
    pFactory = new CMyHttpModuleFactory();

    // Register for the server events.
    hr = pModuleInfo->SetRequestNotifications(pFactory, 
    RQ_SEND_RESPONSE | RQ_BEGIN_REQUEST, 0);

    return hr;
} 

首先,我们实现我们的模块工厂,该工厂负责为每个请求制造模块实例。创建MyHttpModuleFactory对象的实例后,将调用SetRequestNotification方法,以指示IIS使用我们的模块处理特定事件。

在上面的示例中,我们仅注册两个事件:

  • RQ_SEND_RESPONSE –使我们的模块能够处理响应。
  • RQ_BEGIN_REQUEST –使我们的模块能够处理请求。

成功注册事件后,模块工厂需要实现处理这些事件的功能。例如,当为RQ_BEGIN_REQUEST事件注册了请求级别模块时,当请求进入集成的请求处理管道时,IIS将调用该模块的OnBeginRequest方法。

下面是一个使用request方法初始化lpMethod变量的简单示例

REQUEST_NOTIFICATION_STATUS CMyHttpModule::OnBeginRequest(IN IHttpContext* pHttpContext, IN OUT IHttpEventProvider* pProvider)
{
    IHttpRequest* pHttpRequest = pHttpContext->GetRequest();
    LPCSTR lpMethod = pHttpRequest->GetHttpMethod();
    return RQ_NOTIFICATION_CONTINUE;
} 

上面的示例已简化,没有显示IIS-RAID的完整实现,但提供了足够的信息来了解其内部。

有关实现的更多信息,请参见源代码或以下URL:

安装后,IIS-Raid将处理所有请求和方法,检查X-Password标头是否存在并将其与硬编码密码进行比较。如果标头指定的值与密码不匹配,则请求将继续正常进行,而不会给出任何后门迹象。

如果标题值与密码匹配,它将搜索通信标题并提取其内容。此外,它将对base64进行解码,并将其与预定义的命令进行比较,并处理指令(如果有)。

iis_controller.py脚本将执行所有这一切,提供了一个命令行界面与交互的后门。

在脚本上实现了四个参数:

  • –url:将用于与后门进行通信的URL。[需要]
  • –password –后门上的预共享密码[必需]
  • –header –如果通信头已更改为默认头,则用于通信的头。
  • –方法 –将方法更改为GET或POST。

应该注意的是,无论将URL传递给脚本如何,后门都将成功运行。这有助于避免安全团队从基于Web服务器日志的合法人员那里检测到后门流量。

此版本中当前实现的一些功能是:

  • 交互式命令执行–允许执行命令并检索输出。
  • Shellcode注入–通过注入自定义Shellcode扩展功能。
  • Web密码提取器–以明文形式从Web表单中提取密码。

定制和部署

在使用和编译模块之前,您需要更改一些选项。为了向后门进行身份验证,控制器使用与模块一起使用的预共享密码。由于这是防止他人访问后门的唯一机制,因此必须更改默认密码。

除密码外,还可以在Functions.h文件中修改其他后门选项

所述COM_HEADER定义是用于执行后门和控制器之间的通信中的标题名称。

PASS_FILE定义就是从Web表单中提取凭证将被保存的文件路径。

密码的定义是,将用于身份验证的后门密码。

正确配置和编译模块后,就可以将其部署在目标上了。

有几种安装本机模块的方法:

  • 手动编辑IIS配置存储
  • 使用IIS管理器
  • 使用AppCmd.exe命令行工具

在操作过程中,我们尝试避免在目标系统上使用图形用户界面(GUI)工具。因此,可以使用AppCmd方法注册模块并成功后门Web服务器。

将DLL编译并上传到目标系统后,可以执行以下命令:

C:\Windows\system32\inetsrv\APPCMD.EXE install module /name:Module Name /image:"%windir%\System32\inetsrv\IIS-Backdoor.dll" /add:true

如上图所示,模块已成功加载。

在下面的示例中,使用密码SIMPLEPASS创建了到192.168.1.74服务器的连接,并且whoami命令成功执行。

检测

发布此工具的目的之一是提高知名度,并允许公司检测此方法。默认情况下,已发布的源代码不包含任何加密,因为这可能会降低检测的可能性。

在下面,您可以找到一些方法来检测通信流量或模块部署:

  • 监视命令行日志记录遥测,以执行appcmd.exe,如前所述。合法安装产生的噪音可能很低,使其成为检测的良好指示器。
  • 如果可以拦截到Web服务器的通信,请检查是否有任何base64编码的标头数据以以下任何字符串开头:
    • PIN | G
    • DMP | CREDS
    • CMD |
    • INJ |
  • 搜索X-PasswordX-Chrome-Variations标头的存在

×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:黑客门户 » IIS突袭–使用本地模块构建的IIS后门

发表评论

路人甲

网友评论(0)