Integer Overflow
Last updated
Last updated
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Im Kern eines Ganzzahlüberlaufs steht die Einschränkung, die durch die Größe der Datentypen in der Computerprogrammierung und die Interpretation der Daten auferlegt wird.
Zum Beispiel kann eine 8-Bit-unsigned Ganzzahl Werte von 0 bis 255 darstellen. Wenn Sie versuchen, den Wert 256 in einer 8-Bit-unsigned Ganzzahl zu speichern, wird er aufgrund der Begrenzung seiner Speicherkapazität auf 0 zurückgesetzt. Ähnlich verhält es sich bei einer 16-Bit-unsigned Ganzzahl, die Werte von 0 bis 65.535 halten kann; das Hinzufügen von 1 zu 65.535 wird den Wert wieder auf 0 zurücksetzen.
Darüber hinaus kann eine 8-Bit-signierte Ganzzahl Werte von -128 bis 127 darstellen. Dies liegt daran, dass ein Bit verwendet wird, um das Vorzeichen (positiv oder negativ) darzustellen, wodurch 7 Bits zur Darstellung der Größe verbleiben. Die negativste Zahl wird als -128 (binär 10000000
) dargestellt, und die positivste Zahl ist 127 (binär 01111111
).
Für potenzielle Web-Sicherheitsanfälligkeiten ist es sehr interessant, die maximal unterstützten Werte zu kennen:
Das gedruckte Ergebnis wird 0 sein, da wir das char überlaufen haben:
Betrachten Sie eine Situation, in der eine signierte Ganzzahl aus der Benutzereingabe gelesen und dann in einem Kontext verwendet wird, der sie als unsignierte Ganzzahl behandelt, ohne ordnungsgemäße Validierung:
In diesem Beispiel wird eine negative Zahl als große unsigned Ganzzahl interpretiert, was auf die Art und Weise zurückzuführen ist, wie binäre Werte interpretiert werden, was potenziell zu unerwartetem Verhalten führen kann.
Es wird nur 1B verwendet, um die Größe des Passworts zu speichern, sodass es möglich ist, es zu überlaufen und es glauben zu lassen, dass es eine Länge von 4 hat, während es tatsächlich 260 ist, um den Schutz der Längenüberprüfung zu umgehen.
Gegeben ein paar Zahlen, finde mit z3 eine neue Zahl, die multipliziert mit der ersten die zweite ergibt:
Es wird nur 1B verwendet, um die Größe des Passworts zu speichern, sodass es möglich ist, es zu überlaufen und es glauben zu lassen, dass es eine Länge von 4 hat, während es tatsächlich 260 ist, um den Schutz der Längenüberprüfung zu umgehen und die nächste lokale Variable im Stack zu überschreiben und beide Schutzmaßnahmen zu umgehen.
Dies ändert sich nicht in ARM64, wie Sie in diesem Blogbeitrag sehen können.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)