Stack Shellcode
Taarifa Msingi
Msimbo wa stack shellcode ni mbinu inayotumiwa katika udukuzi wa binary ambapo muhusika anaandika msimbo wa shell kwenye stack ya programu yenye mapungufu kisha anabadilisha Mpokeaji wa Maelekezo (IP) au Mpokeaji wa Maelekezo ya Kipekee (EIP) ili kuashiria eneo la msimbo huu wa shell, kusababisha utekelezaji wake. Hii ni njia ya kawaida inayotumiwa kupata ufikiaji usioruhusiwa au kutekeleza amri za kupindukia kwenye mfumo lengwa. Hapa kuna maelezo ya mchakato, pamoja na mfano rahisi wa C na jinsi unaweza kuandika dudu linalolingana kutumia Python na pwntools.
Mfano wa C: Programu yenye Mapungufu
Tuanze na mfano rahisi wa programu ya C yenye mapungufu:
Programu hii ina mapungufu ya kujaza buffer kutokana na matumizi ya kazi ya gets()
.
Utoaji
Ili kutoa programu hii wakati wa kulemaza ulinzi mbalimbali (kwa lengo la kusimuliza mazingira yanayoweza kudhuriwa), unaweza kutumia amri ifuatayo:
-fno-stack-protector
: Inazuia ulinzi wa stak.-z execstack
: Inafanya stak iweze kutekelezwa, ambayo ni muhimu kwa kutekeleza shellcode iliyohifadhiwa kwenye stak.-no-pie
: Inazuia Utekelezaji wa Kitegemezi wa Nafasi, ikifanya iwe rahisi kutabiri anwani ya kumbukumbu ambapo shellcode yetu itakuwepo.-m32
: Inakusanya programu kama utekelezaji wa biti 32, mara nyingi hutumiwa kwa urahisi katika maendeleo ya kutumia udhaifu.
Shambulizi la Python kwa kutumia Pwntools
Hapa ndivyo unavyoweza kuandika shambulizi kwa kutumia Python ukitumia pwntools kutekeleza shambulizi la ret2shellcode.
Hati hii inajenga mzigo unaoundwa na slaidi ya NOP, shellcode, na kisha kubadilisha EIP na anwani inayoashiria kwenye slaidi ya NOP, ikidhibitisha kwamba shellcode inatekelezwa.
Slaidi ya NOP (asm('nop')
) hutumiwa kuongeza nafasi kwamba utekelezaji uta "kusukuma" kuingia kwenye shellcode yetu bila kujali anwani sahihi. Badilisha hoja ya p32()
kwa anwani ya kuanzia ya buffer yako pamoja na kufanya marekebisho ili kutua kwenye slaidi ya NOP.
Kinga
ASLR inapaswa kuzimwa ili anwani iweze kutegemewa kila wakati wa utekelezaji au anwani ambapo kazi itahifadhiwa haitakuwa daima sawa na utahitaji kuvuja fulani ili kugundua wapi kazi ya ushindi imehifadhiwa.
Canaries ya Stack pia inapaswa kuzimwa au anwani iliyoharibiwa ya kurudi kwa EIP haitafuatwa kamwe.
NX kinga ya stack ingezuia utekelezaji wa shellcode ndani ya stack kwa sababu eneo hilo halitakuwa la kutekelezeka.
Mifano na Marejeo Mengine
64bit, ASLR na kuvuja kwa anwani ya stack, andika shellcode na ruka kwenda kwake
32 bit, ASLR na kuvuja kwa stack, andika shellcode na ruka kwenda kwake
32 bit, ASLR na kuvuja kwa stack, kulinganisha kuzuia wito wa exit(), badilisha variable na thamani na andika shellcode na ruka kwenda kwake
arm64, hakuna ASLR, ROP gadget kufanya stack iwezekane na ruka kwenda kwa shellcode kwenye stack
Last updated