Ret2ret & Reo2pop
Ret2ret
Lengo kuu la mbinu hii ni kujaribu kupita ASLR kwa kutumia pointer iliyopo kwenye stack.
Kimsingi, mafuriko ya stack mara nyingi husababishwa na strings, na strings hukamilika na byte ya null mwishoni kwenye kumbukumbu. Hii inaruhusu kujaribu kupunguza mahali kinachoelekezwa na pointer iliyopo tayari kwenye stack. Kwa hivyo, ikiwa stack ilikuwa na 0xbfffffdd
, mafuriko haya yanaweza kuita kuwa 0xbfffff00
(zingatia byte ya mwisho iliyozuiliwa).
Ikiwa anwani hiyo inaelekeza kwa shellcode yetu kwenye stack, ni rahisi kufanya mtiririko ufikie anwani hiyo kwa kuongeza anwani kwenye maagizo ya ret
hadi hii ifikiwe.
Kwa hivyo, shambulio litakuwa kama ifuatavyo:
NOP sled
Shellcode
Kufunika stack kutoka kwa EIP na anwani za
ret
(RET sled)0x00 iliyoongezwa na string kubadilisha anwani kutoka kwenye stack ikielekeza kwenye NOP sled
Kufuatia kiungo hiki unaweza kuona mfano wa binary inayoweza kudukuliwa na katika hii shambulio.
Ret2pop
Kwa kesi unapoweza kupata pointer kamili kwenye stack ambayo haitaki kubadilishwa (katika ret2ret
tulibadilisha byte ya mwisho kuwa 0x00
), unaweza kutekeleza shambulio sawa la ret2ret
, lakini urefu wa RET sled lazima uwe mfupi kwa 1 (hivyo 0x00
ya mwisho inafunika data moja kabla ya pointer kamili), na anwani ya mwisho ya RET sled lazima ielekeze kwa pop <reg>; ret
.
Kwa njia hii, data kabla ya pointer kamili itaondolewa kutoka kwenye stack (hii ni data inayoguswa na 0x00
) na ret ya mwisho itaelekeza kwenye anwani kamili kwenye stack bila mabadiliko yoyote.
Kufuatia kiungo hiki unaweza kuona mfano wa binary inayoweza kudukuliwa na katika hii shambulio.
Marejeo
Last updated