攻防世界GFSJ1184_welcome_CAT_CTF

题目

在这里插入图片描述
附件:
两个文件client和server
在这里插入图片描述

Get Flag

Exeinfo File分析

在这里插入图片描述

file client
client: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=6045aa1ba5c8d0817e9452e6929eadff0b546f3d, not stripped

分析

  • client 是一个 ELF 格式的可执行程序,运行在 64 位 Linux 系统上,目标架构是 x86-64。

  • PIE 和 ASLR:由于它是 PIE 可执行文件,程序加载地址会随机化,这导致你在 GDB 调试时需要处理地址偏移(如 0x246d 变成 0x55555540246d)。

  • 动态链接:client 依赖外部共享库(如 libstdc++.so),因此运行时需要这些库存在系统中。

  • 调试信息:not stripped 意味着可以直接使用 GDB 访问符号(如 main、glod),无需额外的调试符号文件。

  • 与 server 的交互:client 程序通过网络连接(get_nc() 和 get_flag(nc))与 server 通信,server 监听在端口 8888。

运行文件体验下

# unbuntu
chmod +x ./client
./client
# 输入页面给的服务器及端口:61.147.171.105 50358

在这里插入图片描述
程序就是wasd移动,走到不同标记(* $ @ )下方,输入j回车,会有不同反应。

IDA反编译为C文件

在Hello_CTF中:
idax64打开client,然后file-Produce File-Create C File 生成反编译的C文件(伪代码);

分析client.c

全局检索flag,可以看到判断是否可以获取flag的条件:
条件是:输入j,此时在@下方并且glod>1000000

case 'j':
	...
	if ( (_UNKNOWN *)s[100 * v0 - 100 + v1] == &unk_963B && glod > 100000000 )
        {
          puts("GET_FLAG!");
          nc = get_nc();
          get_flag(nc);
          getchar();
        }

gdb改glod,获取flag

Ubuntu中:

gdb ./client
(gdb) start #运行,并在入口处暂停
Temporary breakpoint 1, 0x0000555555409349 in main ()

# 由于程序启用了PIE(Position Independent Executable,位置无关可执行文件)所以要用偏移地址
# 上方显示main入口是0x0000555555409349
# 查看glob地址
(gdb) print &glod
$1 = (<data variable, no debug info> *) 0x55555560a388 <glod>

# 这里要注意,**not stripped**:保留调试符号,如果是stripped, 需要使用偏移量计算glod地址

# 设置glod值大于100000000
(gdb) info variables glod
All variables matching regular expression "glod":

Non-debugging symbols:
0x000055555560a388  glod
(gdb) set {int}0x55555560a388 = 100000001
(gdb) x/d 0x000055555560a388
0x55555560a388 <glod>:  100000001

(gdb) continue
# 输入页面给的服务器及端口:61.147.171.105 50358

移动到@下方输入j回车, 得到Flag,注意要把窗口向上移动一下,被翻页挡住了…
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

铭记北宸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值