“SCSA-S学习导图+”系列:HTTP协议分析

发布于:2023-01-22 ⋅ 阅读:(282) ⋅ 点赞:(0)

本期引言:对于初学网络安全的小伙伴,一直觉得Linux下的LAMP(Linux+Apache+Mysql+PhP)使用起来不太方便,不能很好地适应命令行界面,也不能忍受Linux图形界面的设计。所以今天我们就来搭建一套基于Windows的Apache+Mysql+PhP环境。

很多朋友看到这里,会推荐使用一些集成度较高的学习环境,比如Apache官方网站上会推荐的Wamp或XAMPP。但是从网络安全的学习角度,这样并不利于理解软件之间协同工作原理与软件的配置,不利于后续网络安全的相关学习,下面我们一起开始吧~

01HTTP协议简介

HTTP(超文本传输协议,Hyper Text Transfer Protocol),于1990年提出,当前使用的版本为HTTP/1.1。设计HTTP用来将超文本标记语言(HTML)文档从Web服务器传送到Web浏览器,规定浏览器和服务器之间相互通信的规则。HTTP是一个请求与响应对应的协议(客户机发送请求,服务器对收到的请求给出响应)。HTTP通常运行在TCP之上,使用可靠的TCP连接,默认端口是80。

1. 1 HTTP协议特点

  • 支持客户/服务模式

HTTP客户端发起一个请求,建立一个到服务器指定的端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送来的请求。一旦收到请求,服务器向客户端做出应答。

  • 简单快速

客户向服务器请求服务时,只需要传送请求方法和路径即可。由于HTTP协议简单,使得HTTP服务器的规模小,因而通信速度很快。

  • 灵活

HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type字段加以标记。

  • 无连接

每次连接只处理一个请求,服务器在处理完客户的请求,并收到客户的应答后立即断开连接。采用这种方式可以节省传输时间。

  • 无状态

无状态是指HTTP协议对于事务处理没有记忆能力,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。但是,服务器不需要先前信息时,它的应答就较快。

02HTTP协议分析

2.1 HTTP数据包抓取

想要对HTTP数据包的内容进行分析,就需要借助一些抓包工具抓取HTTP数据包。这些抓包工具相当于代理,客户端和服务器端的请求与响应都要经过代理,所以通过抓包工具就很容易抓取请求数据包和响应数据包。

HTTP数据包抓取过程

GET请求数据包

POST请求数据包

2.2 HTTP请求数据包

HTTP请求数据包由请求行、请求头、请求正文三个部分组成。

请求行:请求报文的第一行内容(请求方法、资源路径、协议版本)

HTTP请求方法就是告诉服务器要做什么。

GET 通常用于请求服务器发送某个资源,也是最常用的一种方法;一般没有请求正文
POST 用来向服务器发送数据,主要支持HTML表单;可以用POST方法来传递比较大的数据文件;一般带有请求正文
PUT 向服务器写入文档,让服务器请求的主体部分来创建一个由所请求的URL命名的新文档;若已存在该文件,则用该主体替代
HEAD 只需要服务器返回首部,不返回实体的主体部分。可实现未获取实际资源的情况下,对资源的首部进行检查。通常扫描器会使用该方法。
DELETE 请求服务器删除请求中的URL所指定的资源,但不一定成功
OPTIONS 用来探测服务器所支持的方法
TRACE 跟踪请求经过的中间环节,回显服务器收到的请求

资源路径是描述了要访问的网络上的资源的具体位置。

协议版本是当前使用的HTTP协议版本。

请求头:从客户端向服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应相关的优先级等内容。一般有很多行,每行都是一个键值对,以“: ”来分割。

Host: 请求资源的主机和端口号User-Agent: 客户端操作系统、浏览器等其他信息Referer: 包含一个URL,代表当前URL的上一个URLAccept: 指定客户端希望接收的数据类型Accept-Language: 指定客户端接收的语言Accept-Charset: 指定客户端接收的字符集Cookie: 是一段文本,通常来表示请求者的身份凭证Content-Type: 请求正文的数据类型Content-Length: 请求正文的长度Last-Modified: 指示资源的最后修改时间和日期

请求正文:在请求头后的换行符后面;有时候有,有时候没有。

2.3 HTTP响应数据包

HTTP响应数据包由响应行(状态行)、响应头、响应正文三个部分组成。

响应行:响应报文的第一行内容(协议版本、状态码、状态码描述)

客户端向服务器发出请求,状态码用于描述返回的请求结果。

2XX 请求成功 200 OK 从客户端发来的请求在服务器端被正常处理204 NOT Content 请求成功,但不需要做任何响应206 Partical Content 服务器成功执行了客户端发来的范围GET请求
3XX 客户端被重定向到其他资源 301 Moved Permanently 永久性重定向302 Found 临时重定向303 See Other 请求对应的资源存在着另一个URI,并且应使用GET方法定向获取请求的资源304 Not Modified客户端发送附带条件的请求时,服务器端允许请求访问资源,但请求未满足条件307 Temporary Redirect 临时重定向,但请求方式不会从POST变为GET
4XX 请求包含某种错误 400 Bad Request 请求报文中存在语法错误,当错误发生时,需修改请求的内容后再次发送请求401 Unauthorized 发送的请求需要有通过HTTP认证的认证信息403 Forbidden 对请求资源的访问被服务器拒绝了404 Not Found 服务器上无法找到请求的资源
5XX 服务器执行请求时遇到错误 500 Internal Server Error 服务器端在执行请求时发生了错误503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求

响应头:服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。

Server: 服务器所使用的Web服务器名字(服务器指纹)Set-Cookie: 向客户端设置CookieLast-Modified: 告诉浏览器资源修改的最后时间Location: 重定向指向的页面Content-Type: 响应正文的类型Content-Length: 响应正文长度X-Powered-By: 代码执行环境Refresh: 定时刷新浏览器Date: 创建HTTP报文的日期和时间

响应正文:服务器返回客户端的具体数据,可能会有各种不同的格式,其中最常见的格式就是HTML。

03HTTP请求过程

HTTP请求过程

  • 浏览器:用户输入URL
  • DNS域名解析
  • 建立TCP连接
  • 发送HTTP请求
  • Web服务器响应(回复)
  • 应用服务器响应(回复)
  • 关闭TCP连接
  • 用户浏览器渲染页面

04总结

通过此文,大家可以发现在对HTTP协议进行分析的时候,还会用到网络协议的基础知识。网络安全也是需要学习操作系统、网络协议等基础知识,掌握了这些基础知识,不管去学习网络运维还是网络安全,都会容易很多,所以还是要先学好基础知识。

练习题

如果对此文章内容有兴趣的同学,可以尝试去做一下HTTP抓包分析实验。

另外可以将文中的HTTP协议换成HTTPS协议,尝试利用抓包工具抓取数据包分析,注意HTTPS数据包的抓取需要证书哦!

同时思考:HTTP协议是无状态协议,为什么登录一些网站后,间隔一段时间,网站还是知道我们是谁呢?

对于本期讲解内容,以及你还期待的学习内容可在公众号后台回复,不仅有老师在线答疑,我们也会根据大家的提议调整每期学习内容哦~欢迎关注!

本期作者:石岩

深信服培训认证中心主任

深信服安全服务认证专家(SCSE-S)

产业教育中心资深讲师,中国网络空间安全协会会员,深圳大学专业学位研究生校外导师;曾任国内知名安全厂商安全认证负责人、安全服务工程师、信息安全咨询顾问、信息安全讲师;多次为政府、运营商、企业、本科、高职学员以及高校老师进行信息安全培训;多次组织、参与职业能力评价认证工作,擅长Web安全、渗透测试、操作系统等多个方向的课程。

本文含有隐藏内容,请 开通VIP 后查看