本文记录了八道CTF入门题目的完整解题过程,覆盖编码分析、逆向工程、信息收集、文件上传漏洞利用和SSH远程连接五个方向。每道题附带底层知识点拆解,适合刚接触CTF的读者建立解题思路框架。这是主播在网上各个地方找的题
题目总览
| 题号 | 类别 | 核心考点 | 难度 |
|---|---|---|---|
| 1 | Misc | 压缩包搜索、grep/strings文件检索 | 入门 |
| 2 | Crypto/Misc | Base64编码识别与解码、URL编码 | 入门 |
| 3 | Reverse | IDA/Ghidra静态分析、伪代码阅读 | 入门 |
| 4 | Web + 渗透 | 内网扫描、端口发现、robots.txt信息泄露 | 中等 |
| 5 | Web | 敏感文件探测(hint.txt) | 入门 |
| 6 | Web | robots.txt + 浏览器开发者工具 | 入门 |
| 7 | Web | 文件上传漏洞 + 蚁剑WebShell连接 | 中等 |
| 8 | 渗透 | SSH端口开放、远程登录获取flag | 入门 |
题一:压缩包内文件检索

Flag: flag{F1@g}
题目描述: 使用CentOS环境解压缩文件并查找flag字段。
过程分析:
题目提供了一个压缩包,flag藏在其内部某个文件的文本内容中。在Linux环境下,这类题目的标准解法分为两步:解压和检索。
# 第一步:解压(假设文件名为 challenge.zip) unzip challenge.zip -d output/ # 如果压缩包内文件较多,使用递归搜索 grep -r "flag" output/ # 或者配合strings处理二进制文件 strings output/* | grep "flag"
知识点:解压后文件搜索的三种方式
| 方法 | 命令 | 适用场景 | 局限性 |
|---|---|---|---|
| grep递归搜索 | grep -r "flag" ./ | 纯文本文件中的flag | 对二进制文件无效 |
| strings + grep | strings ./file \| grep "flag" | 二进制文件(ELF/图片/压缩包内嵌) | 二进制数据中的flag可能被截断或丢失 |
| find + file + grep | find . -type f -exec grep -l "flag" {} \; | 需要知道哪些文件包含目标字符串 | 速度慢于直接grep -r |
本题属于第一类——解压后直接 grep -r 即可命中。需要注意的是,某些CTF题目会在flag前后加入大量干扰字符,此时可以用正则表达式精确匹配:grep -roP "flag\{[^}]+\}" ./。
延伸:如果grep无结果而压缩包包含图片或二进制文件,考虑使用
binwalk检测嵌套文件,或用strings配合grep搜索可打印字符串。
题二:Base64与URL编码的嵌套解析


Flag: flag{This is_f1ag}
题目描述: 给定文件 base.txt,内容可通过经验识别为Base64编码,解码后仍需URL解码。主播比较懒用随波逐流一把梭哈了。
过程分析:
拿到 base.txt,第一步是确认编码类型。Base64的显著特征是:字符集限定在 A-Za-z0-9+/= 范围内,末尾常以 = 或 == 作为填充符,每76个字符换行。
# 查看文件内容,确认编码类型 cat base.txt # 典型输出形如:ZmxhZ3tUaGlzIGlzX2YxYWd9
识别出Base64后执行解码:
# Linux环境 cat base.txt | base64 -d # 或者 base64 -d base.txt
解码后得到的内容可能是一串形如 flag%7BThis+is_f1ag%7D 的字符串——%7B 对应 {,%7D 对应 },+ 对应空格,这是标准的URL编码格式。如果解码结果直接就是 flag{This is_f1ag},则无需第二步;如果出现 %XX 模式,则需要URL解码:
# Python一行完成
python3 -c "from urllib.parse import unquote; print(unquote('flag%7BThis+is_f1ag%7D'))"
知识点:Base64的原理与识别
Base64将每3个原始字节(24bit)拆分为4个6bit单元,每个单元映射到64个可打印字符之一。编码后体积膨胀约33%。其设计初衷是在纯文本协议(SMTP邮件)中传输二进制数据。
CTF中Base64的变种识别提示:
| 变种 | 特征 | 解码命令 |
|---|---|---|
| 标准Base64 | A-Za-z0-9+/= | base64 -d |
| Base64 URL Safe | 用 -_ 替代 +/,无填充 | base64 -d 前需要先替换字符 |
| Base32 | 仅含 A-Z2-7= | base32 -d |
| Base16 (Hex) | 仅含 0-9A-F | xxd -r -p |
本题的关键在于识别嵌套编码——这在实际CTF中极为常见:出题人将多层编码叠加(Base64 → URL → Base64 → Hex 等),要求选手逐层剥开。
题三:逆向工程入门——读取伪代码

