HTTP协议
HTTP是Web的基本协议,对该协议有深刻的理解对进行web安全测试的工作是至关重要的。了解并理解HTTP的细节可以使测试者找到漏洞并且较好的利用漏洞。
客户端-服务端对话
HTTP是客户端和服务端的一个对话。客户端即浏览器发送请求至服务器端,然后服务端响应请求。HTTP有文本协议的优势,所以对于易读性、可理解性和学习性。一般情况下,大多数Web服务器开放TCP/80端口。当浏览器连接URL http://pentesterlab.com ,实际是对pentesterlab.com 对应的IP的80端口做了一个TCP连接。
大多数请求发生在浏览器请求服务器的内容上。浏览器发送一个请求包含以下元素:
(1)HTTP方法,该元素可以使服务器理解浏览器想进行何种类型的操作。
(2)资源,对应于客户端试图访问服务器端的资源
(3)版本,可以使服务器知道浏览器正在使用的HTTP的版本。
(4)选项,各种头信息可以给出服务器更多的信息如浏览器名称和版本,用户使用的语言(英语?德语?法语?)
(5)请求体,因使用HTTP的方法不同而不同。
例如,请求URL http://vulnerable/index.php 对应下面的HTTP请求:
GET /index.php HTTP/1.1
Host:vulnerable
User-Agent:Mozilla Firefox
请求
方法
(1)GET 方法:请求内容,浏览器发送最通用的请求;
(2)POST方法:用于发送大量的数据,被用于表单 和文件上传
(3)HEAD方法:HEAD方法和GET请求类似,唯一的不同是服务器端提供的响应:响应只包含头而没有body。HEAD被大量用在Web蜘蛛检测Web页面是否被更新,使用该方法可以不用下载整个页面内容。
还有很多其他的HTTP方法:PUT、DELETE、PATCH、TRACE、OPTIONS、CONNECT...可以在Wikipedia上阅读更多的内容。
参数
请求的另一个重要部分是参数。当客户端访问页面 http://vulnerable/article.php?id=1&name=2 ,下面的请求发送给Web服务器:
POST请求比较类似,但是参数在请求体中发送,例如,下面的表单:
上述HTML对应的表单为:
表单中填入以下数据:
username:admin
password:Password123
点击提交后,下面的请求会被发给服务器:
POST /login.php HTTP/1.1
Host:vulnerable
User-Agent:Mozilla Firefox
Content-Length:35
username=admin & password=Password123
NB:如果在