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;
}

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í?

  1. Program ./ch11 sa spustil s právami používateľa app-script-ch11-cracked.
  2. Zavolal príkaz system("ls ...").
  3. Systém sa pozrel do našej upravenej $PATH a v priečinku /tmp/theoldone našiel náš falošný súbor ls.
  4. Keďže náš ls bol v skutočnosti iba zástupca pre cat, SUID program vykonal: cat /challenge/app-script/ch11/.passwd
  5. máme flag.
TheOldOne · Miroslav Gensor ·