Flag: qsnctf{hello_world}
题目描述: 给定 simple_re.exe,打开伪代码即可获取flag。
过程分析:
这是最基础的逆向题目。32位或64位的Windows PE文件,没有加壳,没有混淆,flag直接以明文或简单运算的形式存在于程序中。
使用IDA Pro(或免费的Ghidra)打开 simple_re.exe:
-
加载文件后,IDA自动定位到
main函数或WinMain -
按
F5(IDA)生成伪代码 -
在伪代码中搜索字符串
flag或直接观察printf/MessageBox等输出函数附近的字符串引用
典型的伪代码结构:
int main() {
char flag[] = "qsnctf{hello_world}";
printf("Congratulations! The flag is: %s\n", flag);
return 0;
}
如果flag经过简单变换(如每个字符加1),伪代码中会出现对应的循环或数学运算,逆向求解即可。
知识点:静态分析工具对比
| 工具 | 许可 | 平台 | 优势 | 劣势 |
|---|---|---|---|---|
| IDA Pro | 商业(有Free版) | Win/Linux/Mac | 反编译质量最高,插件生态丰富 | Free版不支持x64 |
| Ghidra | 开源(NSA) | 跨平台 | 完整支持x86/x64/ARM,自带反编译器 | Java运行,内存消耗大 |
| Radare2/rizin | 开源 | 跨平台 | 纯命令行,可脚本化 | 学习曲线陡峭 |
| Binary Ninja | 商业 | 跨平台 | 界面现代,API优秀 | 价格较高 |
对于入门选手,Ghidra是零成本的最佳选择。安装后新建项目 → 导入PE文件 → 双击打开 → 在Symbol Tree中找到 entry 或 main → 右键 Decompile。
延伸:如果伪代码中flag显示为乱码,考虑控制流平坦化混淆(OLLVM)或字符串加密——但入门题一般不会涉及这些。
题四:虚拟机渗透——信息收集与敏感文件读取

Flag: flag{8734509128730458630012095}
题目描述: 给定 CTF01.ova 虚拟机文件,需扫描网段获取IP,进行信息收集,发现开放端口和服务,登录Web后通过 robots.txt 找到flag。
过程分析:
这是一道模拟真实渗透的综合性题目,需要四步操作。
第一步:导入虚拟机并获取IP
将 CTF01.ova 导入VMware(文件 → 打开)。注意将虚拟机网络设置为NAT模式,使其与攻击机(Kali Linux或安装了Nmap的Linux环境)在同一网段。
启动两台虚拟机后,在攻击机上扫描NAT网段:
# 假设NAT网段为192.168.80.0/24 nmap -sn 192.168.80.0/24
-sn 参数执行Ping扫描(不扫描端口),快速列出网段内存活主机。目标虚拟机通常位于DHCP分配的IP范围内(如192.168.80.128-254)。
第二步:端口扫描与服务识别
获取目标IP后,扫描开放端口:
nmap -sV -p- 192.168.80.x # -sV:探测服务版本 # -p-:扫描全部65535个端口(非默认的1000个)
题目描述提到"打开两个端口以及各自的服务",典型的Web渗透题会开放22(SSH)和80(HTTP)或8080/8000。
第三步:Web访问与信息收集

浏览器访问 http://192.168.80.x:80(或扫描到的HTTP端口),查看页面内容。登录Web应用(题目可能提供默认凭证或弱口令)。
第四步:robots.txt信息泄露

