Zadanie
Ak máte akékoľvek otázky ohľadom tejto úlohy, napíšte Prefixovi na [email protected]
Táto úloha nadväzuje na úlohu A tak sa Denis stratil z prechádzajúceho kola. Pri riešení tejto úlohy preto môžete využívať vzorové riešnie z minula.
Podarilo sa vám dostať k poslednému kódu. Zapísali ste ho do súboru spolu s ostatnými kódmi. Zrazu ste začuli hlasné vžuuu a Denis sa z čista jasna vynoril z počítača. Predsa len sa vám podarilo zachrániť ho. Denis vám celý nadšený poďakoval a rýchlo bežal1 po Prefixa. Niečo takéto mu predsa musí ukázať. Prefix je totižto skúsený hackerman a tento program ho bude isto zaujímať.
Denis postupne porozprával celý príbeh Prefixovi. Prefix, vzhľadom na svoju expertízu, Denisovi neveril. Ako by sa predsa mohol niekto stratiť v príkazovom riadku? Nemožné. Rozhodol sa, že sa na daný program musí pozrieť osobne. Predsa len, taký skúsený hackerman ako on rozlúskne, čo sa stalo. Veď je výrazne skúsenejší a nespraví rovnaké chyby ako Denis. Prefix príde k počítaču a spustí daný program ako správca. Vžuuuuuuuu.
Vašou úlohou je tentokrát zachrániť Prefixa. Keďže Prefix je skúsený hackerman, príkazový riadok si ho bude brániť výrazne viac ako Denisa. Prefix je v počítači roztrúsený v podobe kódov, ktoré sa nachádzajú v jednotlivých úlohách. Každý kód vyzerá ako spleť znakov a čísel, napr. d003f58b96e6b0a543bf75
.
“Ale ja sa neviem orientovať v príkazovom riadku, ako ho tam mám nájsť?” hovoríš si. Žiaden problém! Všetko potrebné na začiatok nájdeš v predchádzajúcej úlohe.
“To som si už predsa pozrel, táto úloha sa mi ale zdá ťažšia. Ako ho mám teda nájsť?”. Opäť raz si budeš musieť veľa vecí vygoogliť, no čo by si pre zmenu nespravil/a pre Prefixa?
Úloha
V tejto úlohe budete musieť vykonávať, podobne ako v úlohe, kde ste zachraňovali Denisa, rôzne podúlohy v príkazovom riadku Linuxu. Tento systém nebude bežať u vás – dostanete sa doň pomocou návodu, ktorý sme pre vás spísali. Takže sa nebojte, nemusíte si nainštalovať Linux.
V prípade, že si neviete rady, Google je váš kamarát. Pokiaľ viete, môžete skúsiť hľadať po anglicky. Väčšinou dostanete viac výsledkov, ktoré budú často aj presnejšie.
Či ste vyriešili príklad zistíte tak, že sa dostanete ku kódu, ktorý môže vyzerať napríklad takto d003f58b96e6b0a543bf75
. Tieto kódy budete na konci odovzdávať v popise. Požadujeme od vás aj krátky popis toho, ako ste príklad riešili. Nepripravili sme pre vás žiadne chytáky, takže keď už sa v príklade dostanete k niečomu, čo vyzerá ako kód, skoro určite je správny a dostanete bod.
Autor navádza na akútnosť rozhodnutia, keďže Denis len tak pre nič za nič nebeží, a nikdy nebeží rýchlo.↩
Riešenia jednotlivých podúloh
- Heslo sa nachádza v súbore. Keď zadáme
cat heslo.txt
, vidíme, že tam je množstvo náhodných znakov. Máme dve možnosti - pomocou príkazustrings
vieme vyhľadať len čitateľné texty. Tento príkaz má aj parameter-n
, ktorý špecifikuje, koľko minimálne znakov musí mať text. Takže vieme použiť príkazstrings -n 10 heslo.txt
. Druhá možnosť bola použiťgrep
s vhodným regulárnym výrazom.
- Vidíme, že heslo je 2 krát base64 enkódované. Na dekódovanie ho teda “pipeneme” cez príkaz
base64
. Kompletný príkaz je tedaecho 'Ympkek1HRnZNbXd3YkRGdU9EbHFNUT09Cg==' | base64 -d | base64 -d
- Vidíme heslo, ale po prečítaní nevieme zistiť, čo v ňom je a ani grep ho nevie nájsť. Príkaz na zistenie typu súboru je jednoduchý -
file
. Takže vieme použiťfile heslo
a zistíme, že sa jedná o JPEG obrázok. Keďže na termináli nevieme otvárať obrázky, tak môžeme použiť trik, ktorý bol popísaný v predošlej úlohe a stiahnuť si ho na počítač.
- Toto bola len demonštrácia toho, že v suid programoch vieme mať iné práva. Keďže máme spustený suid príkazový riadok ako používateľ level4, vieme prečítať obsah súboru pomocou
cat
.
- Prečítame si program. Napriek tomu, že je v jazyku C je celkom priamočiary. Program si od používateľa vypýta číslo, a ak je toto číslo rovné kľúču, program spustí
system("cat ./heslo.txt")
, čím prečíta a vypíše heslo.
- Opáť sme v podobnej situácii ako v predošlom príklade. Teraz ale nevidíme výstup programu, takže nám nestačí napísať
cat heslo.txt
. Existuje veľa možných riešení, napríklad spustiť príkazchmod a+r heslo.txt
, čím sme povolili všetkým používateľom čítať súbor.
- Napriek tomu, že heslo nevieme prečítať vieme zmeniť jeho názov. Takže
mv heslo.txt x
a následne pomocou programu prečítamex
.
- Autor programu nám chcel zamedziť čítať súbory z iných priečinkov tým, že nám zadal začiatok cesty
cat ./tuniejeheslo/
. Našťastie sa mu to nepodarilo, pretože vieme z toho vytvoriť príkazcat ./tuniejeheslo/../tujeheslo/heslo.txt
.
- Pomocou príkazu
sleep
vieme počkať pár sekúnd, nevieme ale čítať súbory. Vieme to vyriešiť napr. znakom;
. Ak vložíme1;bash
, tak z toho vzniknesleep 1;bash
. Teda najprv počkáme sekundu a potom sa nám otvorí príkazový riadok s právami používateľalevel9
. Problém, s ktorým ste sa mohli stretnúť boli medzery -scanf
skončí čítanie pri medzere, čo znamená že napr.1;cat heslo.txt
nefungovalo a bolo treba nájsť nejakú cestu okolo toho.
- Nevieme síce vylistovať obsah priečinku, to ale neznamená, že nevieme čítať súbory v ňom. Musíme však poznať ich názov. Našťastie možnosti pre názov tu nie je veľa.
for m in {00..12}; do for d in {00..31}; do cat "./obsah_tohto_priecinku_je_tajny/backup-$d-$m-18" 2>/dev/null; done; done;
prejde cez všetky možnosti v roku 2018. Pomocou2>/dev/null
nebudeme vypisovať chybové hlášky a vypíše sa nám heslo.
Diskusia
Tu môžte voľne diskutovať o riešení, deliť sa o svoje kusy kódu a podobne.
Pre pridávanie komentárov sa musíš prihlásiť.