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ůže hodit vědět následující:

  • Jak funguje protokol HTTP 1.1 (specifikace)
  • K čemu slouží příkaz nm.
  • Základní příkazy debuggeru gdb: run, break, print, next, step, nexti, stepi, layout asm, layout regs. Kromě gdb 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 (gcc automaticky kompiluje přípony .s a .S pouze assemblerem).
  • Příkazem objcopy můžete vykopírovat “holé” strojové instrukce z programu. Např. příkaz objcopy -O binary –only-section=.text –only-section=.rodata prog prog.bin vykopíruje z programu prog kód (.text) a read-only data (globální proměnné deklarované jako const).
  • Disassemblovat “holou” binárku (např. soubor prog.bin vytvořený výše uvedeným příkazem objcopy) můžete příkazem objdump -D -b binary -m i386 prog.bin nebo ndisasm -b 32 prog.bin.
  • Ke komunikaci s webovým serverem nemusíte používat jen webový prohlížeč, ale třeba i nástroje nc, wget nebo curl.

Zadání

Tato úloha není povinná.

Vytvořte útok na tento webový server. Můžete si vybrat z několika různě složitých variant útoku:

  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ů.
  3. Změňte obrázek na produkčním serveru – více jak 5 bodů (záleží na domluvě se cvičícím).

Do odevzdávacího systému nahrávejte archiv, který bude obsahovat všechny vaše zdrojové soubory a 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. 3. variantu odevzdávací systém netestuje, počítá se pouze změna obrázku na produkčním serveru.

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.
  • Budete potřebovat znát alespoň základy HTTP protokolu.
  • 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.
  • Další nápovědu můžete získat na fóru.
courses/b4b35osy/cviceni/cviceni9_exploit.txt · Last modified: 2018/12/20 23:34 by sojkam1