跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

使用appdomain管理器维护持久性


RenX6

推荐的帖子

0x00 前言

从凯西史密斯那里学来的一招@subTee:瞄准。Net程序的启动过程。可以通过修改AppDomainManager劫持. Net程序。

如果你劫持了common的启动进程。Net程序,如powershell.exe,并给它添加负载,就可以实现一个被动后门触发机制。

学习链接:

http://subtox 10 . blogspot . com/2017/06/attaking-clr-appdomain manager-injection . html

0x01 简介

本文将介绍以下内容:

劫持一个自主研发的。网络程序

劫持系统。Net程序powershell_ise.exe

使用Visual Studio的想法

0x02 相关概念

CLR:

公共语言运行时(Common Language Runtime)是一个可以被很多编程语言使用的运行环境。

CLR是的主要执行引擎。NET框架,它的功能之一就是监控程序的运行:

在CLR监控下运行的程序是“托管”代码。

不使用CLR直接在裸机上运行的应用程序或组件是“非托管”代码。

对于CLR监控下的程序,程序启动的初始化过程请参考以下链接:

http://matt Warren . org/2017/02/07/The-68-things-The-CLR-does-before-executing-one-line-of-your-code/

值得注意的地方:

如果能在程序启动的初始化过程中找到一个可用的位置,在程序启动前加载自己的代码,就可以“滥用”CLR的功能,劫持程序。

更理想的情况下:

如果能被劫持的程序是系统中的常用程序,它会随着启动自动启动,那么这个方法可以作为一个持续性的后门。

以下是Casey Smith@subTee分享的借壳思路:AppDomainManager

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

注:

代码引自:http://subt 10 . blogspot . com/2017/06/attaching-clr-appdomain manager-injection . html

1、编写示例程序

使用Visual Studio,选择c#开发环境并创建一个新的控制台应用程序。项目名称为program,代码如下:

使用系统;

公开课程

{

公共静态void Main()

{

控制台。WriteLine(“应用程序内部”);

}

}

生成program.exe

该程序运行如下

2-1.png

2、编写payload Dll

选择c#开发环境并创建一个新的类库。项目名称为DomainManager,代码如下:

使用系统;

命名空间域管理器

{

公共类InjectedDomainManager:AppDomainManager

{

公共重写void InitializeNewDomain(AppDomainSetup appDomainInfo)

{

基地。InitializeNewDomain(appdomain info);

控制台。WriteLine(“来自AppMgr的Blah

}

}

}

生成DomainManager.dll

3、设置AppDomainManager劫持程序启动

把DomainManager.dll放在同一级目录中。

方法1:

Cmd设置环境变量:

set APPDOMAIN _ MANAGER _ ASM=domain MANAGER,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null

set APPDOMAIN _ MANAGER _ TYPE=domain MANAGER。InjectedDomainManager

Program.exe被处决了。通过检查回声,发现DomainManager.dll是在program.exe之前被处决的。

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

2-2.png

注:

注意比较执行顺序。

通过cmd设置环境变量的方法只在当前的cmd上起作用,不够通用。

方法2:

更一般的方法:配置配置文件。

使用以下内容创建一个新的program.exe.config:

?xml版本='1.0 '编码='utf-8 '?

注:

配置文件的命名格式:exe.config。

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

2-3.png

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

接下来,我们需要找到可用的系统。Net程序并尝试实现持久后门。

选择powershell_ise.exe作为这里的演示。

注:

PowerShell _ ise . exe:Windows PowerShell集成脚本环境的全称。

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

操作界面如下

3-1.png

为了便于演示,我们需要修改project DomainManager,以便它在运行时弹出。

1、添加引用

项目-右击-添加引用,然后选择系统。Windows .窗体

如下图

3-2.png

代码修改如下:

使用系统;

使用系统。Windows . Forms

命名空间域管理器

{

公共类InjectedDomainManager:AppDomainManager

{

公共重写void InitializeNewDomain(AppDomainSetup appDomainInfo)

{

基地。InitializeNewDomain(appdomain info);

控制台。WriteLine(“来自AppMgr的Blah

MessageBox。显示(' 1 ');

}

}

}

重新编译以生成DomainManager.dll。

2、测试

Program.exe被劫持成功,如下图所示。

3-3.png

劫持powershell_ise.exe:

(1)测试目录

将powershell_ise.exe复制到c:\test

在同级目录下新建一个powershell _ ise.exe.config,配置文件可以适当精简。精简后的内容如下:

?xml版本='1.0 '?

在c:\test目录下启动powershell_ise.exe。

成功劫持powershell_ise.exe

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

路径如下:

c:\ Windows \ System32 \ Windows powershell \ v 1.0

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

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

完整的操作如下

4-1.gif

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

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

?xml版本='1.0 '编码='utf-8 '?

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

App.config修改如下:

?xml版本='1.0 '编码='utf-8 '?

编译器,bin目录下的配置文件也被修改,如下图所示

5-1.png

如果DomainManager.dll也放在bin目录下,程序启动时会被劫持,如下图所示。

5-2.png

0x06 小结

介绍了一种通过修改AppDomainManager实现的被动后门触发机制,并分析了使用的思路。从防御者的角度来看,我们只需要关注与。Net程序。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...