ctfshow pwn001
ctfshow pwn001
做题前 chmod +x pwn (赋予权限:Linux 下程序默认不可执行,需在终端输入)
输入 ./pwn 运行
1.观察题目

题目给了一个附件并提示提供了一个后门函数,连上就可以拿到flag
那么我们的思路就是要去在附件中找到这个函数并连接
2.解题

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

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看伪代码找逻辑

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

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

给了两个提示,然后我们直接在虚拟机上输入cat /ctfshow_flag
cat /ctfshow_flag 读取并打印文件内容
意思是:程序运行时,会调用系统命令,直接打印出 flag 文件的内容

本地服务器报错说明本地虚拟机根目录下没有这个文件,程序执行命令时会报错 No such file or directory,无法输出内容
远程服务器:出题人已经提前在根目录(/)放好了真实的 /ctfshow_flag 文件,程序运行时直接读取,就能输出真实 flag

创建空文件
sudo 以管理员权限执行(因为根目录/需要管理员权限写入)(要输入密码)
touch Linux 命令,用于创建一个空文件
/ctfshow_flag 文件路径,必须和程序里cat命令的路径完全一致(包括斜杠/)

写入假flag内容
sudo sh -c "echo 'ctfshow{local_pwn_flag_success}' > /ctfshow_flag"
sh -c "..." 启动 shell 并执行引号里的命令,避免权限不足导致写入失败
echo 'xxx' 输出引号里的文本内容(这里是假的 flag)
> /ctfshow_flag 重定向符号,把echo输出的内容写入到 /ctfshow_flag 文件中

使用 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 程序;再把程序的输出,直接发给客户端
作用:把一个端口的流量转发到另一个地址,方便绕过防火墙或访问内网服务。

nc 127.0.0.1 12345
因为socat连接所以nc就直接传给./pwn
类似于:nc 127.0.0.1 12345→socat→./pwn
nc连接网络服务的工具
nc+题目地址+端口
- 题目给了地址和端口 → 用
nc 地址 端口直接连 - 要让目标连回你 → 用
nc -lvp 端口开监听 - 想拿 shell 反弹 → 先开监听,再让目标执行反弹命令
flag:ctfshow{local_pwn_flag_success}
直接nc就可以获得

浙公网安备 33010602011771号