本期引言:对于初学网络安全的小伙伴,一直觉得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安全、渗透测试、操作系统等多个方向的课程。