První úloha „Najdi tajný recept na pizzu“
Zadání úlohy
V rámci scénáře naší první úlohy máme nějakou adresářovou strukturu, kterou ovšem neznáme. Nejprve si zkus úlohu vyřešit sám pomocí znalostí, kterými nyní disponuješ. Ale nebudou Ti stačit. Níže máš k dispozici přehled všech commandů, které budeš potřebovat k vyřešení této úlohy/scénáře.
Příkazy k vyřešení úlohy s krátkým popisem
ls
- („list“ – seznam) ukáže seznam souborů v aktuálním adresáři, za použití určitých parametrů můžeš vidět i velikosti souborů, čas vytvoření souborů a práva souborů
cd
- („change directory“ – změna adresáře) umožňuje změnit aktuální pracovní adresář, po otevření terminálu jsi, jak už víš, ve svém domovském adresáři (značen vlnovkou), pro pohyb v systému souborů slouží příkaz cd následovaný cestou kam se chceš dostat
cat
– vypíše obsah souboru, název požadovaného souboru napíšeš za tento po mezeře, stejně jako v případě cd, tedy například cat soubor.txt vypíše obsah „soubor.txt“
nano
– malý a jednoduchý textový editor určený pro práci editaci souborů v terminálu, zadává se název souboru, pro editaci stačí zadat command nano soubor.txt
less
- řízení výstupu, vypíše obsah souboru po stránkách, nic nám neuteče, z commandu se vystupuje se stisknutím klávesy q
, zadává se název souboru, například less soubor.txt
grep
- slouží k hledání daných výrazů v textu, vypíše řádek s hledaným textem, zadává se název souboru a pomocí přepínače -e
hledaný text, například grep soubor.txt -e "flag"
Opravdu nejprve zkus úloh vyřešit samostatně s využitím dostupných zdrojů. Bádej, zkoušej a neboj se vyhledávat na internetu.
Řešení úloh krok za krokem
Pomocí příkazu ls
si vypíšeme si seznam souborů v aktuálním (domovském) adresáři, abychom se zorientovali a zjistili, s jakými soubory vlastně pracujeme.
<![if !vml]><![endif]>
Na terminálu se nám vypsaly nějaké soubory. Mezi nimi vidíme i složky, které jsou od souborů na první pohled vizuálně odlišné – mají modrou barvu. Podívejme se proto do těchto složek „contracts
“, „invoices
“ a „videos
“ pomocí příkazů cd contracts
, cd invoices
a cd videos
. Nezapomeňme se vždy vrátit o úroveň výše pomocí cd ../
nebo použitím absolutní cesty.
Prvním příkazem tedy bude cd contracts
a přesuneme se do složky „contracts“. Následně si pomocí příkazu ls
vypíšeme si obsah této složky.
<![if !vml]><![endif]>
Zjišťujeme, že obsahem jsou pouze soubory s koncovkou „.docx
“. Vlajka může být schovaná někde mezi dokumenty. Napovíme, že zde to není.
Pomocí příkazu cd ../
se přesuneme zpět o úroveň výš do adresáře /home/franta
.
<![if !vml]><![endif]>
Zde přeskočíme složku „invoices
“ (také neobsahuje nic zajímavého) a zkusíme si ještě vypsat obsah poslední složky „videos
“.
<![if !vml]><![endif]>
Složka obsahuje další podsložky (modře), pojďme je prohledat!
Nyní se naučíme, že pro vypsání obsahu složky příkazem ls
se nemusíme vždy nacházet v té dané složce a přicházet do ní pomocí commandu cd
. Zobrazit obsah složky se dá také pouhým příkazem cd
, kde za mezerou uvedeme přímo název složky. Uvést lze absolutní i relativní cestu.
Příkaz by poté vypadal následovně
franta@pizzeria:~$ ls <název složky>
Zkusíme prohledat další podsložky pomocí příkazu uvedeného výše.
<![if !vml]><![endif]>
V případě obsahu složky „2020-11
“ však vidíme že soubor „camera-footage-2020-11-17.mp4
“ je ve skutečnosti složka a nikoliv soubor. Zajímavé! Naše další pátrání se bude ubírat tímto směrem.
<![if !vml]><![endif]>
Přesuneme se proto dovnitř složky pomocí
franta@pizzeria:~/videos$ cd 2020-11/camera-footage-2020-11-17.mp4/
A zjistíme, co je ve složce pomocí příkazu ls
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ ls
<![if !vml]><![endif]>
A vidíme zde dva velice podezřelé soubory, konkrétně „lock_state
“ a „secret
“. Předpokládáme, že vlajka bude umístěna v souboru „secret
“. Pokusme si proto vypsat jeho soubor do terminálu. Provedeme to pomocí nového commadu cat
, který jsme zmiňovali na začátku kapitoly spolu s instrukcemi.
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ cat secret
<![if !vml]><![endif]>
Bohužel dostáváme zamítavou hlášku s tím, že přístup nám byl zamítnut. Nemáme totiž příslušná přístupová práva, abychom si mohli soubor zobrazit, Pravděpodobně nám chybí práva ke čtení souboru.
Vypišme si proto znovu obsah aktuální složky. Nyní však využijme přepínače „-l
“, který nám prozradí, jaká oprávnění musíme mít k práci s danými soubory.
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ ls -l
<![if !vml]><![endif]>
Nejsme vlastníci souborů, vlastníkem je uživatel root (třetí sloupec) a vlastnickou skupinou také root (čtvrtý sloupec). Ponechme nyní komplexní teorii oprávnění stranou a zaměřme se na to, jak získat přístup k požadovanému souboru.
Jelikož aktuálně přihlášený uživatel je „franta
“ a nikoliv „root
“, který je také vlastníkem, nemůžeme soubor zobrazit. Proč? U souboru „secret
“ jsou poslední 3 sloty ---
a my potřebujeme, abychom měli alespoň práva pro čtení (r
- read), tedy aby poslední tři segmenty vypadaly následovně: r--
.
S tím, co nyní víme, si všímáme další zajímavé věci. U souboru „lock_state
“ ono písmenko pro čtení „r
“ (read) vidíme a hned vedle něj také „w
“ pro zápis (write). Naše cesta k získání vlajky proto povede prostřednictvím tohoto souboru „lock_state
“.
Pomocí již známého commandu cat
s vypíšeme obsah souboru „lock_state
“, protože u něj máme oprávnění zapisovat (r ve třetím segmentu).
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ cat lock_state
<![if !vml]><![endif]>
Obsahem souboru je text locked
. Hmm, zkusme jej změnit na unlocked
. Z předešlého použití příkazu ls -l
víme, že do tohoto souboru lock_state
můžeme zapisovat. Zkusme to.
Využijme dalšího nového příkazu nano
, který nám umožní upravovat jakýkoliv soubor, a to následujícím commandem
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ nano lock_state
<![if !vml]><![endif]>
Zkusme na začátek souboru připsat „un
“ a soubor uložit pomocí CTRL + X
a potvrzení, že chceme změny zapsat stisknutím klávesy „Y
“.
<![if !vml]><![endif]>
Automatizovaný skript běžící na pozadí nám nyní přidělil práva ke čtení souboru „secret
“.
Podívejte se na obsah souboru „secret
“
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ cat secret<![if !vml]><![endif]>
Vidíme ohromné množství textů. Jsou zde uložené desítky receptů. Jak jen najít naši vlajku?
Zadejte příkaz
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ less secret
Pomocí příkazu less
můžeme číst soubor postupně a pohybovat pomocí šipek nahoru/dolů. Ovšem takové řešení je pomalé, představme si, že by soubor obsahoval stovky receptů. Pomocí stisknutí klávesy s lomítkem, napsání požadovaného řetězce a stisknutím Enteru můžeme v souboru vyhledávat – / retezec [ENTER]
.
Mnohem efektivnější a rychlejší volbou je využití commandu grep
. Ten nám vypíše řádek, v němž se vyskytoval námi hledaný textový řetězec. Jak na to?
Nejprve ukončeme procházení souboru v rámci příkazu less
stisknutím klávesy „Q
“, abychom se vrátili zpět z promptu terminálu. Zadejme následující command
franta@pizzeria:~/videos/2020-11/camera-footage-2020-11-17.mp4$ grep secret -e "flag"
<![if !vml]><![endif]>
V obecné syntaxi u příkazu grep
nejdříve zadáme název souboru, poté využijeme přepínač -e
, jehož argumentem je v uvozovkách hledaný text. Jelikož jsme si na začátku sdělili, že v rámci CTF úloh je vlajka ve formátu flag{XXX}
, je vhodné pomocí grep
filtrovat právě řádky s výskytem řetězce „flag
“.
Hotovo! Na terminálu se nám vypsala požadovaná vlajka. Nyní je z Tebe opravdový hacker.
Gratulace!
V příští kapitole prohloubíme Tvé znalosti co se týče práce v terminálu a zadávání příkazů. Společně se podíváme na tvorbu složek a nových souborů, jejich mazání, kopírování a další operace. Dozvíš se také něco o manuálech příkazů. Zaměříme se také na fungování uživatelů, skupin a jejich oprávnění.