HTTP Header概述 从左到右看:
客户端(通常是浏览器)通过TCP/IP连接向Web服务器发送一个HTTP请求报文。
HTTP请求报文包含以下信息:
请求行(例如,“GET /index.html HTTP/1.1”),说明了要获取的资源类型及其路径。 头部字段(例如,“Host: www.sxtyu.com”),提供了关于请求的额外信息。 可选的消息体(如表单数据或文件上传等)。 Web服务器接收到这个请求后,会查找并准备相应的文档(在这个例子中是“Index.html”)。然后它将该文档作为响应返回给客户端。
Web服务器创建一个HTTP响应报文,并将其发送回给客户端。HTTP响应报文包括以下几个部分:
状态行(例如,“HTTP/1.1 200 OK”),表示请求是否成功以及原因。 头部字段(例如,“Content-Type: text/html; charset=UTF-8”),描述了响应内容的类型和编码方式。 响应正文(即实际的HTML代码或其他格式的数据)。 最后,在完成整个交互过程后,客户端与服务器之间的TCP连接会被释放掉。
HTTP报文类型 请求报文(HTTP Request) :由客户端发给服务器的消息,其组成包括请求行(Request-Line)、请求头域(Header-Field)和请求体(Entity-Body)。 响应报文(HTTP Response) :由服务器回复给客户端的消息,其组成包括状态行(Status-Line) 、响应头域(Header-Field)和响应体(Entity-Body)。 HTTP请求报文组成 HTTP报文由三部分组成:请求行、首部字段和实体主体。
请求行:包含了请求方法(如GET、POST等)、请求URL以及HTTP版本号。示例中的请求行为"GET /index.html HTTP/1.1",表示这是一个GET请求,目标文件为/index.html,使用HTTP 1.1协议。 首部字段:这些字段包含了有关浏览器、服务器或者报文主体的一些信息。每个首部字段都由名称和值对构成,并以CRLF(回车换行符)结束。例如:"Host: www.sxtyu.com" 和 "Connection: close"。 实体主体:如果需要在请求中发送数据,则可以将这些数据放在实体主体中。实体主体位于所有首部字段之后,并用CRLF分隔开。 整个请求报文最后也必须以一个单独的CRLF作为结尾来表示报文的结束。
HTTP请求的方法 HTTP请求报文实例 以sql靶场为例,下图所示为请求报文:
HTTP响应报文组成 HTTP请求报文是由客户端(通常是一个浏览器)发送给Web服务器的信息包,用于请求特定的网页资源。报文的所有字段都是ASCII码。
请求行:请求行包含了三个主要元素——方法、URL和版本,它们之间用空格分隔,并以CRLF(回车换行符)结束。例如:“GET /index.html HTTP/1.1”,其中GET表示请求类型,/index.html是请求的资源路径,HTTP/1.1是使用的HTTP协议版本。 首部字段:首部字段是一系列键值对,用来提供更多的请求信息。每个首部字段以名称和值的形式出现,中间用冒号(:)分开,后面跟着CRLF。多个首部字段之间也用CRLF分隔。例如:“Host: www.sxtyu.com”、“Connection: close”。 实体主体:实体主体是可选的部分,只有当需要提交数据时才存在。它位于所有首部字段之后,并且同样以CRLF开始。 整个请求报文以两个连续的CRLF字符结束,表明报文的结束。这样服务器才能正确解析请求。
HTTP响应消息状态码 HTTP响应报文实例 HTTP Header内容 User-Agent : 使服务器能够识别客户端使用的操作系统,浏览器版本等(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)Cookie : 网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。Host : 客户端指定自己想访问的Web服务器的域名/P地址和端口号。X-Forwarded-For : 简称XFF头,它代表客户端(即HTTP的请求端)真实的IP(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库或某文件,通过修改XFF头可以实现伪造IP)Client-lP: 同上。 Referer : 浏览器向Web服务器表明自己是从哪个页面链接过来的。HTTP Header注入 有时候,后台开发人员为了验证客户端HTTP Header(比如常用的Cookie验证等)或者通过HTTP Header头信息获取客户端的一些信息(比如User-Agent、Accept字段等)会对客户端HTTP Header进行获取并使用SQL语句进行处理,如果此时没有足够的安全考虑,就可能导致基于HTTP Header的注入漏洞。
HTTP Header注入的前提条件 能够对请求头消息进行修改 修改的请求头信息能够带入数据库执行 数据库没有对输入的请求头做过滤 常见的HTTP Header注入类型 Cookie注入 Referer注入 User-Agent注入 XFF注入 Cookie注入 常见场合:服务器对cookie字段进行获取,以验证客户端的身份。
Referer注入 常见场合:服务器记录referer字段用于统计网站的点击量。
User-Agent注入 常见场合:
(1)服务器记录访问者的信息,如浏览器版本、操作系统版本等
(2)服务器根据User-Agent提供的信息来给客户端推送不同的网页。
XFF注入 常见场合:一些网站的防注入功能会记录客户端真实IP地址并写入数据库
HTTP Header注入实例 目标靶机 : SQLi-Labs的less-18
注入方式:利用Burpsuite抓包,在User-Agent头部字段设置注入payload。
本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!
本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试 。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。
我正在参与2024腾讯21天技术创作挑战赛|年中回顾特别季,年中技术沉淀,拯救你的flag,快来和我瓜分大奖!