Uninitialized Variables
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Die kernidee hier is om te verstaan wat gebeur met ungeïnitialiseerde veranderlikes aangesien hulle die waarde sal hê wat reeds in die toegewyde geheue aan hulle was. Voorbeeld:
Funksie 1: initializeVariable
: Ons verklaar 'n veranderlike x
en ken dit 'n waarde toe, kom ons sê 0x1234
. Hierdie aksie is soortgelyk aan die reservasie van 'n plek in geheue en die plasing van 'n spesifieke waarde daarin.
Funksie 2: useUninitializedVariable
: Hier verklaar ons 'n ander veranderlike y
maar ken nie enige waarde aan dit toe nie. In C, ongeïnitialiseerde veranderlikes word nie outomaties op nul gestel nie. In plaas daarvan, behou hulle die waarde wat laas op hul geheue ligging gestoor was.
Wanneer ons hierdie twee funksies agtereenvolgens uitvoer:
In initializeVariable
, word x
'n waarde toegeken (0x1234
), wat 'n spesifieke geheue adres beset.
In useUninitializedVariable
, word y
verklaar maar nie 'n waarde toegeken nie, so dit neem die geheue plek reg na x
. As gevolg van die nie-initialisering van y
, eindig dit op om die waarde van dieselfde geheue ligging wat deur x
gebruik is, "te erf", omdat dit die laaste waarde was wat daar was.
Hierdie gedrag illustreer 'n sleutelkonsep in lae-vlak programmering: Geheue bestuur is van kardinale belang, en ongeïnitialiseerde veranderlikes kan lei tot onvoorspelbare gedrag of sekuriteitskwesbaarhede, aangesien hulle onbedoeld sensitiewe data wat in geheue gelaat is, kan hou.
Ungeïnitialiseerde stapel veranderlikes kan verskeie sekuriteitsrisiko's inhou soos:
Data Lek: Sensitiewe inligting soos wagwoorde, versleuteling sleutels, of persoonlike besonderhede kan blootgestel word as dit in ongeïnitialiseerde veranderlikes gestoor word, wat dit moontlik maak vir aanvallers om hierdie data te lees.
Inligting Onthulling: Die inhoud van ongeïnitialiseerde veranderlikes mag besonderhede oor die program se geheue uitleg of interne operasies onthul, wat aanvallers help om geteikende eksploit te ontwikkel.
Kras en Onstabiliteit: Operasies wat ongeïnitialiseerde veranderlikes betrek, kan lei tot ongedefinieerde gedrag, wat lei tot program kras of onvoorspelbare uitkomste.
Arbitraire Kode Uitvoering: In sekere scenario's kan aanvallers hierdie kwesbaarhede benut om die program se uitvoeringsvloei te verander, wat hulle in staat stel om arbitraire kode uit te voer, wat dalk afstandkode-uitvoeringsbedreigings kan insluit.
initializeAndPrint
Funksie: Hierdie funksie verklaar 'n heelgetal veranderlike initializedVar
, ken dit die waarde 100
toe, en druk dan beide die geheueadres en die waarde van die veranderlike. Hierdie stap is eenvoudig en toon hoe 'n geïnitialiseerde veranderlike optree.
demonstrateUninitializedVar
Funksie: In hierdie funksie verklaar ons 'n heelgetal veranderlike uninitializedVar
sonder om dit te initialiseer. Wanneer ons probeer om sy waarde te druk, kan die uitvoer 'n ewekansige getal toon. Hierdie getal verteenwoordig enige data wat voorheen op daardie geheue ligging was. Afhangende van die omgewing en kompilator, kan die werklike uitvoer verskil, en soms, vir veiligheid, kan sommige kompilers veranderlikes outomaties na nul initialiseer, alhoewel daar nie op staatgemaak moet word nie.
main
Funksie: Die main
funksie roep beide van die bogenoemde funksies in volgorde aan, wat die teenstelling tussen 'n geïnitialiseerde veranderlike en 'n nie-geïnitialiseerde een demonstreer.
Dit verander glad nie in ARM64 nie, aangesien plaaslike veranderlikes ook in die stap bestuur word, jy kan hierdie voorbeeld kyk waar dit getoon word.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)