本章简要介绍渗透测试员在攻击Web应⽤程序时可能遇到的关键技术。
将分析HTTP协议、服务器和客⼾端常⽤的技术以及⽤于在各种情形下呈现数据的编码⽅案。
这些技术⼤都简单易懂,掌握其相关特性对于向Web应⽤程序发动有效攻击极其重要。
1.1 HTTP协议概述介绍
HTTP(HyperText Trans fer Protocol,超⽂本传输协议)是访问万维⽹使⽤的核⼼通信协议; 也是今天所有Web应⽤程序使⽤的通信协议。
最初,HTTP只是⼀个为获取基于⽂本的静态资源⽽开发的简单协议,后来⼈们以各种形式扩展和利⽤它; 使其能够⽀持如今常⻅的复杂分布式应⽤程序。
HTTP使⽤⼀种⽤于消息的模型:客⼾端送出⼀条请求消息,⽽后由服务器返回⼀条响应消息。 该协议基本上不需要连接,虽然HTTP使⽤有状态的TCP协议作为它的底层传输机制,但每次请求与响应交换都会⾃动完成, 并且可能每次访问连接使⽤不同的TCP连接。
1.1.1 HTTP请求报文
所有HTTP消息(请求与响应)中都包含:
⼀个或⼏个单⾏显⽰的消息头(header),在消息头部分主要包含:请求⾏信息和请求头信息
⼀个强制空⽩⾏;
最后是请求消息主体(可选);
以下是⼀个典型的HTTP请求:
每个HTTP请求的第⼀⾏都由3个以空格间隔的请求⾏信息组成。
01 请求报文部分区域详细解读:请求行
HTTP请求报⽂中请求⾏包含三个信息部分:
HTTP请求报文中常用的请求方法:
当渗透测试员攻击Web应⽤程序时,⼏乎肯定会遇到最常⽤的⽅法:GET和POST。
这些⽅法之间存在⼀些必须了解的重要差异,忽略这些差异可能会危及应⽤程序的安全。
请求方法:GET:
主要作⽤是从Web服务器获取⼀个资源;GET请求并没有消息主体,因此在消息头后的空⽩⾏中没有其他数据。
所请求的URL中通常有所请求的资源名称路径和名称信息,以及⼀个包含客⼾端向该资源提交的参数的可选查询字符串组成;
在该URL中,查询字符串以?字符标识,上⾯的⽰例中有⼀个名为uid、值为129的参数;
可以采⽤URL查询字符串的形式向所请求的服务端发送参数。
这使客⼾端可将⼀个包含动态资源的URL标注为书签,⽤⼾⾃⼰或其他⽤⼾随后可重复利⽤该书签来获取等价的资源;
URL显⽰在浏览器地址栏中,并可以被记录在许多地⽅,如浏览器的历史记录和Web服务器的访问⽇志中。
如果单击外部链接,还可以⽤Referer消息头将它们传送到其他站点。因此,请勿使⽤查询字符申传送任何敏感信息。
请求⽅法:POST:
作⽤本质也是从Web服务器获取⼀个资源,但主要作⽤是完成执⾏操作(可以理解为是需要在客⼾端提交信息给服务端)。
使⽤这个⽅法可以在URL查询字符时,在消息主体中发送请求参数。
尽管仍然可以将URL标注为书签,但书签中并不包含消息主体发送的任何参数。
许多维护URL⽇志的位置及Referer消息头也将这些参数排除在外。
因为POST⽅法旨在执⾏操作,如果⽤⼾单击浏览器上的“后退”按钮,返回⼀个使⽤这种⽅法访问的⻚⾯;
那么浏览器不会⾃动重新发送请求,⽽是就即将发⽣的操作向⽤⼾核实确认;
这样做可防⽌⽤⼾⽆意中多次执⾏同⼀个操作;所以在执⾏某⼀操作时必须使⽤POST请求
请求方法:HEAD:
这个⽅法的功能与GET⽅法相似,不同之处在于服务器不会在其响应中返回消息主体。
服务器返回的消息头应与对应GET请求返回的消息头相同。
因此,这种⽅法可⽤于检查某⼀资源在向其提交GET请求前是否存在。
HEAD请求⽅法实际应⽤⽰例:
GET⽅法请求会在响应报⽂中包含响应主体信息;
HEAD⽅法请求会在响应报⽂中不会包含响应主体信息;
请求方法:OPTIONS:
这种⽅法要求服务器报告对某⼀特殊资源有效的HTTP⽅法。
服务器通常返回⼀个包含Allow消息头的响应,并在其中列出所有有效的⽅法。
OPTIONS请求⽅法实际应⽤⽰例:
在利⽤此⽅法对⽹站 / 资源进⾏访问时,可以在响应报⽂的Allow字段中,获取到⽹站服务端允许客⼾端的请求⽅法信息;
此时,如果能够看到TRACE DELETE MOVE COPY不安全的⽅法信息,并结合Public中的PUT⽅法信息;
表⽰⽹站是可能会存在被⼊侵的安全隐患;
请求方法:PUT:
这个⽅法试图使⽤包含在请求主体中的内容,向服务器上传指定的资源。
如果激活这个⽅法,渗透测试员就可以利⽤它来攻击应⽤程序。
例如,通过上传任意⼀段脚本并在服务器上执⾏该脚本来攻击应⽤程序。
请求方法:TRACE:
这种⽅法主要⽤于诊断。服务器应在响应主体中返回其收到的请求消息的具体内容。
这种⽅法可⽤于检测客⼾端与服务器之间是否存在任何操纵请求的代理服务器,会将有这种⽅法允许的⽹站漏洞定义为中低危漏洞;
参考资料:
https://www.cnblogs.com/xiaodangshan/p/7715313.html
禁⽌⽅法:
https://www.cnblogs.com/shaoing/p/17716464.html
HTTP请求报⽂中请求资源的⽅法:
在请求⾏的第⼆字段部分会添加需要请求的资源的uri信息,常⻅的请求资源的⽅法主要有:
get⽅法请求:uri信息主要是由资源路径和资源名称信息,以及有些请求的参数信息组成;
post⽅法请求:url信息主要是由资源路径和资源名称信息组成;
HTTP请求报⽂中常⽤的协议版本:
因特⽹上常⽤的HTTP版本为1.0和1.1,多数浏览器默认使⽤1.1版本,在有些特殊场景下还会使⽤2.0版本进⾏通讯
这三个版本的规范之间存在⼀些差异;然⽽,当攻击Web应⽤程序时,渗透测试员可能遇到的唯⼀差异是1.1版本必须使⽤Host请求头。