Ahojte, vyzerá to tak, že už si ďalej neporadím sám, a preto to skúsim tu.
Ide o to, že som si vytvoril malý program, ktorý zo vstupu nakopíruje znaky do nejakého buffera (char[16]) pomocou funkcie strcpy (v C), a keďže táto funkcia nie je tak úplne bezpečná rad by som pomocou pretečenia buffera spustil nejaký iný kód (exploit, napríklad kalkulačku).
Dám vstup do funkcie "aaaabbbbcccc" zbehne to všetko v pohode (ved prečo by aj nemalo). Ak je vstupom niečo dlhšie (napríklad 24 znakov, aby som prekryl EIP), viem si nájsť adresu registra EIP, ktorý obsahuje adresu nasledujúcej inštrukcie.
Ďalej som si vytvoril ďalší program, ktorý vytvorí vstup pre program1 a to spojením nasledujúcich do jedného reťazca:
1) nejakých 20 znakov, napr "aaaa.....eeee" (20 preto, lebo je potrebné prepísať ešte register EBP, ktorý je pred EIP)
2) 4 znaky, ktoré prepíšu EIP a teda je to adresa nasledujúcej inštrukcie, kde sa nachádza exploit
3) a samotný exploit
Program2 potom spusti program1 s týmto reťazcom, čo by podľa mňa malo znamenať, že sa spusti program1, funkciou strcpy sa nakopírujú znaky, prepíše sa EIP a vykonaním EIP sa prejde na exploit.
Problémom momentálne je, že sa mi ten exploit nespustí. Hodnotu v EIP mam aspoň podľa debuggera dobrú a aj exploit mám určite dobrý, pretože ak počas behu programu na neho ručne presmerujem v debuggeri (používam ollydbg) tak sa vykoná, spustí sa kalkulačka.
Nenapadá niekoho, kde by som mohol robiť chybu?
(ASLR aj bufer security chceck (vo visual studio) mám vypnuté), a túto celú srandu robím vo win xp
Buffer overflow
-
harrison314
Hardcore addict
- Príspevky: 8219
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Buffer overflow
Len hadam, ale skus dat do EIP adresu explpoitu o jednu nizsiu. Mam pocit, ze sa po kazdej instrukcii inkeremetuje.
Re: Buffer overflow
- Čím sa pripisuje EBP? leave sa vykonáva pred ret, čiže možno sa ti aj exploit spustí, ale v zlej časti zásobníku.
- Čím prepisuješ EIP? Berieš ohľad na indiánov a na otočenie prvkov (ale nie bajtov) v zásobníku? Berieš ohľad na poradie znakov
- Pozrel si aj či sa do zásobníka uložili správne dáta? (BTW ako dosahuješ dávaš na vstup adresu? Akým spôsobom?)