本文目录
CTF Web和Misc WP
Misc
1.神秘的文件
此题涉及:1.已知明文攻击 2.文件的格式转换(docx—>zip)
解题过程:
1.下载并打开文件,其有flag.zip和logo.png两个文件
据此可以想到有关图片隐写的方向,但是通过分离,LSB等操作之后并没有得到有效信息。如果此时打开flag.zip文件时发现
里面有加密的logo.png其CRC32与外面的logo.png一样,不由得想到做已知明文攻击这一方法。
2.进行已知明文攻击,其实可以联想到之前做过的压缩包真的很简单这个题目,他是用png头做已知明文攻击,此时与本题出现区别即zip的格式store与Deflate(压缩),前者原文件和压缩文件一样,即原样存,不压缩,文件多大就是多大,再者是压缩文件比原文件大(压缩后 ≥ 原始(相等或略大几字节)→ 没压缩(存储模式)→ 文件头能用);后者是压缩后 < 原始 → 真压缩了 → 文件头失效。那进行明文攻击的方式就不一样了(其实也可以根据题目给出的内容来判断,此题目是给了内外两个一样的png图片,一个加密,一个未加密,可以得出)
3.进行实操,用的bkcrack工具。先将外面未加密的png图片按照(flag.zip)原样的压缩方式进行压缩

此处选择标准zip即可,得到压缩包,进行明文攻击。
3.输入指令,得到密钥
1 | bkcrack -C flag.zip -c logo.zip -P logo.zip -p logo.png |

再输入
1 | bkcrack.exe -C flag.zip -k 密钥 -D moo.zip |

