目录
一、http
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
二、http数据包参数
HTTP数据包,通常指的是HTTP消息,它由两部分组成:请求行(对于请求消息)或状态行(对于响应消息),以及随后的一系列头部字段(headers),最后是消息体(body,可选)。以下是HTTP数据包中常见的参数和组成部分:
请求消息:
-
请求行:
- 方法:如GET、POST、PUT、DELETE等,表示要执行的操作。
- URL:请求的资源路径。
- HTTP版本:如HTTP/1.1或HTTP/2。
示例:
GET /index.html HTTP/1.1
-
请求头部:
Host
:请求的服务器域名。User-Agent
:发出请求的客户端信息。Accept
:客户端可接受的MIME类型。Accept-Language
:客户端可接受的语言。Accept-Encoding
:客户端可接受的压缩编码。Content-Type
:请求体的媒体类型。Content-Length
:请求体的长度。Connection
:连接管理参数,如keep-alive
。Cookie
:存储在客户端的cookie信息。Authorization
:认证信息。
-
请求体:
- 对于GET请求,通常为空。
- 对于POST请求,包含了发送给服务器的数据。
响应消息:
-
状态行:
- HTTP版本:如HTTP/1.1。
- 状态码:表示请求结果的三位数字,如200表示成功,404表示未找到。
- 状态信息:对状态码的简短描述。
示例:
HTTP/1.1 200 OK
-
响应头部:
Content-Type
:响应体的媒体类型。Content-Length
:响应体的长度。Cache-Control
:缓存指令。Set-Cookie
:设置客户端cookie的指令。Server
:服务器软件信息。Location
:常用于重定向,指定新资源的URL。Connection
:连接管理参数。
-
响应体:
- 服务器返回的数据,如HTML页面、图片、JSON数据等。
其他概念:
- 持久连接(Persistent Connections):HTTP/1.1默认支持持久连接,允许多个请求和响应在同一个TCP连接上复用。
- 分块传输编码(Chunked Transfer Encoding):一种数据传输机制,允许服务器在知道整个响应体大小之前就开始发送数据。
- 管线化(Pipelining):在持久连接中,客户端可以在收到前一个响应之前发送下一个请求。
- HTTP/2:HTTP的第二个主要版本,引入了头部压缩、多路复用等特性,以减少延迟和提高性能。
三、[极客大挑战 2019]Http1
前端检查
找出Secret.php也是一个问题
进入Secret.php界面
显示请求头不对
Referer协议就是告诉服务器我从哪里来。所以抓包修改请求头
请求头
HTTP Referer(实际上正确的拼写应该是 "referrer",但遵循传统,通常写作 "referer")是一个HTTP请求头字段,它指示一个请求是从哪个页面发起的。也就是说,它包含了一个URL,该URL是用户点击链接来到当前请求页面的原始页面地址。
这个参数通常用于以下场景:
-
防止CSRF攻击:网站可以通过检查Referer头部来确认请求是否来自合法的页面。
-
分析流量来源:网站管理员可以使用Referer头部来分析用户是从哪些网站或页面链接到他们网站的。
-
个性化内容:基于用户是从哪个网站来的,提供个性化的内容或服务。
-
广告跟踪:广告网络使用Referer头部来跟踪广告点击和来源。
-
防盗链:一些网站使用Referer头部来检测和阻止他们的资源被其他网站非法链接(即所谓的 "hotlinking")。
通过添加请求头来告诉服务器访问来源
Referer:https://Sycsecret.buuoj.cn
User-Agent
是一个 HTTP 请求头字段,用于提供发出请求的客户端(通常是浏览器)的信息。这个字段允许服务器识别客户端的类型、操作系统、浏览器及其版本等信息,从而可以根据这些信息提供定制化的响应或重定向。
User-Agent
的结构:
一个典型的 User-Agent
字符串包含了多个部分组成,通常包括:
- 浏览器名称:如 "Mozilla"(很多浏览器为了兼容性在
User-Agent
中包含此名称)。 - 浏览器版本:具体的浏览器版本号。
- 操作系统:客户端使用的操作系统,如 Windows、macOS、Linux、iOS、Android 等。
- 设备信息:如果是移动设备,可能包含设备类型或型号。
- 浏览器引擎:如 Gecko(Firefox)、Blink(Chrome)、EdgeHTML(旧版 Edge)等。
- 附加信息:可能包括一些额外的标识符或扩展信息。
示例
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
这个 User-Agent
字符串表示:
- 使用的是 Chrome 浏览器,版本为 58.0.3029.110。
- 浏览器运行在 Windows 10 操作系统上,64位版本。
- 使用了 WebKit(通过 "AppleWebKit/537.36" 表示,这是 Safari 浏览器的浏览器引擎,也被 Chrome 和其他浏览器使用)。
- 字符串以 "Safari" 结尾,表示 Chrome 的用户代理字符串模式。
使用场景:
- 内容协商:服务器可以根据
User-Agent
来提供适当的内容,如为移动设备提供优化的页面。 - 功能检测:通过识别浏览器和版本,服务器可以决定支持哪些特性或需要哪些特定的修复。
- 统计分析:网站可以使用
User-Agent
字符串来收集访问者使用的浏览器和操作系统的统计信息。 - 个性化体验:根据访问者的设备和浏览器特性,提供定制化的用户体验。
添加后访问,提示请使用 Syclover 浏览器,这就可以想到用User-Agent协议来伪造访问工具为 Syclover 浏览器,这个协议就是告诉服务器我是用什么访问的 .修改 User-Agent
User-Agent: Syclover
添加其参数后出现该界面:你只能在本地阅读
X-Forwarded-For
是一个 HTTP 请求头字段,用于识别通过代理服务器或负载均衡器连接到 Web 服务器的客户端的原始 IP 地址。当客户端通过一个或多个代理服务器与 Web 服务器通信时,代理服务器可以在 X-Forwarded-For
头中添加或追加客户端的 IP 地址,以确保 Web 服务器能够识别原始请求的来源。
使用场景:
-
代理服务器:当客户端通过代理服务器发送请求时,代理服务器可以在请求头中添加
X-Forwarded-For
字段,包含客户端的 IP 地址。 -
负载均衡器:在负载均衡的场景中,
X-Forwarded-For
可用于追踪请求经过的每个代理的 IP 地址。 -
分析流量:Web 应用程序可以使用
X-Forwarded-For
来分析流量来源,了解访问者的真实 IP。 -
地理位置定位:基于客户端 IP 地址提供地理位置服务。
-
日志记录:在服务器日志中记录原始客户端 IP 地址,而非代理服务器的地址。
那只能在本地的话,我们可以伪造本地ip 127.0.0.1,所以我们可以利用
X-Forwarded-For
协议来伪造只需要在 header 添加
X-Forwarded-For:127.0.0.1
最后获取flag