10

利用IIS的模块功能绕过防火墙

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E5%88%A9%E7%94%A8IIS%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8A%9F%E8%83%BD%E7%BB%95%E8%BF%87%E9%98%B2%E7%81%AB%E5%A2%99/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

0x00 前言


在之前的文章《利用IIS的端口共享功能绕过防火墙》曾介绍了如下问题的解决方法: Windows服务器开启了IIS服务,防火墙仅允许80或443端口进行通信,那么如何在不使用webshell的前提下,实现对该服务器的远程管理?更进一步,如果只有低权限,有没有办法呢? 本文将介绍以上问题的另一种解决方法:利用IIS的模块功能绕过防火墙

0x01 简介


本文将要介绍以下内容:

  • IIS的模块功能
  • 使用c++开发模块
  • 使用c#开发模块
  • IIS-Raid测试

0x02 IIS的模块功能


自IIS7开始,开发人员可以通过模块功能(Module)来扩展IIS的功能

参考资料:

https://docs.microsoft.com/en-gb/iis/develop/runtime-extensibility/extending-web-server-functionality-in-net

如果我们通过模块功能可以读取HTTP请求的内容并控制HTTP回复的内容,完全可以利用模块功能实现对服务器的远程管理

IIS的模块以DLL的形式存在,加载后不会存在单独的进程

2018年,PaloAlto Unit42发现了APT34使用这种方式作为IIS后门,将其命名为RGDoor

本文将复现RGDoor的部分功能,着重介绍这种利用方法的检测和识别

0x03 使用c++开发模块


参考资料:

https://docs.microsoft.com/en-gb/iis/develop/runtime-extensibility/develop-a-native-cc-module-for-iis

IIS 7.0及更高版本允许通过以两种方式开发的模块来扩展服务器:

  • 托管模块(Managed Module),使用托管代码(managed code)和ASP.NET服务器可扩展性API
  • 本机模块(Native Module),使用本机代码(native code)和IIS本机服务器可扩展性API

参考资料中介绍了本机模块(Native Module)的使用方法

需要注意以下问题:

  • 可以使用Visual Studio进行开发
  • DLL需要包含导出函数RegisterModule
  • 使用CHttpModule作为模块类继承的实现
  • 使用IHttpModuleFactory接口创建模块实例

1.模块开发

具体的实现代码可以参考IIS-Raid,地址如下:

https://github.com/0x09AL/IIS-Raid

代码细节可参考:

https://www.mdsec.co.uk/2020/02/iis-raid-backdooring-iis-using-native-modules/

IIS-Raid在RegisterModule函数注册了RQ_BEGIN_REQUESTRQ_SEND_RESPONSE两个事件用来处理请求和响应

2.模块注册

可选择以下三种方法:

  1. 使用APPCMD.EXE命令行工具
  2. 使用IIS Administration Tool进行界面操作
  3. 修改配置文件applicationHost.config

注:

在0x05中会演示方法1和方法2

0x04 使用c#开发模块


参考资料:

https://docs.microsoft.com/en-gb/iis/develop/runtime-extensibility/developing-a-module-using-net

IIS 7.0及更高版本允许通过以两种方式开发的模块来扩展服务器:

  • 托管模块(Managed Module),使用托管代码(managed code)和ASP.NET服务器可扩展性API
  • 本机模块(Native Module),使用本机代码(native code)和IIS本机服务器可扩展性API

参考资料中介绍了托管模块(Managed Module)的使用方法

需要注意以下问题:

  • 可以使用Visual Studio进行开发
  • 是一个.NET类
  • 使用System.Web.IHttpModule接口

1.模块开发

具体的实现代码可以参考IIS_backdoor,地址如下:

https://github.com/WBGlIl/IIS_backdoor

代码细节可参考:

https://mp.weixin.qq.com/s/z1d3yvp14GWakyonTh_b8A

2.模块注册

可选择以下三种方法:

  1. 使用APPCMD.EXE命令行工具
  2. 使用IIS Administration Tool进行界面操作
  3. 修改配置文件web.config

具体的使用方法还可以参考以下资料:

https://docs.microsoft.com/en-gb/iis/develop/runtime-extensibility/developing-iis-modules-and-handlers-with-the-net-framework

https://docs.microsoft.com/en-us/previous-versions/aspnet/ms227673(v=vs.100)

0x05 IIS-Raid测试


测试系统:

Windows Server 2012r2 x64(需要获得管理员权限)

IIS-Raid地址如下:

https://github.com/0x09AL/IIS-Raid

使用Visual Studio编译生成IIS-Backdoor.dll

1.后门安装

可以选择以下两种方法:

(1)使用APPCMD.EXE命令行工具

查看已安装模块的命令如下:

C:\Windows\system32\inetsrv\APPCMD.EXE list module
Alt text

安装模块的命令如下:

C:\Windows\system32\inetsrv\APPCMD.EXE install module /name:test /image:"c:\test\IIS-Backdoor.dll" /add:true

删除模块的命令如下:

C:\Windows\system32\inetsrv\APPCMD.EXE uninstall module test

(2)使用IIS Administration Tool进行界面操作

运行inetmgr.exe,进入IIS管理器

选择Modules,如下图

Alt text

进入后选择Configure Native Modules...,接着选择Register...,如下图

Alt text

填入Name和Path,如下图

Alt text

添加成功后,在Modules页面显示新添加的内容,如下图

Alt text

2.功能测试

IIS-Raid的配置文件保存在Functions.h中,包括以下内容:

#define COM_HEADER "X-Chrome-Variations"
#define PASS_FILE "C:\\Windows\\Temp\\creds.db"
#define PASSWORD "SIMPLEPASS"

COM_HEADER是用于执行后门与控制器之间的通信的标头名称

PASS_FILE是使用dump命令读取文件的位置

PASSWORD定义是将用于向后门进行身份验证的密码

(1)连接后门

命令如下:

python ./iis_controller.py  --url http://192.168.18.138/ --password SIMPLEPASS
Alt text

(2)测试功能

执行cmd命令:

cmd whoami

测试如下图

Alt text

执行dump命令:

dump

默认读取文件C:\\Windows\\Temp\\creds.db中的内容

测试如下图3-3

Alt text

执行shellcode:

inject shellcode.txt

shellcode.txt保存base64加密后的shellcode,加载方式为先创建进程C:\\Windows\\System32\\credwiz.exe,再进行注入

测试如下图

Alt text

0x06 利用分析


利用IIS模块作为后门具有以下特点:

  • 需要先获得IIS服务器的管理员权限
  • payload为dll的形式
  • 通过安装模块的方式启动
  • dll所在的进程为w3wp.exe

0x07 防御检测


可以通过查看Modules的方式检测IIS是否被安装后门

具体有以下两种方法:

1.使用APPCMD.EXE命令行工具

查看已安装模块的命令如下:

C:\Windows\system32\inetsrv\APPCMD.EXE list module

2.使用IIS Administration Tool进行界面操作

运行inetmgr.exe,进入IIS管理器

选择Modules

另外需要注意的是只有当模块被成功加载后,进程w3wp.exe中才能找到模块相关的dll

0x08 小结


本文对IIS的模块功能进行介绍,实现了利用IIS的模块功能绕过防火墙,测试开源工具IIS-Raid,分享防御检测的建议。


LEAVE A REPLY


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK