BRUTE AE: 09security: Test: Check for pwned!
What's your question?
Když si pustím server u sebe, tak adresu kam skočit mi řekne výpis toho serveru, kde mi řekne, že filename je 0xffffněco. Takže adresu bych měl mít správně. To že přepíšu správnou věc poznám v gdb, protože mi server hodí segmentation fault s tou adresou, kterou mu dám, když mu dám něco mimo.
Spoiler warning
Mělo by to být 297 znaků a poté zapsat tu adresu. V tom bych neměl mít chybu.A protože uvnitř instrukcí zapisuji potřebné hodnoty na vypsání pwned! na pozici udanou pomocí %ebp, ale old_ebp bych přepsal, protože je hned za return adresou na stacku, což je z hlediska přepisování hned před return adresou, tak tam zapíšu tu samou adresu, abych si hodil %ebp někam, kde rozhodně je stack.
Když mu dám tu adresu filename, tak chvilku jede a hodí segmentation fault o 161 znaků dál, což by odpovídalo tomu, že by selhal uprostřed instrukce mov $0x4, %eax. Což mi je divný.
Takže mám dvě možnosti.
Buď skáču někam úplně do pryč, kde můj kód vůbec není. A jen čirou náhodou to vypadá, že tam nejspíš je. Což bych dělat neměl, protože výpis filename adresy na straně serveru by mi měl přesně říct, kde mi začíná pole znaků.
Nebo můj payload obsahuje nesmyslné instrukce, které nic smysluplného neudělají. Což by taky nemělo být, protože používám ten nejzákladnější payload. Někam do paměti si uložím znaky pwned!\n, do eax dám 0x4, do ebx dám 0x1, do ecx hodím adresu, kam jsem hodil pwned!\n, do edx dám počet znaků a zavolám int 80. Což je akorát objdump tohohle:
Mohl byste mi prosím dát nějakou radu, kde co dělám špatně?
A také není nějaký lepší způsob, jak donutit bash, aby nezahodil null byty z výstupu C programu, abych nemusel dělat tohle:
Kde mu ty null byty doplním manuálně.
Keep this URL here: https://cw.felk.cvut.cz/brute/data/ae/release/2020z_b4b35osy/09security/cviceni/ae/results/results.php?&idg=sevicjan&idu=5946&upload=1005316&result=640778#test-1