此步生成一个和flag.zip文件一样的但是未加密的moo.zip文件
打开
此处可用010查看一下 发现其是压缩包格式的,将其后缀改为zip,打开,在其dcoprops文件夹里找到flag。
用base64解码即可
Web
1.Linux的基操
1.认识终端
pwd — Print Working Directory,显示当前所在目录
• whoami — 显示当前登录的用户名
• echo — 输出文本内容
• > — 重定向符号,将输出写入文件(覆盖)
示例
$ pwd
/home/user
$ whoami
user
$ echo hello > file.txt
注意
• ~ 代表当前用户的家目录
• > 会覆盖文件内容,>> 是追加
2.echo 与命令替换
• echo 将文本输出到终端或文件
• $(命令) 是命令替换,会先执行括号内的命令,再将结果替换到外层命令中
示例
$ echo Hello World
Hello World
$ echo $(date)
Mon Jan 1 12:00:00 UTC 2025
3.获取帮助
Linux 中有多种方式查看命令帮助:
• man 命令 — 查看手册页(按 q 退出)
• 命令 –help — 查看简要帮助
• type 命令 — 查看命令类型
示例
$ ls –help
Usage: ls [OPTION]… [FILE]…
示例:ls –help > ~/ls_help.txt
4.ls与目录浏览
ls 命令
ls 用于列出目录内容。
常用参数
• ls — 列出当前目录
• ls -l — 长格式(权限、大小、时间)
• ls -a — 显示隐藏文件(以 . 开头)
• ls -la — 长格式 + 隐藏文件
• ls -lh — 人类可读的文件大小
cd 命令
• cd /path — 切换到指定目录
• cd .. — 返回上级目录
• cd ~ 或 cd — 回到家目录
5.创建目录和文件
创建文件与目录
mkdir — 创建目录
• mkdir dir — 创建单个目录
• mkdir -p a/b/c — 递归创建多级目录
touch — 创建空文件
• touch file.txt — 创建空文件
• 如果文件已存在,更新修改时间
&& — 连续执行
• cmd1 && cmd2 — cmd1 成功后才执行 cmd2
6.复制与移动
cp 与 mv
cp — 复制
• cp src dst — 复制文件
• cp -r dir1 dir2 — 递归复制目录
mv — 移动/重命名
• mv old new — 重命名文件
• mv file dir/ — 移动文件到目录
7.删除命令
rm 命令
• rm file — 删除文件
• rm -r dir — 递归删除目录及其内容
• rm -f file — 强制删除,不提示
• rmdir dir — 删除空目录
注意
• rm 删除后无法恢复,请谨慎使用
• 永远不要运行 rm -rf /
8.查看文件内容
• cat file — 一次性输出全部内容
• less file — 分页查看(q 退出,空格翻页)
• more file — 类似 less 的简化版
9.head 与 tail
• head -n 3 file — 显示前 3 行
• tail -n 3 file — 显示最后 3 行
• tail -f file — 实时跟踪文件末尾(日志常用)
10.nano 编辑器
nano 是一个简单易用的终端文本编辑器。
基本操作
• nano file — 打开或创建文件
• 直接输入文字即可编辑
• Ctrl+O — 保存文件
• Ctrl+X — 退出编辑器
• Ctrl+K — 剪切当前行
• Ctrl+U — 粘贴
11.vim 基础
vim 是 Linux 最强大的文本编辑器之一。
三种模式
• 普通模式 — 默认模式,用于导航和命令
• 插入模式 — 按 i 进入,用于输入文字
• 命令模式 — 按 : 进入,用于保存退出等
常用操作
• i — 进入插入模式
• Esc — 回到普通模式
• :w — 保存
• :q — 退出
• :wq — 保存并退出
• :q! — 不保存强制退出
• dd — 删除当前行
• yy — 复制当前行
• p — 粘贴
打开vim vi+
12.grep 命令
grep 用于在文件中搜索匹配的文本行。
常用参数
• grep pattern file — 搜索匹配行
• grep -i — 忽略大小写
• grep -n — 显示行号
• grep -r — 递归搜索目录
• grep -v — 反向匹配(不包含的行)
• grep -c — 只显示匹配行数
13.find 命令
find 用于在目录树中查找文件。
常用参数
• find /path -name ‘pattern’ — 按文件名查找
• find /path -type f — 只查找文件
• find /path -type d — 只查找目录
• find /path -size +1M — 查找大于 1MB 的文件
• find /path -mtime -7 — 最近 7 天修改过的文件
若要查找文件名中存在的字符要加*(表示占位符)只要有这些字符都会被找到
14.管道 |
管道将前一个命令的输出作为后一个命令的输入。
语法
命令1 | 命令2 | 命令3
常见用法
• ls | wc -l — 统计文件数量
• cat file | grep pattern — 搜索文件内容
• ps aux | grep nginx — 查找进程
• history | tail -20 — 查看最近 20 条历史命令
15.未完待续…
2.滑稽
此题没有别的信息 第一步要想到查看前端源码里面
很简单,元素里就有flag
3.计算器
此题在输入时只可以输入1位数字
在修改栏(元素)我们可以找到input maxlength那一项 4.把“1“改为“2”
在验证格填写结果
最终拿到flag
这种操作叫 “前端验证绕过”,也叫”客户端验证绕过”(Front-end / Client-side Validation Bypass)。
为什么能改
HTML、CSS、JavaScript 都是运行在你自己浏览器里的代码,你对它有完全控制权:
• 你改的只是本地页面的显示和行为,不影响服务器
• 网页怎么限制你,你就能怎么改
• 这就是 “前端验证” 的天生弱点 ——前端的限制只能防君子,防不了会 F12 的人
常见的前端限制(CTF 常考)
你看到的
含义
绕过方法
maxlength=”2”
限制输入长度
改成更大数字或删掉
disabled
按钮 / 输入框被禁用
删掉 disabled 属性
readonly
只读不能改
删掉 readonly
type=”hidden”
隐藏字段(flag 常藏这)
元素面板直接看 value
JS 里写死密码 / 判断
前端 JS 验证
看 Sources 里的 JS 找答案
核心思想
凡是只在浏览器里做的验证,都不可信。 真正安全的校验必须放在服务器后端,前端校验只是为了用户体验,不是安全措施。
这类题的套路就是:F12 看哪里被限制了 → 直接改 HTML/JS → 绕过。
4.GET

