WWW2Exec - .dtors & .fini_array
Reading time: 3 minutes
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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.
.dtors
caution
Vandag is dit baie vreemd om 'n binêre met 'n .dtors afdeling te vind!
Die vernietigers is funksies wat uitgevoer word voordat die program eindig (nadat die main
funksie terugkeer).
Die adresse van hierdie funksies word binne die .dtors
afdeling van die binêre gestoor en daarom, as jy daarin slaag om die adres na 'n shellcode in __DTOR_END__
te skryf, sal dit uitgevoer word voordat die programme eindig.
Kry die adres van hierdie afdeling met:
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
Gewoonlik sal jy die DTOR merkers tussen die waardes ffffffff
en 00000000
vind. So as jy net daardie waardes sien, beteken dit dat daar geen funksie geregistreer is nie. So oorwrite die 00000000
met die adres na die shellcode om dit uit te voer.
warning
Natuurlik moet jy eers 'n plek vind om die shellcode te stoor om dit later aan te roep.
.fini_array
Essensieel is dit 'n struktuur met funksies wat geroep sal word voordat die program klaar is, soos .dtors
. Dit is interessant as jy jou shellcode kan aanroep deur net na 'n adres te spring, of in gevalle waar jy weer terug na main
moet gaan om die kwesbaarheid 'n tweede keer te benut.
objdump -s -j .fini_array ./greeting
./greeting: file format elf32-i386
Contents of section .fini_array:
8049934 a0850408
#Put your address in 0x8049934
Let daarop dat wanneer 'n funksie van die .fini_array
uitgevoer word, dit na die volgende een beweeg, so dit sal nie verskeie kere uitgevoer word nie (wat ewige lusse voorkom), maar dit sal ook net 1 uitvoering van die funksie wat hier geplaas is, gee.
Let daarop dat inskrywings in .fini_array
in omgekeerde volgorde aangeroep word, so jy wil waarskynlik begin skryf vanaf die laaste een.
Ewige lus
Om .fini_array
te misbruik om 'n ewige lus te kry, kan jy kyk wat hier gedoen is: As jy ten minste 2 inskrywings in .fini_array
het, kan jy:
- Gebruik jou eerste skrywe om die kwetsbare arbitrêre skrywe funksie weer aan te roep
- Dan, bereken die terugkeeradres in die stapel wat gestoor is deur
__libc_csu_fini
(die funksie wat al die.fini_array
funksies aanroep) en plaas daar die adres van__libc_csu_fini
- Dit sal maak dat
__libc_csu_fini
homself weer aanroep en die.fini_array
funksies weer uitvoer wat die kwesbare WWW funksie 2 keer sal aanroep: een vir arbitrêre skrywe en nog een om weer die terugkeeradres van__libc_csu_fini
op die stapel te oorskryf om homself weer aan te roep.
caution
Let daarop dat met Full RELRO, die afdeling .fini_array
lees-slegs gemaak word.
In nuwer weergawes, selfs met [Partial RELRO] word die afdeling .fini_array
ook lees-slegs gemaak.
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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.