PIE

Support HackTricks

Taarifa Msingi

Binary iliyokompiliwa kama PIE, au Position Independent Executable, inamaanisha programu inaweza kupakiwa kwenye maeneo tofauti ya kumbukumbu kila wakati inapoendeshwa, ikizuia anwani zilizowekwa kwa nguvu.

Ujanja wa kudukua binaries hizi uko katika kudukua anwani za kihesabu—mbadala kati ya sehemu za programu hubaki sawa hata kama maeneo ya kihakika yanabadilika. Kwa kupitisha PIE, unahitaji tu kuvuja anwani moja, kawaida kutoka kwa stack kwa kutumia udhaifu kama mashambulizi ya aina ya string. Mara unapopata anwani, unaweza kuhesabu zingine kwa mbadala wao uliowekwa.

Msaada muhimu katika kudukua binaries za PIE ni kwamba anwani yao ya msingi kawaida huishia kwa 000 kwa sababu kurasa za kumbukumbu ni vitengo vya ubadilishaji wa randomization, vikiwa na ukubwa wa baiti 0x1000. Ulinganifu huu unaweza kuwa uhakiki muhimu ikiwa duduzo haifanyi kazi kama ilivyotarajiwa, ikionyesha ikiwa anwani sahihi ya msingi imegunduliwa. Au unaweza kutumia hii kwa duduzo yako, ikiwa unavuja anwani iko kwenye 0x649e1024 unajua kwamba anwani ya msingi ni 0x649e1000 na kutoka hapo unaweza tu kuzihesabu mbadala za kazi na maeneo.

Kupitisha

Ili kupitisha PIE ni lazima kuvuja anwani fulani ya binary iliyopakiwa, kuna chaguo kadhaa kwa hili:

  • ASLR imelemazwa: Ikiwa ASLR imelemazwa binary iliyokompiliwa na PIE daima itapakiwa kwenye anwani ileile, kwa hivyo PIE itakuwa bure kwani anwani za vitu daima zitakuwa mahali palepale.

  • Kupewa uvujaji (kawaida katika changamoto rahisi za CTF, angalia mfano huu)

  • Brute-force EBP na thamani za EIP kwenye stack hadi uvujaji wa sahihi:

BF Addresses in the Stack
  • Tumia udhaifu wa kusoma kwa hiari kama aina ya string kuvuja anwani ya binary (k.m. kutoka kwa stack, kama katika mbinu iliyopita) kupata msingi wa binary na kutumia mbadala kutoka hapo. Pata mfano hapa.

Marejeo

Support HackTricks

Last updated