CTF 入门必备基础:Git、JSON、HTTP 请求头、BP 抓包全知识点整理
一、前言
最近刚入门 CTF Web 方向,整理了一套高频基础考点,包含git reflog源码泄露、JSON 传参漏洞、GET/POST 表单提交、HTTP 请求头伪造、HTTP 状态码、Burp Suite 激活与抓包使用,覆盖新生赛 90% 基础题型,适合新手收藏学习。
二、Git 源码泄露考点:git reflog 详解
1. 什么是 git reflog
reflog全称 reference log,是本地仓库独有的引用移动日志,保存在.git/logs目录,不会同步到远程仓库。 记录所有 HEAD、分支的移动操作:commit、reset、checkout、merge等,哪怕提交被回退、删除、分支丢弃,只要日志未过期(默认 90 天垃圾回收),都能找回丢失提交。
2. 核心作用:找回被删除 / 回退的 flag 提交
CTF 常见场景:开发者提交带 flag 文件后,执行git reset --hard回退,分支历史看不到 flag,但 reflog 保留操作记录。 完整复现流程:
- 查看本地操作日志
bash
运行
git reflog输出示例:
plaintext
a1b2c3d HEAD@{0}: reset: moving to HEAD-1 d4e5f6g HEAD@{1}: commit: fixbug b7c8d9e HEAD@{2}: commit: add secret # 含flag的提交 c3b2a1d HEAD@{3}: commit: add file e1f2a3b HEAD@{4}: commit (initial): init- 切换到丢失 flag 的历史快照
bash
运行
# 方式1 git checkout b7c8d9e # 方式2(推荐,分离头指针) git switch --detach b7c8d9e- 读取 flag 文件
bash
运行
cat flag.txt- 可选:新建分支永久保存该提交,防止日志过期丢失
bash
运行
git switch -c recover_flag3. 关键注意点
reflog仅本地存在,git clone 远程仓库无法直接获取他人操作日志;git reset --hard HEAD~1只会回退分支,旧提交不会立刻删除,由 reflog 保护 90 天;- 区分
git log与git reflog:log 只显示当前分支可达提交,reflog 记录所有历史移动。
4. Git 常用命令速查表
仓库初始化 & 远程
表格
| 命令 | 功能 |
|---|---|
| git init | 初始化本地仓库 |
| git clone 仓库地址 | 拉取远程代码 |
| git config --global user.name | 全局配置用户名 |
| git config --global user.email | 全局配置邮箱 |
日常提交流程
bash
运行
git add . # 全部文件加入暂存区 git commit -m "提交备注" git push origin 分支名 git pull origin 分支名分支管理
bash
运行
git branch # 查看本地分支 git checkout -b test # 创建并切换分支 git merge test # 合并分支 git branch -D test # 强制删除分支回退 & 撤销(CTF 高频)
bash
运行
git checkout -- 文件名 # 丢弃工作区修改 git reset --hard 提交id # 彻底回退,丢弃所有改动(慎用) git revert 提交id # 新增提交撤销操作,不删除历史三、JSON 基础与 CTF 传参漏洞
1. JSON 基础语法
JSON 是轻量数据交换格式,仅支持对象{}、数组[]、字符串、数字、布尔、null,key 必须双引号包裹。 对象示例:
json
{"name":"ctf","flag":"nssctf{xxxx}"}嵌套数组示例:
json
{ "list":[ {"user":"admin"}, {"user":"guest"} ] }2. CTF JSON 传参考点(GET 传 JSON)
后端 PHP 经典漏洞代码:
php
运行
<?php include ("flag.php"); $id=$_POST['id']; $json=json_decode($_GET['json'], true); if ($id=="wllnB" && $json["x"]=="wlln") { echo $flag; } ?>解题思路:GET 参数传入 JSON 字符串,URL 编码后访问 Payload 示例:
plaintext
?json={"x":"wlln"}配合 POST 提交id=wllnB即可满足双重条件拿到 flag。
四、HTML 表单提交原理(GET/POST)
1. GET 表单完整示例
html
预览
<form action="login.php" method="get"> <input type="text" name="username_dfa9"/> <input type="password" name="passwd_3a9f"/> <input type="submit" value="登录"> </form>action:数据提交后端处理地址;method="get":参数拼接在 URL 明文传输;name属性是核心:后端通过$_GET['name值']接收参数,随机后缀是常见考点。
GET 请求 URL 效果:
plaintext
http://xxx/login.php?username_dfa9=test&passwd_3a9f=1234562. POST 表单区别
- 参数放在请求体,不暴露在 URL;
- 适合密码、大文件传输;
- 后端接收:
$_POST['参数名']; - HackBar/Burp 抓包可自定义 POST 数据发包。
五、HTTP 请求头伪造(CTF 高频考点)
1. 常见请求头与绕过场景
表格
| 请求头 | 作用 | CTF 考点 |
|---|---|---|
| X-Forwarded-For(XFF) | 代理传递客户端 IP | IP 限制绕过,伪造 127.0.0.1 本地访问 |
| Referer | 请求来源页面 | 来源校验绕过,伪造谷歌 / 本站地址 |
| User-Agent | 浏览器标识 | UA 校验,指定浏览器标识才能访问 |
| Cookie | 客户端会话存储 | Cookie 伪造、会话越权 |
| Content-Type | 请求体格式 | 类型混淆、文件上传绕过 |
2. 经典例题复现
例题 1:XFF 本地 IP 绕过
页面提示:禁止外网 IP,仅本地管理员可访问 添加请求头:
plaintext
X-Forwarded-For: 127.0.0.1例题 2:XFF+Referer 双重校验
限制:IP 必须123.123.123.123,来源必须谷歌 完整请求头:
plaintext
Host: xxx X-Forwarded-For: 123.123.123.123 Referer: https://www.google.com例题 3:UA 浏览器校验
页面提示仅 WLLM 浏览器可访问 修改 UA 头:
plaintext
User-Agent: WLLM3. Content-Type 分类
application/x-www-form-urlencoded:普通表单 POST 默认;multipart/form-data:文件上传;application/json:接口 JSON 传参;text/xml:XXE 漏洞场景。
六、HTTP 响应状态码速记
状态码分类
- 1xx:信息响应;2xx:请求成功;3xx:重定向;4xx:客户端错误;5xx:服务器错误
CTF 高频状态码
表格
| 状态码 | 含义 | 考点 |
|---|---|---|
| 200 | 请求成功 | 正常拿 flag |
| 301/302 | 重定向 | 抓包查看跳转前隐藏 flag |
| 403 | 禁止访问 | IP / 权限绕过 |
| 404 | 页面不存在 | 目录扫描 |
| 405 | 请求方法不允许 | GET/POST 方法互换绕过 |
| 500 | 服务器报错 | 报错信息泄露源码 |
302 重定向考点
页面自动跳转,但 flag 藏在跳转前响应中,使用curl -i或 Burp 抓完整响应包查看内容。
七、Burp Suite 激活与基础抓包拦截使用
1. 工具激活流程(汉化破解版)
- 目录运行
Start.bat/Start.VBS打开激活工具; - Burp 选择手动激活,复制激活请求文本;
- 将请求粘贴至破解工具,生成授权许可密钥;
- 复制密钥粘贴回 Burp,完成激活,可勾选汉化;
- 注意:后续必须通过加载器启动,否则激活失效。
2. 核心功能:请求拦截修改
- 浏览器配置代理,指向 Burp 端口;
- 开启拦截(Intercept is on);
- 抓包后可任意修改:GET/POST 参数、请求头(XFF、Referer、UA、Cookie);
- 修改完成点击 Forward 放行请求,查看页面返回结果。
3. 配套小工具
- HackBar:浏览器快速构造 GET/POST 请求,无需抓包;
- curl 命令:快速发送请求,查看完整响应头 + 响应体。
八、学习总结
- Git reflog 是源码泄露类题核心,记住查看日志、切换历史提交两步拿 flag;
- HTTP 头伪造是 Web 签到题常客,XFF、Referer、UA 三种伪造务必熟练;
- GET/POST 表单分清参数传递位置,URL 传 JSON、随机 name 参数是坑点;
- Burp 作为 CTF 必备工具,基础抓包改包是所有 Web 题操作基础;
- 遇到 302 跳转、403 禁止访问优先考虑请求头伪造绕过。
九、拓展学习资源
- Git 可视化练习:https://learngitbranching.js.org/
- Git 官方中文文档:https://git-scm.com/book/zh/v2
- 抓包可视化工具:VSCode、Sourcetree、Burp Suite
- CTF 基础题库:NSSCTF、Bugku、攻防世界