clrinject:向CLR Runtimes和AppDomain中注入代碼的工具
前言
clrinject是一款可將C#,EXE或DLL程序集,注入另一個進程CLR Runtimes和AppDomain的工具。注入的程序集可訪問injectee進程類的靜態實例,從而影響其內部狀態。
使用
clrinject-cli.exe -p <processId/processName> -a <assemblyFile>
打開id為
或名稱為
的進程,注入 EXE並執行Main方法。
其他選項
-e:枚舉所有已載入的CLR Runtimes時和創建的AppDomain。
-d <#>:僅注入<#> -th AppDomain。如果未指定數字或指定為零,則會將程序集注入到所有AppDomain。
-i <namespace>.<className>:從命名空間<namespace>創建類<className>的實例。
示例
使用示例
從victim.exe枚舉Runtimes和AppDomains:
clrinject-cli.exe -p victim.exe -e
將invader.exe從id為1234的進程注入第二個AppDomain:
clrinject-cli.exe -p 1234 -a "C:PathToinvader.exe" -d 2
在victim.exe中的每個AppDomain中創建Invader實例:
clrinject-cli.exe -p victim.exe -a "C:PathToinvader.dll" -i "Invader.Invader"
將x64程序集注入x64進程:
clrinject-cli64.exe -p victim64.exe -a "C:PathToinvader64.exe"
可注入程序集示例
以下代碼可編譯為C#可執行文件,然後注入到一個PowerShell進程。這段代碼將會訪問內部PowerShell類的靜態實例,並將控制台文本的顏色更改為綠色。
using System;
using System.Reflection;
using Microsoft.PowerShell;
using System.Management.Automation.Host;
namespace Invader
{
class Invader
{
static void Main(string[] args)
{
try
{
var powerShellAssembly = typeof(ConsoleShell).Assembly;
var consoleHostType = powerShellAssembly.GetType("Microsoft.PowerShell.ConsoleHost");
var consoleHost = consoleHostType.GetProperty("SingletonInstance", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null);
var ui = (PSHostUserInterface)consoleHostType.GetProperty("UI").GetValue(consoleHost);
ui.RawUI.ForegroundColor = ConsoleColor.Green;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
注入命令:
clrinject-cli64.exe -p powershell.exe -a "C:PathToinvader64.exe"
結果:
*參考來源:github,FB小編secist編譯,轉載請註明來自FreeBuf.COM
※在Splunk上安裝自定義應用反彈Shell的方法
※隱藏在證書文件中的PowerShell(一)
TAG:FreeBuf |