本文仅用于技术研究,禁止用于非法用途。
Author:枷锁
pwn 001
题目描述
提供一个后门函数,连上即可得到flag
将题目拖入PWN机,开启模拟远程换环境
将 pwn 程序挂载在 12345 端口
socat TCP-LISTEN:12345,reuseaddr,fork EXEC:./pwn
解题过程:
先连接测试一下,看看程序
nc 127.0.0.1 12345

可以看到这里直接就把flag给显示出来了,但我们要学习pwn,就还按照标准话流程走
先对附件进行checksec分析
- NX/栈不可执行:能否在数据区执行代码
- PIE/地址随机化:内存地址是否随机变化
- Canary/栈保护:是否有防缓冲区溢出的检测
- RELRO:内存写入权限限制程度

1. Arch: amd64-64-little (架构信息)
- 含义:这是一个 64 位 的 Linux 程序,运行在 Intel/AMD 架构上,采用小端序存储。
- 解题影响:在编写脚本时,你需要使用 p64() 来打包地址,而不是 p32()。同时,64 位程序的函数调用参数优先通过寄存器(如 RDI, RSI, RDX)传递,而不是像 32 位那样全靠栈。
2. RELRO: Full RELRO (重定位只读)
- 含义:Full RELRO 代表程序的 GOT (Global Offset Table) 表是完全只读的。
- 解题影响:你无法修改 GOT 表来劫持函数。这意味着传统的“GOT 表覆写”攻击手段失效了。如果程序有漏洞,你可能需要寻找其他内存地址(如 Hook 函数或返回地址)进行劫持。
3. Stack: No canary found (栈保护)
- 含义:这是好消息! 程序没有开启“金丝雀”防护。
- 解题影响:如果你发现了一个栈溢出漏洞(比如 gets 函数),你可以直接覆盖返回地址,而不需要先设法泄露或绕过这个随机的校验值。
4. NX: NX enabled (堆栈不可执行)
- 含义:NX (No Execute) 代表数据段(如堆、栈)没有执行权限。
- 解题影响:你不能直接把一段 shellcode 写入栈中并跳过去执行。你必须使用 ROP (Return-Oriented Programming) 技术,利用程序已有的代码片段(Gadgets)来拼凑出你的攻击逻辑。
5. PIE: PIE enabled (地址随机化)
- 含义:PIE (Position Independent Executable) 代表程序本身的二进制代码在内存中的加载基地址也是随机的。
- 解题影响:你不能在脚本里写死 0x4005b0 这种固定地址。你必须先想办法泄露一个程序的实际运行地址,计算出偏移量,才能推算出其他函数在内存中的真实位置。

将IDA加载后进行分析
定位到main函数,按下F5键反编译为C代码

从代码可见程序直接调用了后门函数,会直接输出flag的值。
通过分析可以明确,程序中调用的system函数会直接在shell中执行传入的命令。因此,如果远程环境的根目录中存在该文件,程序将直接读取其内容。
pwn 002
题目描述
给你一个shell,这次需要你自己去获得flag
将题目拖入PWN机,开启模拟远程换环境
将 pwn 程序挂载在 12345 端口
socat TCP-LISTEN:12345,reuseaddr,fork EXEC:./pwn
解题过程:
先连接测试一下,看看程序
nc 127.0.0.1 12345

输入cat /ctfshow_flag即可看到flag

按照正常流程分析一下
先checksec

拖入ida分析
将IDA加载后进行分析
定位到main函数,按下F5键反编译为C代码

程序虽然简单,但这次system函数中的字符串变成了"/bin/sh"。直接运行观察一下

