hacktricks/pentesting-web/integer-overflow.md
2024-02-11 01:46:25 +00:00

88 lines
5.1 KiB
Markdown

# Przepełnienie liczby całkowitej
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium [hacktricks](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
{% tabs %}
{% tab title="Rust" %}
```rust
fn main() {
let mut quantity = 2147483647;
let (mul_result, _) = i32::overflowing_mul(32767, quantity);
let (add_result, _) = i32::overflowing_add(1, quantity);
println!("{}", mul_result);
println!("{}", add_result);
}
```
{% tab title="C" %}
## Przepełnienie liczby całkowitej
Przepełnienie liczby całkowitej występuje, gdy wartość liczby przekracza maksymalną wartość, jaką może przechować dany typ liczby całkowitej. W przypadku przepełnienia, wartość liczby jest "zawijana" do minimalnej wartości dla danego typu liczby całkowitej.
Przepełnienie liczby całkowitej może prowadzić do poważnych problemów w aplikacjach internetowych. Przykładowo, jeśli aplikacja używa zmiennej całkowitej do przechowywania liczby produktów w koszyku, a użytkownik próbuje dodać więcej produktów niż jest możliwe do przechowania w zmiennej, może dojść do przepełnienia liczby całkowitej. W rezultacie, aplikacja może działać nieprawidłowo lub nawet ulec awarii.
Aby wykorzystać przepełnienie liczby całkowitej w celach hakerskich, atakujący może próbować wprowadzić wartość, która przekroczy maksymalną wartość dla danego typu liczby całkowitej. Może to prowadzić do nieprawidłowego działania aplikacji lub nawet do wykonania nieautoryzowanych operacji.
Przepełnienie liczby całkowitej jest często wykorzystywane w atakach na aplikacje internetowe, takie jak ataki na bufor, ataki na formatowanie łańcucha znaków i ataki na przekazanie parametrów. Aby zabezpieczyć aplikację przed tym rodzajem ataków, ważne jest, aby odpowiednio sprawdzać i walidować dane wejściowe oraz używać odpowiednich typów danych do przechowywania liczb całkowitych.
## Przykład
Poniżej przedstawiono przykład kodu w języku C, który demonstruje problem przepełnienia liczby całkowitej:
```c
#include <stdio.h>
int main() {
int a = 2147483647; // maksymalna wartość dla typu int
a = a + 1; // przepełnienie liczby całkowitej
printf("%d\n", a);
return 0;
}
```
W powyższym przykładzie, zmienna `a` jest inicjalizowana maksymalną wartością dla typu `int`. Następnie, wartość zmiennej `a` jest zwiększana o 1, co powoduje przepełnienie liczby całkowitej. W rezultacie, wartość zmiennej `a` zostaje "zawinięta" do minimalnej wartości dla typu `int`, czyli -2147483648.
```c
#include <stdio.h>
#include <limits.h>
int main() {
int a = INT_MAX;
int b = 0;
int c = 0;
b = a * 100;
c = a + 1;
printf("%d\n", INT_MAX);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
```
{% endtab %}
{% endtabs %}
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? A może chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do repozytorium [hacktricks](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>