访问 http://192.168.80.x/robots.txt。robots.txt是网站告知搜索引擎爬虫"哪些路径不应索引"的协议文件,但它对所有人公开,常被出题人用来"此地无银三百两"——把flag文件路径写在Disallow中。
典型的robots.txt内容:
User-agent: * Disallow: /flag/
访问Disallow标注的路径,找到flag文件。

知识点:Nmap扫描参数速查
| 参数 | 含义 | 何时使用 |
|---|---|---|
-sn | Ping扫描,不扫端口 | 快速发现存活主机 |
-sV | 服务版本探测 | 识别端口后的具体软件和版本号 |
-p- | 全端口扫描(1-65535) | 发现非标准端口上的服务 |
-sC | 默认脚本扫描 | 配合-sV做初步漏洞发现 |
-A | 全面扫描(OS检测+版本+脚本+traceroute) | 信息收集阶段最终确认 |
-T4 | 激进速度模板 | CTF中推荐,加速扫描 |
关于robots.txt的安全意义:robots.txt本身不是安全机制。攻击者不遵循它,防御方不应将敏感路径列在其中。但在CTF中,robots.txt是出题人给出的"隐藏线索"——这种设计反向提醒选手:生产环境绝对不能在robots.txt中写入管理后台或备份文件路径。
题五:敏感文件探测(hint.txt)
Flag: flag{7645110034526579012345670}

题目描述: 扫描网站后进行抓包,凭借经验怀疑 hint.txt 可能存在flag。
过程分析:
在信息收集阶段完成了端口扫描和Web页面浏览后,选手需要结合经验判断目标可能存在哪些敏感文件。常见的敏感文件包括:
-
robots.txt— 爬虫协议 -
.git/HEAD— Git泄露 -
.DS_Store— macOS目录信息泄露 -
backup.zip/www.tar.gz— 源码备份 -
hint.txt/flag.txt/readme.txt— 题目提示文件
使用目录扫描工具进行爆破:
# dirsearch python3 dirsearch.py -u http://192.168.80.x -e txt,zip,bak,php # gobuster(速度更快) gobuster dir -u http://192.168.80.x -w /usr/share/wordlists/dirb/common.txt # ffuf(Go语言,高并发) ffuf -u http://192.168.80.x/FUZZ -w /usr/share/wordlists/dirb/common.txt
三种工具的功能对比:
| 工具 | 语言 | 速度 | 特点 | 适合场景 |
|---|---|---|---|---|
| dirsearch | Python | 中等 | 报告可读性好,支持递归 | 需要详细输出和报告时 |
| gobuster | Go | 快 | 支持DNS/VHOST模式 | 端口扫描后直接跑目录 |
| ffuf | Go | 最快 | 高度可定制,支持正则匹配过滤 | 大规模并发扫描 |
发现 hint.txt 后,直接访问读取内容。如果文件内容包含下一阶段线索(如另一个路径、账号密码),则继续深入。

知识点:字典的重要性
目录扫描的效果取决于字典质量。入门阶段推荐:
-
SecLists/Discovery/Web-Content/common.txt— 通用字典,覆盖面广 -
SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt— DirBuster中号字典 -
自定义字典:根据题目特征添加(如本题已知"hint",可在字典中追加
hint.txt、hint.zip、hint/等变体)
题六:robots.txt + 开发者工具联合利用
Flag: flag{7412574125871236547895214}

题目描述: 打开 robots.txt 发现存在可疑文件夹,查看开发者模式可得flag。
过程分析:
与题四的思路类似但多了一层——flag不直接存放在robots.txt指向的文件中,而是隐藏在页面源码或网络请求里。
第一步:robots.txt 发现路径
curl http://192.168.80.x/robots.txt
假设输出为:
User-agent: * Disallow: /admin_area/
第二步:访问隐藏路径


