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