Warning
This page is located in archive.

Ú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