m4rzus

Untitled

Apr 3rd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. Zdravim,
  2. posielam vam ukoly 1-3 z buffer overflow.
  3.  
  4. 1.
  5. 0019FF24 - 0019FF34 -> buffer
  6. 0019FF38 -> zaloha EBP
  7. 0019FF3C -> navratova adresa
  8. 0019FF40 -> argc
  9. 0019FF44 -> argv
  10.  
  11. 2.
  12. Vdaka znalostiam o zasobniku dokazeme utok zostavit zo samotneho vstupu
  13. programu. Do vstupu zadame skodlivy kod nasledovany vyplnou vyplnujucou
  14. zvysok buffera a zalohu adresy EBP. Nasledovat bude prepisana navratova
  15. adresa, ktoru prepiseme adresou zaciatku buffera.
  16. Buffer je velky 20 bytov, zaloha adresy EBP 4 byty a navratova adresa 4
  17. (respektive 3 kvoli 00 na zaciatku buffer adresy) byty. Cely vstup bude
  18. mat teda spolu 28 (respektive 27 kvoli 00 na zaciatku adresy zaciatku
  19. buffera) znakov.
  20. Ako vypln pouzijeme instrukcie NOP (hex kod 90). Pre kazdu instrukciu
  21. zistime jej hex hodnotu (napriklad v debuggeri), ktoru nasledne
  22. prevedieme na decimalnu hodnotu a zapiseme pomocou skratky ALT+[dec.
  23. hodnota]. Napriklad instrukciu NOP teda zapiseme ako ALT+144, co sa
  24. prevedie na "É".
  25. Rovnako tak prevedieme aj adresu zaciatku bufferu, ktoru zadame kvoli
  26. endianu zprava dolava (0019FF24 zadame ako 24FF19, teda ako $ ↓
  27. [ALT+36,ALT+255,ALT+25]).
  28. Vstup bude vyzerat teda viacmenej nasledovne:
  29. [skodlivy kod + vypln, dokopy 24 znakov][adresa na zaciatok buffera, 4
  30. (respektive 3 kvoli 00 na zaciatku adresy) znaky]
  31. [ skodlivy kod dlzky n ][ (24-n) x É ]↑ ↓
  32.  
  33. Program teda nacita vstup. Prepise sa zaloha adresy EBP a navratova
  34. adresa programu. Program vypise buffer a dojde az na navratovu adresu,
  35. na ktoru skoci. Kedze na mieste, kde bola predtym navratova adresa, sa
  36. nachadza adresa zaciatku buffera, skoci program na tuto adresu a
  37. instrukcie zadane do buffera sa zacnu vykonavat.
  38. Skodlivy kod bude vyuzivat funkciu WinExec, ktorou spustime kalkulacku.
  39. Bude obsahovat instrukcie na postupne naplnenie zasobnika argumentami
  40. funkcie WinExec (2 argumenty, nazov programu a cislo oznacujuce stav
  41. vypisu na cmdline), ulozenie adresy funkcie WinExec do jedneho z
  42. registrov a nasledne zavolanie funkcie (CALL [register s adresou na
  43. WinExec]).
  44.  
  45. 3.
  46. Vyuzijeme funkciu WinExec z kniznice kernel32.dll . Na ziskanie adresy
  47. vyuzijeme jednoduchy C program vyuzivajuci funkcie z hlavickoveho suboru
  48. windows.h, ktory nacita kniznicu kernel32.dll pomocou funckie
  49. LoadLibrary a nasledne zisti adresu funkcie WinExec pomocou funkcie
  50. GetProcAddress.
  51. Adresa si vypiseme pomocou funkcie printf v hex formate pomocou
  52. formatovania %x.
  53. Adresa WinExec (u mna) = 760D3A30
  54. Zdrojovy kod + binarka v prilohe.
Advertisement
Add Comment
Please, Sign In to add comment