AWS2Exec - .dtors & .fini_array
.dtors
De nos jours, il est très étrange de trouver un binaire avec une section .dtors.
Les destructeurs sont des fonctions qui sont exécutées avant la fin du programme (après le retour de la fonction main
).
Les adresses de ces fonctions sont stockées à l'intérieur de la section .dtors
du binaire et donc, si vous parvenez à écrire l'adresse d'un shellcode dans __DTOR_END__
, cela sera exécuté avant la fin des programmes.
Obtenez l'adresse de cette section avec :
Généralement, vous trouverez les marqueurs DTOR entre les valeurs ffffffff
et 00000000
. Donc, si vous voyez juste ces valeurs, cela signifie qu'aucune fonction n'est enregistrée. Écrasez donc le 00000000
avec l'adresse du shellcode pour l'exécuter.
Bien sûr, vous devez d'abord trouver un endroit pour stocker le shellcode afin de pouvoir l'appeler ultérieurement.
.fini_array
Essentiellement, c'est une structure avec des fonctions qui seront appelées avant la fin du programme, comme .dtors
. C'est intéressant si vous pouvez appeler votre shellcode en sautant à une adresse, ou dans des cas où vous devez retourner à main
pour exploiter la vulnérabilité une deuxième fois.
Notez que cela ne créera pas une boucle éternelle car lorsque vous revenez à la fonction principale, le canari le remarquera, la fin de la pile pourrait être corrompue et la fonction ne sera pas rappelée. Ainsi, avec cela, vous pourrez avoir 1 exécution supplémentaire de la vulnérabilité.
Notez qu'avec Full Relro, la section .fini_array
est rendue en lecture seule.
Last updated