CTFHub技能树—HTTP协议
字数 1742 2025-08-11 21:26:12
HTTP协议知识点详解
一、HTTP请求方法
HTTP协议定义了8种请求方法,每种方法有不同的用途和语义:
-
OPTIONS
- 返回服务器针对特定资源所支持的HTTP请求方法
- 可以发送'*'请求来测试服务器的功能性
-
HEAD
- 与GET请求类似,但不返回响应体
- 用于获取响应头中的元信息,无需传输整个响应内容
-
GET
- 向特定资源发出请求
- 不应用于产生"副作用"的操作
- 可能被网络蜘蛛等随意访问
-
POST
- 向指定资源提交数据进行处理请求
- 常用于提交表单或上传文件
- 可能导致新资源的建立或已有资源的修改
-
PUT
- 向指定资源位置上传其最新内容
-
DELETE
- 请求服务器删除Request-URL所标识的资源
-
TRACE
- 回显服务器收到的请求
- 主要用于测试或诊断
-
CONNECT
- HTTP/1.1协议预留方法
- 用于将连接改为管道方式的代理服务器
二、HTTP重定向
1. 重定向概念
服务器无法处理请求时,告诉浏览器跳转到可以处理请求的URL。浏览器会自动访问新URL,用户可能察觉不到重定向。
2. 重定向状态码
-
301 Moved Permanently
- 永久重定向
- 资源已被永久移除
- 搜索引擎会更新索引
-
302 Found
- 临时重定向
- 资源仍然存在,只是临时跳转
- 搜索引擎保留原URL
3. 重定向与转发的区别
| 特性 | 重定向 | 转发 |
|---|---|---|
| 行为主体 | 客户端 | 服务器 |
| 请求次数 | 至少两次 | 一次 |
| URL变化 | 可见 | 不可见 |
| 路径限制 | 任意URL | 同一容器内URL |
| 数据传递 | 不传递request | 传递request |
三、Cookie与Session
1. Cookie
- 解决HTTP无状态问题
- 服务器返回数据给浏览器存储
- 后续请求自动携带Cookie
- 存储容量有限(通常≤4KB)
- 存储在客户端
2. Session
- 存储在服务器端
- 更安全,不易被窃取
- 会占用服务器资源
3. 结合使用方案
-
Server Side Session
- Cookie存储session_id
- 实际数据存储在服务器session中
- 下次请求携带session_id获取数据
-
Client Side Session
- 加密session数据存储在Cookie中
- Flask框架采用此方式
四、基础认证(Basic Authentication)
1. 认证流程
- 请求:客户端发起无认证消息的请求
- 质询:服务器返回401 Unauthorized,WWW-Authenticate首部说明认证方式
- 授权:客户端弹出对话框获取凭证,编码为Base64放入Authorization首部
- 成功:服务器验证凭证,返回200 OK
2. 安全缺陷
- 每次请求都携带认证信息
- Base64是编码而非加密,可被解码
- 易受嗅探攻击
五、CTF实战技巧
1. 请求方法修改
- 修改请求方法可能获取不同响应
- 例如将GET改为CTFHUB获取flag
2. 302重定向利用
- 使用开发者工具查看网络请求
- 找到302跳转的URL
- 使用curl工具直接请求跳转URL获取flag
3. Cookie伪造
- 抓取请求包
- 修改Cookie值
- 发送伪造请求获取权限
4. 基础认证破解
方法一:Burp Suite爆破
- 抓取认证请求
- 发送到Intruder模块
- 设置爆破点和编码
- 使用字典进行爆破
方法二:Base64编码处理
- 将请求包发送到Decoder模块
- 解码Base64内容
- 使用Payload Processing设置前缀和编码
- 进行爆破
5. 查看源代码
- 使用Ctrl+U查看页面源代码
- 可能发现隐藏的flag或提示
六、工具使用
1. curl
- Linux命令行工具
- 可用于直接请求URL获取响应
- Windows也有移植版本
2. Burp Suite
- 抓包和修改请求
- Intruder模块用于爆破
- Decoder模块用于编码/解码
3. Base64编解码
- 使用在线工具或编程实现
- Python示例:
import base64
str1 = str.encode('username:password')
encodestr = base64.b64encode(str1)
以上内容涵盖了HTTP协议的核心知识点及CTF实战中的应用技巧,可作为学习和参考的完整文档。