超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。HTTP的工作原理和基本组成
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP遵循请求(Request)/应答(Response)模型,Web浏览器向Web服务器发送请求时,Web服务器处理请求并返回适当的应答。POST /index.html HTTP/1.1 //请求行 HOST:www.test.com //请求头 User-Agent:Mozilla/5.0 (windows NT 6.1;rv:15.0)Gecko/20100101 Firefox/15.0 //空白行,代表请求头结束 Username=admin&password=admin //请求正文 1234 |
HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。HTTP请求第一行为请求行,由三部分组成,第一部分说明了该请求时POST请求,第二部分是一个斜杠(/index.html),用来说明请求是该域名根目录下的/index.html,第三部分说明使用的是HTTP1.1版本。HTTP请求第二行至空白行为请求头(也被称为消息头)。其中,HOST代表请求主机地址,User-Agent代表浏览器的标识,请求头由客户端自行设定。HTTP请求第五行为请求正文,请求正文是可选的,它最常出现在POST请求方式中。根据 HTTP 标准,HTTP 请求可以使用多种请求方法。HTTP1.0 定义了三种请求方法:GET, POST 和 HEAD方法。HTTP1.1 新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的资源 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
HTTP/1.1 200 OK //响应行 Date: Sun, 15 Nov 2015 11:02:04 GMT //响应头 Server: bfe/1.0.8.9 Content-Length: 2605 Content-Type: application/javascript Cache-Control: max-age=315360000 Expires: Fri, 13 Jun 2025 09:54:00 GMT Content-Encoding: gzip Set-Cookie: H_PS_PSSID=2022_1438_1944_1788; path=/; domain=test.com Connection: keep-alive //空白行,代表响应头结束 <html> <head><title> Index.html </title></head> //响应正文消息主题 Hello World! |
HTTP响应的第一行为响应行,其中有HTTP版本(HTTP/1.1)、状态码(200)以及消息“OK”。第二行至末尾的空白行为响应头,由服务器向客户端发送。消息头之后是响应正文,是服务器向客户端发送的HTML数据。HTTP协议在工控中的应用
在工业控制领域,HTTP协议被广泛应用在以下几个典型场景中:通过Web界面访问工业自动化设备如PLC(可编程逻辑控制器)、SCADA系统组件或智能传感器等,进行远程配置和管理。在工业控制系统中,通过 HTTP 请求发送警报和通知到管理系统或移动设备。工业控制系统中的传感器和数据采集设备通常生成大量的数据,这些数据可能需要定期传输到中央服务器进行监控、分析和存储。HTTP协议可用于将采集到的数据文件传输到中央服务器,以便进行后续处理和分析在多层级控制系统架构中,HTTP可作为不同层级间数据交互的手段,例如从底层设备上传原始数据至中继服务器,再由该服务器转发至更高层次的信息系统。HTTP漏洞挖掘环境搭建
测试所需硬件:
硬件 | 数量 | 说明 |
PC电脑 | 1 | 安装chrome浏览器,用来登陆漏挖web界面 |
博智工控漏洞挖掘平台 | 1 | 测试主体,利用fuzz技术对被测靶标进行漏洞挖掘 |
moxa交换机 | 1 | 被测主体 |
普通网线 | 2 | 设备连接 |
博智漏洞挖掘平台允许通过测试网络同时连接上位机和下位机。本次实战不涉及上位机,因此仅需使用网线将靶标(moxa工控交换机)与漏挖平台的测试端口1连接(对应漏挖网口ETH0),靶标与漏挖连接如图:用另一根网线将漏挖的管理口(对应网口MGMT)与PC电脑机直连,将PC网卡配置成MGMT同网段,在PC上能访问漏挖管理界面,例如:https://192.168.120.1。网络配置
在PC上使用浏览器登录漏挖管理系统,在系统中找到“环境配置->测试网络配置”,将漏挖系统测试口本地IP地址配置为靶标同网段地址,本次测试靶标的IP地址是:192.168.0.1,所以将本端地址设置为192.168.0.2~192.168.0.254中的任意一个即可(除192.168.0.1)。
端口扫描
在“扫描配置->扫描配置“中扫描靶标端口开放情况,HTTP协议端口默认为80/tcp。端口扫描必须确认80端口已经开放。
监视器选择
根据被测服务的特点选择相应的监视器,HTTP协议端口是TCP协议,因此TCP监视器是推荐打开的,其他的监视器可根据情况自行选择。
测试用例选择
本次实战选取博智工控漏洞挖掘平台的“自定义测试”功能,使用该功能,用户可依据协议规约自行定义测试用例,从而实现私有协议的模糊测试。
测试用例执行
1)将刚才用户自定义的协议“测试用例1”添加到测试套件里面:
执行测试用例之前系统会检测各个监视器状态,确保所有监视器状态正常才会开始发送测试用例数据。 如果测试用执行到100%所有监视器状态均为正常,则表示未发现漏洞,若监视器异常,则需要进一步对测试用例数据进行分析,以确定是否真实存在漏洞。实际测试发现当测试进度来到11.90%时,测试监视器出现异常,TEST监视器出现告警,说明此时http服务已经崩溃。在漏洞测试结果详情页面可以查看漏洞类型为”拒绝服务”,漏洞个数为1个。漏洞详情页面还展示了触发本次拒绝服务漏洞的payload报文:通过界面上的“生成POC脚本”按钮,导出POC,该POC是py脚本,需要在客户机上安装python程序。POC中的host和port参数需要根据实际情况,修改成http服务器的IP和端口,POC文件内容如下:通过执行该POC脚本,将漏洞payload发送给处于正常状态的HTTP服务器,观察服务端程序以及80端口,发现服务端异常崩溃,说明能够稳定复现故障。因此可以证明被测服务器在处理该数据报文的时候,代码逻辑不严密,导致漏挖平台通过构造特殊数据,可以引起服务崩溃,进而触发DOS攻击。厂商可以通过复查该部分的代码,结合本次测试用例的payload分析代码逻辑缺陷,从而修复该漏洞。
还没有评论,来说两句吧...