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、分支的移动操作:commitresetcheckoutmerge等,哪怕提交被回退、删除、分支丢弃,只要日志未过期(默认 90 天垃圾回收),都能找回丢失提交。

2. 核心作用:找回被删除 / 回退的 flag 提交

CTF 常见场景:开发者提交带 flag 文件后,执行git reset --hard回退,分支历史看不到 flag,但 reflog 保留操作记录。 完整复现流程:

  1. 查看本地操作日志

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
  1. 切换到丢失 flag 的历史快照

bash

运行

# 方式1 git checkout b7c8d9e # 方式2(推荐,分离头指针) git switch --detach b7c8d9e
  1. 读取 flag 文件

bash

运行

cat flag.txt
  1. 可选:新建分支永久保存该提交,防止日志过期丢失

bash

运行

git switch -c recover_flag

3. 关键注意点

  1. reflog仅本地存在,git clone 远程仓库无法直接获取他人操作日志;
  2. git reset --hard HEAD~1只会回退分支,旧提交不会立刻删除,由 reflog 保护 90 天;
  3. 区分git loggit 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=123456

2. POST 表单区别

  1. 参数放在请求体,不暴露在 URL;
  2. 适合密码、大文件传输;
  3. 后端接收:$_POST['参数名']
  4. HackBar/Burp 抓包可自定义 POST 数据发包。

五、HTTP 请求头伪造(CTF 高频考点)

1. 常见请求头与绕过场景

表格

请求头作用CTF 考点
X-Forwarded-For(XFF)代理传递客户端 IPIP 限制绕过,伪造 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: WLLM

3. Content-Type 分类

  1. application/x-www-form-urlencoded:普通表单 POST 默认;
  2. multipart/form-data:文件上传;
  3. application/json:接口 JSON 传参;
  4. text/xml:XXE 漏洞场景。

六、HTTP 响应状态码速记

状态码分类

  1. 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. 工具激活流程(汉化破解版)

  1. 目录运行Start.bat/Start.VBS打开激活工具;
  2. Burp 选择手动激活,复制激活请求文本;
  3. 将请求粘贴至破解工具,生成授权许可密钥;
  4. 复制密钥粘贴回 Burp,完成激活,可勾选汉化;
  5. 注意:后续必须通过加载器启动,否则激活失效。

2. 核心功能:请求拦截修改

  1. 浏览器配置代理,指向 Burp 端口;
  2. 开启拦截(Intercept is on);
  3. 抓包后可任意修改:GET/POST 参数、请求头(XFF、Referer、UA、Cookie);
  4. 修改完成点击 Forward 放行请求,查看页面返回结果。

3. 配套小工具

  • HackBar:浏览器快速构造 GET/POST 请求,无需抓包;
  • curl 命令:快速发送请求,查看完整响应头 + 响应体。

八、学习总结

  1. Git reflog 是源码泄露类题核心,记住查看日志、切换历史提交两步拿 flag;
  2. HTTP 头伪造是 Web 签到题常客,XFF、Referer、UA 三种伪造务必熟练;
  3. GET/POST 表单分清参数传递位置,URL 传 JSON、随机 name 参数是坑点;
  4. Burp 作为 CTF 必备工具,基础抓包改包是所有 Web 题操作基础;
  5. 遇到 302 跳转、403 禁止访问优先考虑请求头伪造绕过。

九、拓展学习资源

  1. Git 可视化练习:https://learngitbranching.js.org/
  2. Git 官方中文文档:https://git-scm.com/book/zh/v2
  3. 抓包可视化工具:VSCode、Sourcetree、Burp Suite
  4. CTF 基础题库:NSSCTF、Bugku、攻防世界