php代码翻译
$what = $_GET[‘what’]; // 从 URL 地址栏取参数 what 的值,存进变量 $what
echo $what; // 把你传进来的值,显示到网页上
if($what == ‘flag’) // 判断:如果你传的 what 等于 “flag”
echo ‘flag{****}’; // 就输出 flag
注:php的三种等号
$a = 1; // 单等号:赋值(把1放进$a)
$a == 1; // 双等号:比较值是否相等(弱比较,不看类型)
$a === 1; // 三等号:比较值和类型是否完全相等(强比较)
服务器去判断你输入的值是否匹配,如果匹配就输出flag
URL里的=指的是你把值传给服务器
5.POST

此题目为post传参,curl 里 POST 传参就用 -d(全称 –data)
| 参数 | 作用 |
|---|---|
-I |
只看响应头 |
-X |
指定请求方法(GET/POST) |
-d |
发送 POST 数据 |
-b |
带 Cookie |
-H |
加请求头 |
-v |
显示详细过程(排查问题用) |
-o |
保存到文件(下载) |
| curl 是一个命令行工具,相当于 “没有界面的浏览器”,用来在命令行里发 HTTP 请求、访问网页。 | |
| HTML 是网页的 “骨架语言”,专门用来描述网页长什么样、由什么组成。 | |
| 全称是 HyperText Markup Language(超文本标记语言)。它不是编程语言(没有逻辑运算),而是用一对对标签来标注内容。 | |
| 标签 | 作用 |
| — | — |
<html> |
整个网页 |
<head> |
网页头部信息(标题、样式) |
<body> |
网页主体(你看到的内容) |
<span> |
一段文字 |
<input> |
输入框 |
<button> |
按钮 |
<!-- --> |
注释(flag 爱藏这里) |
| 网页三件套 | |
| HTML = 骨架(房子的结构:墙、门、窗) | |
| CSS = 装修(颜色、大小、字体、排版) | |
| JS = 电路(点击、动画、和服务器交互) |
6.备份是个好习惯
涉及知识点:1.备份泄露 2.MD5弱比较 3.双写绕过

拓展 MD5强比较
构造的过程就是绕过的过程
解题过程:
1.备份泄露
index.php.bak 是 index.php 的备份文件(.bak = backup,备份)。它是 CTF 里经典的 “备份文件泄露源码” 考点。
为什么会有这个文件
网站管理员修改 index.php 时,常会手动或被编辑器自动留一份备份:
• 手动改名:index.php → index.php.bak
• 编辑器自动备份:.swp、~、.old 等
备份文件忘记删除,就留在了网站目录里。
| 你访问的文件 | 服务器的处理 | 你能看到什么 |
|---|---|---|
index.php |
认出是 PHP,执行它 | 只看到运行后的网页,看不到源码 |
index.php.bak |
不认识 .bak,不执行 |
直接把源码原文发给你 |
| 2.查看网站源码 | ||
| 注意:此时要区别前后端源码 | ||
| 类型 | 语言 | 在哪执行 |
| — | — | — |
| 前端代码 | HTML、CSS、JavaScript | 你的浏览器里 |
| 后端代码 | PHP、Python、Java、JSP、ASP | 服务器上 |
| 泄露的是后端源码 | ||
![]() |
||
| 这里就是MD5弱比较,这里可自己进行构造,但要注意此时会有双写绕过 | ||
| 双写绕过原理 | ||
| 服务端用 str_replace(‘key’, ‘’, $str) 过滤输入,想把所有 key 删掉再 parse_str。但 str_replace 是从左到右扫一遍替换,不会递归扫描替换后的结果。(就是删除key之后不会再扫描删除key) | ||
| 那就可以构造kkeyey这种字符串经过删除之后恰好是key | ||
| 结合上面提到URL以及?可以推测出,可以直接进行修改绕过 | ||
![]() |
||
| 得到flag |



