ctfshow pwn001

ctfshow pwn001

做题前 chmod +x pwn (赋予权限:Linux 下程序默认不可执行,需在终端输入)

输入 ./pwn 运行

1.观察题目

image-20260504003231746

题目给了一个附件并提示提供了一个后门函数,连上就可以拿到flag

那么我们的思路就是要去在附件中找到这个函数并连接

2.解题

image-20260504003448740

先将我们的pwn文件放在桌面然后cd到桌面为下一步做准备

image-20260504004152414

checksec pwn

checksec 是用来检查程序的安全保护机制的工具,输出的每一行含义

checksec pwn

Arch: amd64-64-little # 程序是64位架构 Arch (体系结构)

RELRO: Full RELRO # 防止GOT表劫持 RELRO (重定位只读)

Stack: No canary found # 栈保护关闭(新手题常见) Stack (栈保护)

NX: NX enabled # 栈不可执行 NX (不可执行栈)

PIE: PIE enabled # 地址随机化开启 PIE (位置独立执行)

先用checksec看保护,再用IDA看伪代码找逻辑

image-20260504005044800

用IDA打开我们pwn文件

IDA 是 二进制程序反汇编 / 反编译工具,在 PWN / 逆向题里,它的核心作用是:把编译好的 .exe/.elf 二进制文件,还原成接近 C 语言的伪代码,帮你看懂程序的逻辑、找漏洞、找后门、分析函数流程

ctrl+E选择我们的main函数然后按F5

image-20260504005240915

直接按F5,里面的插件会把汇编代码自动转换成 C 语言伪代码

image-20260504005438974

给了两个提示,然后我们直接在虚拟机上输入cat /ctfshow_flag

cat /ctfshow_flag 读取并打印文件内容

意思是:程序运行时,会调用系统命令,直接打印出 flag 文件的内容

image-20260508232537077

本地服务器报错说明本地虚拟机根目录下没有这个文件,程序执行命令时会报错 No such file or directory,无法输出内容

远程服务器:出题人已经提前在根目录(/)放好了真实的 /ctfshow_flag 文件,程序运行时直接读取,就能输出真实 flag

image-20260508234619491

创建空文件

sudo 以管理员权限执行(因为根目录/需要管理员权限写入)(要输入密码)

touch Linux 命令,用于创建一个空文件

/ctfshow_flag 文件路径,必须和程序里cat命令的路径完全一致(包括斜杠/

image-20260508234803904

写入假flag内容

sudo sh -c "echo 'ctfshow{local_pwn_flag_success}' > /ctfshow_flag"

sh -c "..." 启动 shell 并执行引号里的命令,避免权限不足导致写入失败

echo 'xxx' 输出引号里的文本内容(这里是假的 flag)

> /ctfshow_flag 重定向符号,把echo输出的内容写入到 /ctfshow_flag 文件中

image-20260508235346371

使用 Socat 挂载程序

socat TCP-LISTEN:12345,reuseaddr,fork EXEC:./pwn

TCP-LISTEN:12345 让 socat 在本地监听 12345 端口,等待连接

reuseaddr 端口用完后可以重复使用,避免报错

fork 每来一个新连接,就复制一份 pwn 程序运行,支持多人同时连接

EXEC:./pwn 当有连接进来时,执行 ./pwn 程序,并把网络连接的输入输出和程序的标准输入输出绑定起来

效果

  • 你的 ./pwn 程序不再直接运行在终端里
  • 它被 socat 托管,监听在 12345 端口上
  • 任何连接这个端口的 nc 客户端,都会直接和 ./pwn 程序交互,就像连真实的题目服务器一样

知识补充socat:

socat 的本质是把两个数据端点连接起来,让它们能互相收发数据。

这两个端点可以是:端口、文件、进程、设备、shell 命令、网络连接等

比如你题目里的用法:把「本地端口 12345」和「本地程序 ./pwn」连接起来

1.TCP-LISTEN:12345:在本地开启 12345 端口监听,等待别人连接

2.EXEC:./pwn:当有连接进来时,运行 ./pwn` 程序

3.把 nc 客户端发来的数据,直接传给 ./pwn 程序;再把程序的输出,直接发给客户端

作用:把一个端口的流量转发到另一个地址,方便绕过防火墙或访问内网服务。

image-20260508235852389

nc 127.0.0.1 12345

因为socat连接所以nc就直接传给./pwn

类似于:nc 127.0.0.1 12345socat./pwn

nc连接网络服务的工具

nc+题目地址+端口

  • 题目给了地址和端口 → 用 nc 地址 端口 直接连
  • 要让目标连回你 → 用 nc -lvp 端口 开监听
  • 想拿 shell 反弹 → 先开监听,再让目标执行反弹命令

flag:ctfshow{local_pwn_flag_success}

直接nc就可以获得

posted @ 2026-08-05 03:29  地方管委主任  阅读(4)  评论(0)    收藏  举报