可以看到它直接给我们提供了一个shell。实际上这是一个软链接,我们可以通过以下方式验证:
软链接是Linux/Unix系统中的一个特殊文件,其本质是一个存储了目标文件路径的快捷方式,当你访问这个链接时,系统会自动跳转到它指向的实际文件或目录;与硬链接不同,如果删除原始目标,软链接就会失效,因为它仅仅是一个指向路径的“引用指针”,而不是直接关联文件数据本身。
像windows有一些软件的快捷方式一样,软链接就是Linux/Unix命令行的“快捷方式”。你创建一个指向文件的软链接,操作它就像在操作原文件一样。但和快捷方式一样,如果原文件被删了,这个链接也就没用了。


结果显示它指向dash。
Dash是Linux系统中一个轻量、高效的命令行解释器(shell),通常作为系统/bin/sh的默认链接,用于执行系统启动脚本和自动化任务,比Bash更精简快速。
那么system(“/bin/sh”)的工作原理是什么呢?
system(“/bin/sh”)会启动一个新的系统shell进程,这相当于在程序内部打开了一个命令行窗口,攻击者通过传入的后续命令(如cat /ctfshow_flag)就能在这个新shell中执行任意系统命令,从而读取文件、控制系统,实现远程命令执行(RCE)。

通过实践我们可以总结:
像system(“cat /ctfshow_flag”)和system(“/bin/sh”)这类函数,我们称之为后门函数。在后续利用过程中,要尽可能寻找或构造这类函数。
pwn 003
题目描述
哪一个函数才能读取flag?
将题目拖入PWN机,开启模拟远程换环境
将 pwn 程序挂载在 12345 端口
socat TCP-LISTEN:12345,reuseaddr,fork EXEC:./pwn
解题过程:
让我们找一个后门函数,这里很明显是6

按照正常流程分析一下
先checksec

可以看到是64位程序保护全开
拖入ida分析
将IDA加载后进行分析
定位到main函数,按下F5键反编译为C代码

序流程设计简洁明了:首先显示"难度升级,开始"的提示信息,随后弹出菜单界面等待用户输入。根据用户选择的不同选项,程序会进入相应的功能分支。

跟进menu:

通过分析发现后门函数对应选项6,我们立即测试其执行情况:

结果显示函数正常运行,成功获取到flag
pwn 004
题目描述
或许需要先得到某个神秘字符
将题目拖入PWN机,开启模拟远程换环境
将 pwn 程序挂载在 12345 端口
socat TCP-LISTEN:12345,reuseaddr,fork EXEC:./pwn
解题过程:
先运行一些,看有无可用信息

似乎没有,那我们就按正常流程分析
先checksec pwn

可以看到是64位程序保护全开
拖入ida分析
将IDA加载后进行分析
定位到main函数,按下F5键反编译为C代码

流程说明:
流程说明:
数。
跟进execve_func():

发现了后门程序
通过调用 execve 系统调用来执行 /bin/sh shell。
因此,对于本题而言,只需输入"CTFshowPWN"即可获取shell,从而成功取得flag。

宇宙级免责声明
🚨 重要声明:本文仅供合法授权下的安全研究与教育目的!🚨
1.合法授权:本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法,可能导致法律后果(包括但不限于刑事指控、民事诉讼及巨额赔偿)。
2.道德约束:黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范,仅用于提升系统安全性,而非恶意入侵、数据窃取或服务干扰。
3.风险自担:使用本文所述工具和技术时,你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。
4.合规性:确保你的测试符合当地及国际法律法规(如《计算机欺诈与滥用法案》(CFAA)、《通用数据保护条例》(GDPR)等)。必要时,咨询法律顾问。
5.最小影响原则:测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。
6.数据保护:不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息,应立即报告相关方并删除。
7.免责范围:作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。
🔐 安全研究的正确姿势:
✅ 先授权,再测试
✅ 只针对自己拥有或有权测试的系统
✅ 发现漏洞后,及时报告并协助修复
✅ 尊重隐私,不越界
⚠️ 警告:技术无善恶,人心有黑白。请明智选择你的道路。
希望这个教程对你有所帮助!记得负责任地进行安全测试。





