Warning
This page is located in archive. Go to the latest version of this course pages.

Útok pomocí přetečení zásobníku

Domácí příprava

Většina informací potřebných pro řešení této úlohy zazněla na přednášce. Dále se vám můžou hodit i následující informace:

  • Jak funguje protokol HTTP 1.1 (specifikace)
  • Příkaz nm.
  • Základní příkazy debuggeru gdb: run, break, print, next, step, nexti, stepi, layout asm, layout regs. Můžete použít i jiné debuggery, či grafické nadstavby.
  • Pokud budete potřebovat přeložit assembler, můžete použít příkaz as –32, či gcc -m32 source.s (přípony .s a .S jsou automaticky kompilovány pouze assemblerem).
  • Příkaz objcopy, např. objcopy -O binary –only-section=.text –only-section=.rodata prog prog.bin
  • Disassemblovat “holou” binárku můžete příkazem objdump -D -b binary -m i386 prog.bin
  • Nástroje nc, wget, curl

Zadání

V neděli 3. 12. byl změněn kód serveru. Důvod je následující: Během prvního cvičení byla v serveru narychlo opravena chyba, která neočekávaně způsobila změnu pořadí proměnných na zásobníku, což znemožňovalo jednoduché útoky. Aktuální verze serveru opět jednoduché útoky umožňuje. Navíc, protože adresa zásobníku se mezi jednotlivými počítači může lišit, obsahuje nová verze i nápovědu, která vám útok usnadní. Odevzdávací systém má prodloužen deadline a testuje vaše útoky proti oběma verzím, takže, pokud máte funkční útok na původní verzi, bude vám fungovat. Kvůli odevzdávacímu systému jsme ještě museli drobně změnit zadání: Soubor secret.txt byl přesunut z /home do /tmp.

Tato úloha není povinná.

Vytvořte útok na tento webový server. Můžete si vybrat ze dvou variant řešení:

  1. Způsobte, že server vypíše na svůj standardní výstup řádku “pwned!” (bez uvozovek) – 4 body.
  2. Zjistěte, co je na serveru v souboru /tmp/secret.txt – 5 bodů.

Do odevzdávacího systému nahrávejte archiv, který bude mimo jiné obsahovat spustitelný soubor exploit. Ten bude spuštěn a jako parametr mu bude předáno URL webového serveru, na který má zaútočit. Např. ./exploit http://localhost:8080. V případě 1. varianty zadání nebude na stdout vypsáno nic, u 2. varianty se tam vypíše obsah souboru /tmp/secret.txt.

Nápověda

  • Doporučujeme obstarat si binárku serveru a vyvíjet útok lokálně. Když uspějete lokálně, vyzkoušejte to na našem serveru (smysl má pouze varianta 2) a pak svůj útok nahrajte do upload systému.
  • Server je 32bitový program, ale to byste určitě zjistili i sami.
  • Abychom vám hackování trochu ulehčili, podstatné části kódu serveru, zpracovávající HTTP požadavky, nepracují s nulou ukončenými řetězci.
  • Může se vám hodit nástroj radare, který používá mnoho profesionálů. Základní informace o použití radare jako debuggeru najdete zde či zde.
courses/b4b35osy/cviceni/cviceni9_exploit.txt · Last modified: 2017/12/08 09:08 by chudobj