CTF / LEARNING NOTES

10.20 Web&Misc

Web 与 Misc 的解题实践
▰   CTF 题解约 2,783 字 · 9 分钟
本文目录

CTF Web和Misc WP

Misc

1.神秘的文件

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

1
bkcrack -C flag.zip -c logo.zip -P logo.zip -p logo.png

alt text
再输入

1
bkcrack.exe -C flag.zip -k 密钥 -D moo.zip

alt text
此步生成一个和flag.zip文件一样的但是未加密的moo.zip文件
打开
alt text
此处可用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”
alt text
在验证格填写结果
最终拿到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

alt text
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

alt text
此题目为post传参,curl 里 POST 传参就用 -d(全称 –data)
alt text

参数 作用
-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.双写绕过
alt text
alt text
拓展 MD5强比较
alt text
构造的过程就是绕过的过程
解题过程:
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 服务器上
泄露的是后端源码
alt text
这里就是MD5弱比较,这里可自己进行构造,但要注意此时会有双写绕过
双写绕过原理
服务端用 str_replace(‘key’, ‘’, $str) 过滤输入,想把所有 key 删掉再 parse_str。但 str_replace 是从左到右扫一遍替换,不会递归扫描替换后的结果。(就是删除key之后不会再扫描删除key)
那就可以构造kkeyey这种字符串经过删除之后恰好是key
结合上面提到URL以及?可以推测出,可以直接进行修改绕过
alt text
得到flag