Buffer overflow

Programovacie jazyky, rady, poradňa...
gumb4ll
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 226
Registrovaný: 26 máj 2006, 21:26
Bydlisko: KE
Kontaktovať používateľa:

Buffer overflow

Príspevok od používateľa gumb4ll »

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
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Buffer overflow

Príspevok od používateľa harrison314 »

Len hadam, ale skus dat do EIP adresu explpoitu o jednu nizsiu. Mam pocit, ze sa po kazdej instrukcii inkeremetuje.
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Buffer overflow

Príspevok od používateľa pcsiete »

  1. Čí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.
  2. Čí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
  3. 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?)
Napísať odpoveď