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:
Function 1: initializeVariable
: Tunatangaza mabadiliko x
na kupewa thamani, tuseme 0x1234
. Kitendo hiki ni sawa na kuhifadhi nafasi katika kumbukumbu na kuweka thamani maalum ndani yake.
Function 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 hizi kazi mbili mfululizo:
Katika initializeVariable
, x
inapata thamani (0x1234
), ambayo inachukua anwani maalum ya kumbukumbu.
Katika useUninitializedVariable
, y
inatangazwa lakini haipati thamani, hivyo inachukua nafasi ya kumbukumbu mara 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 ya stack yanaweza kuleta hatari kadhaa za usalama kama:
Data Leakage: 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.
Information Disclosure: Maudhui ya mabadiliko yasiyoanzishwa yanaweza kufichua maelezo kuhusu mpangilio wa kumbukumbu wa programu au operesheni za ndani, na kusaidia washambuliaji katika kuendeleza mashambulizi yaliyolengwa.
Crashes and Instability: Operesheni zinazohusisha mabadiliko yasiyoanzishwa zinaweza kusababisha tabia isiyofafanuliwa, na kusababisha programu kuanguka au matokeo yasiyotabirika.
Arbitrary Code Execution: Katika hali fulani, washambuliaji wanaweza kutumia udhaifu huu kubadilisha mtiririko wa utekelezaji wa programu, na kuwapa uwezo wa kutekeleza msimbo wa kiholela, ambayo inaweza kujumuisha vitisho vya utekelezaji wa msimbo wa mbali.
initializeAndPrint
Kazi: Kazi hii inatangaza variable ya integer initializedVar
, inatoa thamani yake 100
, na kisha inachapisha anwani ya kumbukumbu na thamani ya variable. Hatua hii ni rahisi na inaonyesha jinsi variable iliyoanzishwa inavyofanya kazi.
demonstrateUninitializedVar
Kazi: Katika kazi hii, tunatangaza variable ya integer uninitializedVar
bila kuanzisha. 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 kompyuta, matokeo halisi yanaweza kutofautiana, na wakati mwingine, kwa usalama, baadhi ya kompyuta zinaweza kuanzisha variable moja kwa moja kuwa sifuri, ingawa hii haipaswi kutegemewa.
main
Kazi: Kazi ya main
inaita kazi zote mbili hapo juu kwa mpangilio, ikionyesha tofauti kati ya variable iliyoanzishwa na isiyoanzishwa.
Hii haibadilishi kabisa katika ARM64 kwani variable za ndani pia zinashughulikiwa 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)