浏览器访问 http://192.168.80.x/admin_area/。页面可能显示"404"或"无权限",但这是障眼法——flag可能在以下位置:
-
页面源码:右键 → 查看页面源代码(
Ctrl+U) -
HTML注释:
<!-- flag{...} --> -
开发者工具 → Network标签:刷新页面,查看所有网络请求的响应体
-
开发者工具 → Application标签:Cookie、Local Storage、Session Storage
-
响应头:
curl -I http://192.168.80.x/admin_area/查看自定义响应头
第三步:开发者工具深度排查
打开浏览器开发者工具(F12),重点检查:
-
Elements标签:搜索
flag、<!--、注释内容 -
Network标签:勾选"Preserve log",刷新页面,逐条检查每个请求的 Response
-
Console标签:是否有
console.log输出flag -
Sources标签:JS文件中是否硬编码了flag或跳转逻辑
知识点:Web前端中flag的常见藏匿位置
| 位置 | 检查方法 | 典型特征 |
|---|---|---|
| HTML注释 | 查看源代码 / Elements | <!-- flag{...} --> |
| JS变量 | Sources / Console | var flag = "..." |
| CSS伪元素content | Elements → Styles | ::after { content: "flag..."; } |
| 响应头 | Network → Response Headers | X-Flag: ... 或 Set-Cookie: flag=... |
| 图片EXIF | 下载图片 → exiftool | Comment字段 |
| 302跳转 | Network → 勾选Preserve log | Location头指向flag页面 |
题七:文件上传漏洞 + 蚁剑WebShell连接


Flag: flag{7845658974123568974185412}
题目描述: 使用账号密码登录后发现文件上传功能,通过蚁剑挂马获取flag。
过程分析:
这是一道经典的Webshell上传利用题,攻击链为:登录 → 绕过上传限制 → 上传WebShell → 蚁剑连接 → 读取服务器文件获取flag。
第一步:登录
题目提供了账号密码。登录后进入一个具备文件上传功能的页面(常见如头像上传、附件上传)。
第二步:判断上传限制
上传功能可能有以下限制:
-
前端校验(JS限制文件扩展名):修改Burp Suite拦截的请求,或直接禁用JS后上传
-
MIME类型校验(
Content-Type: image/jpeg):Burp中修改Content-Type为允许的类型 -
后缀名黑名单:尝试
.php5、.phtml、.pht、.php.、.php .jpg(空格截断) -
文件内容检测:在图片马中加入
GIF89a文件头绕过getimagesize()
第三步:构造WebShell

最小PHP一句话木马:
<?php @eval($_POST['cmd']); ?>
保存为 shell.php。如果 .php 被拦截,尝试以下绕过后缀:
| 后缀 | 是否解析为PHP | 原因 |
|---|---|---|
.php5 | 多数环境是 | Apache未限制该扩展名映射 |
.phtml | 多数环境是 | 历史遗留,PHP仍识别 |
.pht | 部分环境 | 需 AddType application/x-httpd-php .pht |
.php.jpg | 取决于配置 | Apache按最后一个扩展名判断时绕过 |
.phar | PHP 5.3+ | PHAR包格式,可包含PHP代码 |
第四步:蚁剑连接


上传成功后,记下文件路径(如 /uploads/shell.php)。打开蚁剑(AntSword),右键添加数据:
-
URL地址:
http://192.168.80.x/uploads/shell.php -
连接密码:
cmd(与一句话中的$_POST['cmd']对应) -
编码器:default(或base64)
连接成功后,在蚁剑文件管理器中浏览服务器目录,找到flag文件。
知识点:文件上传漏洞的防御本质
文件上传漏洞不是"允许上传"的问题,而是"上传后服务器如何处理文件"的问题。三层防御:
| 层级 | 措施 | 可被绕过的条件 |
|---|---|---|
| 前端 | JS校验扩展名 | 禁用JS / 拦截修改请求 |
| 服务端输入 | 白名单扩展名 + MIME校验 | 黑名单不全 / MIME可伪造 |
| 服务端执行 | 上传目录禁用脚本执行(.htaccess / nginx配置) | 配置错误或未覆盖所有脚本后缀 |
| 存储层 | 文件重命名(UUID)+ 静态文件服务器分离 | 运维失误导致脚本引擎仍可解析 |
最可靠的防御是存储与执行分离——用户上传的文件永远不应被Web服务器以脚本方式执行。
题八:SSH远程登录获取Flag

