mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
5.6 KiB
5.6 KiB
Variables Zisizojulikana
Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Taarifa Msingi
Wazo kuu hapa ni kuelewa kinachotokea na variables zisizojulikana kwani zitakuwa na thamani iliyokuwepo tayari kwenye kumbukumbu iliyowekwa kwao. Mfano:
- Fungtion 1:
initializeVariable
: Tunatangaza variablex
na kumpa thamani, sema0x1234
. Hatua hii inafanana na kuhifadhi nafasi kwenye kumbukumbu na kuweka thamani maalum ndani yake. - Fungtion 2:
useUninitializedVariable
: Hapa, tunatangaza variable nyinginey
lakini hatumpi thamani yoyote. Katika C, variables zisizojulikana hazipati moja kwa moja thamani ya sifuri. Badala yake, zinabaki na thamani yoyote iliyokuwa imesalia kwenye eneo la kumbukumbu.
Tunapotekeleza hizi fungtions kwa mpangilio:
- Katika
initializeVariable
,x
anapewa thamani (0x1234
), ambayo inachukua anwani maalum ya kumbukumbu. - Katika
useUninitializedVariable
,y
inatangazwa lakini haipewi thamani, hivyo inachukua nafasi ya kumbukumbu mara baada yax
. Kutokana na kutokuiwekay
, inamalizia "kurithi" thamani kutoka kwenye eneo la kumbukumbu linalotumiwa nax
, kwa sababu hiyo ndiyo thamani ya mwisho iliyokuwepo hapo.
Tabia hii inaonyesha dhana muhimu katika programu za kiwango cha chini: Usimamizi wa kumbukumbu ni muhimu, na variables zisizojulikana zinaweza kusababisha tabia isiyoaminika au mapungufu ya usalama, kwani wanaweza kushikilia data nyeti isiyokusudiwa iliyobaki kwenye kumbukumbu.
Variables zisizojulikana kwenye steki zinaweza kuleta hatari kadhaa za usalama kama:
- Kuvuja kwa Data: Taarifa nyeti kama nywila, funguo za kuchakata, au maelezo ya kibinafsi yanaweza kufichuliwa ikiwa yamehifadhiwa kwenye variables zisizojulikana, kuruhusu wadukuzi kusoma data hii.
- Kufichua Taarifa: Yaliyomo ya variables zisizojulikana yanaweza kufunua maelezo kuhusu muundo wa kumbukumbu ya programu au shughuli za ndani, kusaidia wadukuzi katika kuendeleza mashambulizi yaliyolengwa.
- Kuanguka na Kutokuwa na Utulivu: Operesheni zinazohusisha variables zisizojulikana zinaweza kusababisha tabia isiyoeleweka, ikisababisha programu kuanguka au matokeo yasiyotabirika.
- Utekelezaji wa Kanuni za Kiholela: Katika hali fulani, wadukuzi wanaweza kutumia mapungufu haya kubadilisha mtiririko wa utekelezaji wa programu, kuwaruhusu kutekeleza kanuni za kiholela, ambazo zinaweza kujumuisha vitisho vya utekelezaji wa kanuni za mbali.
Mfano
#include <stdio.h>
// Function to initialize and print a variable
void initializeAndPrint() {
int initializedVar = 100; // Initialize the variable
printf("Initialized Variable:\n");
printf("Address: %p, Value: %d\n\n", (void*)&initializedVar, initializedVar);
}
// Function to demonstrate the behavior of an uninitialized variable
void demonstrateUninitializedVar() {
int uninitializedVar; // Declare but do not initialize
printf("Uninitialized Variable:\n");
printf("Address: %p, Value: %d\n\n", (void*)&uninitializedVar, uninitializedVar);
}
int main() {
printf("Demonstrating Initialized vs. Uninitialized Variables in C\n\n");
// First, call the function that initializes its variable
initializeAndPrint();
// Then, call the function that has an uninitialized variable
demonstrateUninitializedVar();
return 0;
}
Jinsi Hii Inavyofanya Kazi:
- Fungua
initializeAndPrint
: Hii fungsi inatangaza kipengele cha nambariinitializedVar
, inampa thamani100
, na kisha inachapisha anwani ya kumbukumbu na thamani ya kipengele. Hatua hii ni wazi na inaonyesha jinsi kipengele kilichoinuliwa kinavyotenda. - Fungua
demonstrateUninitializedVar
: Katika fungsi hii, tunatangaza kipengele cha nambariuninitializedVar
bila kuipatia thamani. Tunapojaribu kuchapisha thamani yake, matokeo yanaweza kuonyesha nambari ya nasibu. Nambari hii inawakilisha data yoyote iliyokuwepo hapo awali katika eneo hilo la kumbukumbu. Kulingana na mazingira na mtoaji wa programu, matokeo halisi yanaweza kutofautiana, na mara nyingine, kwa usalama, baadhi ya watoaji wa programu wanaweza kiotomatiki kuinua vipengele kuwa sifuri, ingawa hii haipaswi kutegemewa. - Fungua
kuu
: Fungsi yakuanza
inaita fungsi zote mbili hapo juu kwa mfululizo, ikionyesha tofauti kati ya kipengele kilichoinuliwa na kile ambacho hakijainuliwa.
Mfano wa ARM64
Hii haibadiliki kabisa katika ARM64 kwani vipengele vya ndani pia vinasimamiwa kwenye stakishi, unaweza kuchunguza mfano huu ambapo hili linaonyeshwa.