RootMe – Bash – System 1

https://www.root-me.org/en/Challenges/App-Script/ELF32-System-1
Hneď po prihlásení zadáme príkaz ls -al, ktorý nám ukáže skryté súbory, ich vlastníkov a prístupové práva. Vo výpise vidíme kľúčové stopy:

-r-------- .passwd
Tento súbor obsahuje heslo (flag). Vlastní ho používateľ app-script-ch11-cracked. My (app-script-ch11) nemáme právo ho čítať (máme tam pomlčky ---). Pokus o cat .passwd zlyhá.
-r--r----- ch11.c
Zdrojový kód v jazyku C. Máme právo si ho prečítať (r--), čo nám umožní pochopiť, ako program funguje.
-r-sr-x--- ch11
Všimnite si príznak s na mieste, kde býva spustiteľné x (-r-sr-x---). Ide o SUID príznak. Tento skompilovaný program vlastní app-script-ch11-cracked. Keď ho spustíme, pobeží s jeho (vyššími) právami a teoreticky dokáže prečítať .passwd.
Otvoríme si zdrojový kód, aby sme zistili, čo program robí a či neobsahuje chybu. V kóde vidíme:
int main(void)
{
setreuid(geteuid(), geteuid());
system("ls /challenge/app-script/ch11/.passwd");
return 0;
}
setreuid(...): Program potvrdzuje, že identita procesu sa natvrdo prepína na vlastníka (administrátora výzvy).system("ls ..."): Program vykonáva príkaz. Autor použil ibals(relatívnu cestu) namiesto bezpečného/bin/ls(absolútnej cesty). Program sa preto pri hľadaní príkazulsspoľahne na premennú$PATH.
-viac o tejto chybe programátora:- https://theoldone.sk/docs/nebezpecenstva-suid-shell-skriptov/
- https://theoldone.sk/docs/privilegovane-programy-set-uid/
Keďže vieme, že program bude hľadať ls v priečinkoch definovaných v $PATH, podstrčíme mu náš vlastný priečinok na prvé miesto.
Jednoduchšie by bolo upraviť príkaz ls na cat ale nemáme práva na úpravu kódu.
V domovskom priečinku nemáme práva na zápis, tak ideme do /tmp a tam si vytvorím zložku theoldone:

Vytvoríme symbolický odkaz s názvom ls, ktorý v skutočnosti ukazuje na cat
(ls je použitý v programe ale my chceme súbor s flagom prečítať tak ho namapujeme na príkaz cat)
Zmeníme systémovú cestu tak, aby systém hľadal príkazy najprv u nás v /tmp/theoldone

Vrátime sa do domovského adresára a spustíme originálny SUID program:

Čo sa stalo na pozadí?
- Program
./ch11sa spustil s právami používateľaapp-script-ch11-cracked. - Zavolal príkaz
system("ls ..."). - Systém sa pozrel do našej upravenej
$PATHa v priečinku/tmp/theoldonenašiel náš falošný súborls. - Keďže náš
lsbol v skutočnosti iba zástupca precat, SUID program vykonal:cat /challenge/app-script/ch11/.passwd - máme flag.