Uninitialized Variables
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wazo kuu hapa ni kuelewa kinachotokea na mabadiliko yasiyoanzishwa kwani yatakuwa na thamani ambayo tayari ilikuwa katika kumbukumbu iliyotengwa kwao. Mfano:
Kazi 1: initializeVariable
: Tunatangaza mabadiliko x
na kupewa thamani, tuseme 0x1234
. Kitendo hiki ni sawa na kuhifadhi mahali katika kumbukumbu na kuweka thamani maalum ndani yake.
Kazi 2: useUninitializedVariable
: Hapa, tunatangaza mabadiliko mengine y
lakini hatupeleki thamani yoyote. Katika C, mabadiliko yasiyoanzishwa hayapewi moja kwa moja thamani sifuri. Badala yake, yanabaki na thamani yoyote iliyokuwa imehifadhiwa mwisho katika eneo lao la kumbukumbu.
Tunapokimbia kazi hizi mbili mfululizo:
Katika initializeVariable
, x
inapata thamani (0x1234
), ambayo inachukua anwani maalum ya kumbukumbu.
Katika useUninitializedVariable
, y
inatangazwa lakini haipati thamani, hivyo inachukua mahali pa kumbukumbu moja baada ya x
. Kwa sababu ya kutokuweka y
, inamaliza "kurithi" thamani kutoka eneo lile lile la kumbukumbu lililotumiwa na x
, kwa sababu hiyo ndiyo thamani ya mwisho iliyokuwepo.
Tabia hii inaonyesha dhana muhimu katika programu za kiwango cha chini: Usimamizi wa kumbukumbu ni muhimu, na mabadiliko yasiyoanzishwa yanaweza kusababisha tabia isiyotabirika au udhaifu wa usalama, kwani yanaweza bila kukusudia kushikilia data nyeti iliyobaki katika kumbukumbu.
Mabadiliko yasiyoanzishwa katika stack yanaweza kuleta hatari kadhaa za usalama kama:
Kuvuja kwa Data: Taarifa nyeti kama nywila, funguo za usimbuaji, au maelezo binafsi yanaweza kufichuliwa ikiwa yatahifadhiwa katika mabadiliko yasiyoanzishwa, na kuwapa washambuliaji uwezo wa kusoma data hii.
Ufunuo wa Taarifa: Maudhui ya mabadiliko yasiyoanzishwa yanaweza kufichua maelezo kuhusu mpangilio wa kumbukumbu wa programu au operesheni za ndani, na kusaidia washambuliaji katika kuendeleza mashambulizi yaliyolengwa.
Kuanguka na Kutokuwa na Utulivu: Operesheni zinazohusisha mabadiliko yasiyoanzishwa zinaweza kusababisha tabia isiyofafanuliwa, na kusababisha kuanguka kwa programu au matokeo yasiyotabirika.
Utendaji wa Nambari Isiyo na Mpangilio: Katika hali fulani, washambuliaji wanaweza kutumia udhaifu huu kubadilisha mtiririko wa utekelezaji wa programu, na kuwapa uwezo wa kutekeleza nambari isiyo na mpangilio, ambayo inaweza kujumuisha vitisho vya utekelezaji wa nambari ya mbali.
initializeAndPrint
Kazi: Kazi hii inatangaza kiambato cha nambari initializedVar
, inakipatia thamani 100
, na kisha inachapisha anwani ya kumbukumbu na thamani ya kiambato. Hatua hii ni rahisi na inaonyesha jinsi kiambato kilichowekwa thamani kinavyofanya kazi.
demonstrateUninitializedVar
Kazi: Katika kazi hii, tunatangaza kiambato cha nambari uninitializedVar
bila kukiweka thamani. Tunapojaribu kuchapisha thamani yake, matokeo yanaweza kuonyesha nambari isiyo ya kawaida. Nambari hii inawakilisha data yoyote iliyokuwa hapo awali katika eneo hilo la kumbukumbu. Kulingana na mazingira na mkusanyiko, matokeo halisi yanaweza kutofautiana, na wakati mwingine, kwa usalama, baadhi ya wakusanyaji wanaweza kuanzisha kiambato kuwa sifuri, ingawa hii haipaswi kutegemewa.
main
Kazi: Kazi ya main
inaita kazi zote mbili hapo juu kwa mpangilio, ikionyesha tofauti kati ya kiambato kilichowekwa thamani na kisichowekwa thamani.
Hii haibadilishi hata kidogo katika ARM64 kwani viambato vya ndani pia vinashughulikiwa katika stack, unaweza kuangalia mfano huu ambapo hii inaonyeshwa.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)