
해시를 명명된 파이프로 전달하여 토큰 가장(Token Impersonation) 수행
이 프로젝트는 로컬 네임드 파이프 사용자 가장(Impersonation)에서 인증을 위해 Pass-the-Hash를 사용하는 PoC 코드입니다. 설명하는 블로그 포스트도 있습니다:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
이 코드는 Invoke-SMBExec.ps1 및 RoguePotato 프로젝트의 코드를 기반으로 합니다.
저는 과거에 특정 Offensive Security 프로젝트 상황에 직면했었는데, 이미 낮은 권한 사용자 계정의 NTLM 해시를 가지고 있었고, 현재 침해된 시스템에서 해당 사용자에 대한 셸이 필요했지만, 현재 공개된 도구로는 불가능했습니다. 그런 상황에 대해 두 가지 사실을 더 상상해보세요. NTLM 해시를 크랙할 수 없었고 또한 피해자 사용자의 프로세스가 없어서 그 안에 셸코드를 실행하거나 마이그레이션할 수 없었습니다. 어떤 분들에게는 터무니없는 에지 케이스처럼 들릴 수 있습니다. 저는 여전히 그것을 여러 번 경험했습니다. 한 번의 엔게이지먼트뿐만 아니라 특정 상황에서 올바른 도구/기법을 찾는 데 많은 시간을 보냈습니다.
도구/기법에 대한 개인적인 목표는 다음과 같았습니다:
low privileged 계정도 가장(Impersonate)할 수 있어야 합니다. 엔게이지먼트 목표에 따라 CEO, HR 계정, SAP 관리자 등 특정 사용자로 시스템에 접근해야 할 수 있습니다.안타깝게도 가장된 사용자는 네트워크 인증이 허용되지 않습니다. 새 프로세스가 제한된 가장 토큰(Impersonation Token)을 사용하기 때문입니다. 따라서 이 기법은 다른 사용자로 로컬 작업을 수행하는 데만 사용할 수 있습니다.
이 기법을 사용하는 두 가지 방법이 있습니다. \Resources\PipeServerImpersonate.sln을 컴파일하여 실행 파일을 원격 호스트에 드롭하고 \Resources\Invoke-NamedPipePTH.ps1을 통해 Named Pipe에 연결할 수 있습니다:
또는 메모리 상에 유지되는 독립형 스크립트를 사용할 수 있습니다:
실행을 위해 바이너리를 드롭하고 싶지 않다면, Powershell과 같은 네이티브 Windows 바이너리에 대한 인수를 전달하면 됩니다
Invoke-ImpersonateUser-PTH -Username USERNAME -Hash NTLMHASH -Domain DOMAIN -PipeName mypipe -binary "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -argument "-nop -w 1 -sta -enc BASEBLOB"