CTFHub技能树—HTTP协议
字数 1742 2025-08-11 21:26:12

HTTP协议知识点详解

一、HTTP请求方法

HTTP协议定义了8种请求方法,每种方法有不同的用途和语义:

  1. OPTIONS

    • 返回服务器针对特定资源所支持的HTTP请求方法
    • 可以发送'*'请求来测试服务器的功能性
  2. HEAD

    • 与GET请求类似,但不返回响应体
    • 用于获取响应头中的元信息,无需传输整个响应内容
  3. GET

    • 向特定资源发出请求
    • 不应用于产生"副作用"的操作
    • 可能被网络蜘蛛等随意访问
  4. POST

    • 向指定资源提交数据进行处理请求
    • 常用于提交表单或上传文件
    • 可能导致新资源的建立或已有资源的修改
  5. PUT

    • 向指定资源位置上传其最新内容
  6. DELETE

    • 请求服务器删除Request-URL所标识的资源
  7. TRACE

    • 回显服务器收到的请求
    • 主要用于测试或诊断
  8. 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. 结合使用方案

  1. Server Side Session

    • Cookie存储session_id
    • 实际数据存储在服务器session中
    • 下次请求携带session_id获取数据
  2. Client Side Session

    • 加密session数据存储在Cookie中
    • Flask框架采用此方式

四、基础认证(Basic Authentication)

1. 认证流程

  1. 请求:客户端发起无认证消息的请求
  2. 质询:服务器返回401 Unauthorized,WWW-Authenticate首部说明认证方式
  3. 授权:客户端弹出对话框获取凭证,编码为Base64放入Authorization首部
  4. 成功:服务器验证凭证,返回200 OK

2. 安全缺陷

  • 每次请求都携带认证信息
  • Base64是编码而非加密,可被解码
  • 易受嗅探攻击

五、CTF实战技巧

1. 请求方法修改

  • 修改请求方法可能获取不同响应
  • 例如将GET改为CTFHUB获取flag

2. 302重定向利用

  1. 使用开发者工具查看网络请求
  2. 找到302跳转的URL
  3. 使用curl工具直接请求跳转URL获取flag

3. Cookie伪造

  1. 抓取请求包
  2. 修改Cookie值
  3. 发送伪造请求获取权限

4. 基础认证破解

方法一:Burp Suite爆破

  1. 抓取认证请求
  2. 发送到Intruder模块
  3. 设置爆破点和编码
  4. 使用字典进行爆破

方法二:Base64编码处理

  1. 将请求包发送到Decoder模块
  2. 解码Base64内容
  3. 使用Payload Processing设置前缀和编码
  4. 进行爆破

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实战中的应用技巧,可作为学习和参考的完整文档。

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示例: 以上内容涵盖了HTTP协议的核心知识点及CTF实战中的应用技巧,可作为学习和参考的完整文档。