Flag: flagis:{5473215946785213456975249}
题目描述: 打开SSH端口进行SSH远程连接,登录后获取flag。
过程分析:
从之前的端口扫描结果中已发现22端口(SSH)开放。需要获取登录凭证。凭证可能来自:
-
Web页面中泄露的账号密码
-
robots.txt指向的备份文件中的配置信息
-
弱口令爆破(hydra/medusa)
-
题目直接提供
假设已获得用户名 admin 和密码 password123:
ssh admin@192.168.80.x # 输入密码后进入目标服务器 # 登录后查找flag ls -la cat flag.txt # 或者搜索 find / -name "*flag*" 2>/dev/null
知识点:SSH协议的两个版本差异
| 特性 | SSH-1 | SSH-2 |
|---|---|---|
| 安全性 | 存在中间人攻击和CRC32缺陷 | 使用DH密钥交换+MAC完整性校验 |
| 认证方式 | 密码、RSA | 密码、公钥、键盘交互、GSSAPI |
| 端口转发 | 不支持 | 支持本地/远程/动态转发 |
| 当前状态 | 已废弃 | 标准 |
CTF中SSH相关题目通常考查:(1)弱口令爆破;(2)私钥泄露(id_rsa文件权限配置不当);(3)SSH隧道端口转发绕过防火墙;(4)authorized_keys写权限导致公钥注入。本题是基础的信息收集+凭证利用,为后续更复杂的SSH攻击题做铺垫。
综合知识点:CTF入门题目中的攻击链模式
回顾这八道题,可以归纳出CTF入门题中反复出现的几种攻击模式:
模式一:编码嵌套
题目将flag经过多层编码(Base64 → URL → Hex → Base32等),考查选手对编码格式的识别能力和逐层解码的耐心。防御意义上,编码不等于加密——Base64只是数据表示形式的转换,不应被视为安全措施。
模式二:信息泄露链
端口扫描 → 服务识别 → Web页面 → robots.txt → 隐藏路径 → flag 端口扫描 → 服务识别 → Web页面 → 敏感文件(backup/hint) → flag
信息收集的深度决定解题效率。Nmap和目录扫描工具的组合是Web类CTF题的基本功。
模式三:上传→执行
登录 → 找到上传点 → 绕过限制 → 上传WebShell → 蚁剑连接 → 读取flag
文件上传题的核心不是"怎么传上去",而是"什么后缀能被服务器解析为脚本"。后缀绕过字典的质量决定了成功率。
模式四:凭证复用
Web登录凭证 → SSH登录凭证(用户密码复用) robots.txt → 备份文件 → 配置文件 → SSH私钥
真实渗透中,凭证复用是横向移动的关键。CTF题目简化了这个过程,但其底层逻辑是一致的——一处泄露可能导致全局沦陷。
总结
八道题目覆盖了CTF入门阶段的主要方向:Misc的编码与文件检索、Reverse的静态分析、Web的敏感文件探测与文件上传、渗透方向的信息收集与SSH连接。每道题的Flag获取路径虽然直接,但每一步都对应着安全领域的一个基础概念——Base64不是加密、robots.txt不是安全机制、文件上传的防御核心在于执行隔离。
对刚接触CTF的读者而言,这组题目的价值不在于难度的挑战,而在于建立"看到现象 → 推测方向 → 选择工具 → 验证结果"的解题方法论。把这八道题的每个步骤拆开看,背后是信息收集(Nmap/dirsearch)、编码分析(Base64/URL/Hex)、静态分析(IDA/Ghidra)、漏洞利用(文件上传)和横向移动(SSH)的完整技能树——这些都是后续进阶题目的基础。
解题环境:攻击机 Kali Linux 2024.x / 工具:Nmap 7.94、dirsearch 0.4.3、蚁剑 AntSword 2.1.15、Ghidra 11.0、IDA Free 8.4。

360

被折叠的 条评论
为什么被折叠?



