상세 컨텐츠

본문 제목

Hack The Box 해킹 모의 침투 #9: Support

HackTheBox

by 0xmh 2024. 3. 2. 21:06

본문

728x90

안녕하세요~ 오늘은 오랜만에 모의침투 하나 하겠습니다!

HTB의 Support이라는 머신을 풀어볼 것이고, 첫 단계에서는 SMB Share에 연결해서, 바이너리를 다운로드하고, 바이너리 속에 숨어 있는 비밀번호를 얻어, 유저 플래그를 받고, Bloodhound이라는 툴로 권한상승을 하겠습니다.

 

Nmap 스캔을 딱 보니까 뭔가 Domain Controller인 것 같다는 생각이 들었습니다. "dc.support.htb"하고 "support.htb"가 있길래 칼리의 /etc/hosts에 둘을 넣고, SMB 포트도 열려 있어서 접속해 봤더니...

1. Nmap Scan

"support-tools"이라는 폴더에 접근할 수 있더라고요. 그것뿐만 아니라 파일도 다운로드할 수 있고 share에 있는 파일들 중에 "UserInfo.exe.zip"이 흥미로울 것 같아서 다운로드하였습니다

2. SMB Share

무엇을 하는 프로그램인지 궁금해서 DNSpy로 열어봤더니 "getPassword"이라는 함수가 있었고 Base64와 xor를 활용하는 암호화 루틴이 있었습니다. 당연히 이 루틴을 똑같이 파이썬이나 다른 언어로 만들어서 비밀번호를 얻을 수 있지만 저는 그냥 breakpoint 하나 박아놓고 프로그램을 실행시켜봤습니다.

3. DNSpy getPassword

바이너리를 실행시키고 breakpoint에 도달했을 때 다음의 비밀번호를 얻었습니다. 아래 사진에 "support\\ldap"을 보니 유저이름도 알려주네요.

4. DNSpy 비밀번호

CrackMapExec으로 로그인이 되는지를 확인해 봤더니 잘 됐습니다.

얻은 비밀번호와 유저이름으로 Domain에 authenticate할 수 있으니 Bloodhound라는 툴로 도메인 자체를 enumerate하고 권한상승 방법에 대해서 확인할 수 있습니다. 툴을 돌려보고 다양한 유저들, 그룹들, gpo 등 확인할 수 있었습니다. 

5. BloodHound 1

BloodHound가 만들어준 그래프를 보니, support이라는 유저가 "CanPSRemote" 가능하고, 원격으로 로그인 가능하다는 것입니다. 하지만 비밀번호는?

6. BloodHound 2

아까 받은 비밀번호로는 로그인이 되지는 않지만 그 비밀번호 ldapsearch이라는 툴을 돌려볼 수 있습니다

ldapsearch -h support.htb -D 'ldap@support.htb' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "DC=support,DC=htb"

 

support이라는 유저를 검색해 봤는데 5094번 줄에 info라는 필드에 신기한 입력값이 나왔는데 뭔가 비밀번호 일지도...

7. ldapsearch

그래서 evil-winrm을 사용해서 원격으로 한번 접속해 봤더니... 잘 됐습니다. user.txt 플래그 획득!

8. Evil-WinRM

다시 BloodHound으로 돌아가서, support이라는 유저가 "Shared Support Accounts"이라는 그룹의 멤버이고, 이 그룹은 DC.SUPPORT.HTB에 대한 GenericAll 권한이 있습니다. (BloodHound가 좋은 이유가 "GenericAll" 같은 권한상승 방법을 누르면 이를 어떻게 악용할 수 있는지까지 알려준다는 것입니다.)

9. BloodHound 3

BloodHound의 설명에 따라 일단 PowerView하고 Powermad이라는 툴을 필요하기 때문에 evil-winrm 쉘로 두 툴을 업로드합니다.

10. Tool 업로드

 

공격 과정은 간략하게 설명해 보자면:

1) Powermad으로 우리가 컨트롤할 수 있는 가짜 유저를 도메인에 추가한다. DC가 가짜 유저를 신뢰할 수 있도록 설

2) DC인 척하면서 가짜 머신을 위한 Kerberos ticket을 받고 그것으로 다른 유저 (예를 들어 Administrator)로 사칭할 수 있다

3) 받은 ticket으로 Administrator로 로그인

 

먼저 가짜 유저를 추가하겠습니다.

11. 가짜 유저 생성

다음 단계는 조금 어려워보지만, 이것도 BloodHound 안에서 다 알려줍니다!

1) 먼저 fakesid이라는 변수에 가짜 머신의 SID를 저장해둡니다.

2) 방금 받은 SID로 ACE (Access Control Entity)를 만들어야 하며 새로 생성시킨 ACE의 binary bytes 들을 SD라는 변수에 저장해 둡니다

3) Get-DomainComputer로 "msds-allowedtoactonbehalfofotheridentity"라는 필드를 사용합니다. (번역하면 아마 뭘 하는 애인지 바로 명확할 것 같음: 다른 신분을 대신하여 행동할 수 있도록 허용됨)

조금 더 쉽게 3번을 설명하자면: 다른 유저의 kerberos 티켓을 sign할 수 있으, 다른 유저인 척할 수 있다, 도메인의 다른 유저들이 우리를 신뢰한다.

12. 가짜 유저 추가 설정

 

Rubeus이라는 툴도 업로드하고 추가된 가짜 유저의 해쉬를 얻습니다.

13. Rubeus Hash

위 사진의 rc4_hmac 해쉬를 활용하여 rubeus로 어떤 유저를 사칭할지 입력하고 ticket을 받을 수 있습니다.

.\Rubeus.exe s4u /user:0xmh$ /rc4:F6BD2928D3B361142C177A07A4E873C5 /impersonateuser:administrator /msdsspn:cifs/dc.support.htb /ptt

14. Rubeus Ticket

base64 코딩되어 있어서 ticket.kirbi.b64로 저장하고 리눅스의 base64 기능을 활용하여 ticket.kribi로 변환시키고, impacket의 ticketConverter를 활용하여 쓸만한 티켓 형태로 바꿔주고 psexec으로 administrator로 Domain Controller에 로그인할 수 있습니다. root 플래그 획득 완료!

15. PsExec으로 Admin 로그인

 

관련글 더보기