一、HTTP请求头
所有HTTP消息(请求与响应)中都包含一个或几个单行显示的消息头(header),然后是一个强制空白行,最后是消息主体(可选)。一下是一个经典的HTTP请求;
GET /auth/488/YourDetails.ashx?uid=129 HTTP/l.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: https://mdsec.net/auth/488/Home.ashx
Accept-Language: zh-cn,zh;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WDW64;
Trident/4.0; SLCC2;. NET CLR 2.0.50727;. NET CLR 3.5.30729; .NET CLR
3.0.30729; .NET4.OC; InfoPath.3; .NET4.OE; FDM;。 NET CLR 1.1.4322)
Accept-Encoding: gzip, deflate
Host: mdsec.net
Connection: Keep-Alive
Cookie: SessionId=5870C7lF3FD4968935CDB6682E545476
每个HTTP请求的第一行都由3个以空格间隔的 项目组成。
1、GET请求头:一个说明HTTP方法的动词。最常用的方法为GET,它的主要作用是从Web服务器获取一个资源。GET请求并没有消失主体,因此在消息头后的空白行中没有其他数据。所请求的URL,通常由所请求的资源名称,以及一个包含客户端向该资源提交的参数的可选查询字符串组成。在该URL中,查询字符串以及字符标识,上面的示例中有一个名为uid、值为129的参数。使用的HTTP版本。因特网上常用的HTTP版本为1.0和1.1,多数浏览器默认使用1.1版本。这两个版本的规范之间存在一些差异;然而,当攻击web应用程序时,渗透测试员可能遇到的唯一差异是1.1版本必须使用host请求头。
2、Accept请求头:浏览器支持的MIME类型分别是text/html、application/xhtml+xml、application/xml和*/*,优先顺序是它们从左到右的排列顺序(表示我当前的浏览器希望接受什么类型的文件,这是请求首部,当服务器没有客户端想要的资源的媒体类型时,会返回406 Not Acceptable响应。当然使用了*/*表示愿意接受任意类型的资源,所以应不会看到这个响应。另外,这里的q表示权重,权重在0-1之间,可以理解成客户端在这些给出的类型中,想优先接受什么类型,可以服务器就可以根据客户端的需要返回相应的资源。
如果没有,则默认为1.这里前面几个类型都没有标明,则默认都是1,表示优先这些类型,后面的0.9表示前面都没有就用这个,最后的0.8表示如果都没有,那么任意的类型都行。)
3、Referer消息头:用于表示发出请求的原始URL。注意:在最初的HTTP规范中,这个消息头存在拼写错误,并且这个错误一直保留了下来。
4、User-Agent消息头:提供与浏览器或其他生成请求的客户端软件有关的信息。
5、host消息头:用于指定出现在被访问的完整URL中的主机名称。
6、cookie消息头:用于提交服务器向客户端发布的其他参数。
-
- secure:如果设置这个属性,则仅在HTTPS请求中提交cookie。
- httponly:如果设置这个属性,将无法通过客户端JavaScript直接访问cookie。
7、X_FORWARDED_FOR:是用来标识通过HTTP代理或负载均衡方式连接到web服务器的客户端最原始的IP地址的HTTP请求头字段
二、HTTP请求方法
1、GET方法:GET的作用是获取资源,它可以用于URL查询字符串的形式向所请求的资源发送参数。因此,请勿使用查询字符串传送任何敏感信息。
2、POST方法:主要作用是执行操作。使用这个方法可以在URL查询字符串与消息主体中发送请求参数。POST方法旨在执行操作,如果用户单击浏览器上的“后退”按钮,返回一个使用这种方法访问的页面,那么浏览器不会自动重新发送请求,而是就即将发生的操作向用户发出警告,如图2-1所示,这样做可防止用户无意中多次执行同一个操作。因此,在执行某一操作时必须使用POST请求。
3、HEAD方法,和GET方法一样,只是不返回报文主体部分。用于确认URL的有效性及资源更新的日期时间等。
例:返回index.html有关的响应首部
HEAD /index.html HTTP/1.1
Host:www.php.cn
4、OPTIONS方法:询问支持的方法
OPTIONS方法用来查询针对请求URL指定的资源支持的方法。
OPTIONS * HTTP/1.1
Host:www.php.cn
5、PUT方法:传输文件
PUT方法用来传输文件。像FTP协议的文件上传一样,要求在请求报文主体中包含文件的内容,然后保存到请求URL指定的位置。如果激活这个方法,渗透测试员就可以利用它来攻击应用程序。例如:通过上传任意一段脚本并在服务器上执行该脚本来攻击应用程序。
例:响应返回状态码204 No Content(比如:该html已存在于服务器上)
PUT /example.html HTTP/1.1
Host:www.php.cn
Content-Type: text/html
Content-Length: 1560
6、DELETE方法:删除文件
DELETE方法用来删除文件,是PUT的相反方法。DELETE方法按请求URL删除指定的资源。也不常用。
例:响应返回状态码204 No Content(比如:该html已从该服务器上删除)
DELETE /example.html HTTP/1.1
Host:www.php.cn
三、状态码
每条HTTP相应消息都必须在第一行中包含一个状态码,说明请求的结果。根据代码的第一位数字,可将状态码分为以下5类。
- 1xx 提供信息。
- 2xx 请求被成功提交
- 3xx 客户端被重定向到其他资源
- 4xx 请求包含某种错误
- 5xx 服务器执行请求时遇到错误
还有大量特殊状态码,其中许多状态码仅用在特殊情况下。下面列出渗透测试员在攻击Web应用程序时最有可能遇到的状态码及其相关的原因短语。
- 100Continue:当客户端提交一个包含主体的请求时.将发送这个响应。该响应表示已收到请求消息头.客户端应继续发送主体。请求完成后,再由服务器返回另一个响应。
- 200 Ok:本状态码表示已成功提交请求,且响应主体中包含请求结果。
- 201 Created:PUT请求的响应返回这个状态码,表示请求已成功提交。
- 301 Moved Permanently:本状态码将浏览器永久重定向到另外一个在Location消息头中指定的URL。
- 302 Found:本状态码将浏览器暂时重定向到另外一个在Location消息头中指定的URL。
- 304 Not Modified:本状态码指示浏览器使用缓存中保存的所请求资源的副本。
- 400 Bad Request:本状态码表示客户端提交了一个无效的HTTP请求。
- 401 Unauthorized:服务器在许可请求前要求HTTP进行身份验证。
- 403 Forbidden:本状态码指出,不管是否通过身份验证,禁止任何人访问被请求的资源。
- 404 Not Found:本状态码表示所请求的资源并不存在。
- 405 Method Not Allowed:本状态码表示指定的URL不支持请求中使用的方法。
- 413 Request Entity Too Large:如果在本地代码中探查缓冲器滋出瀚洞并就此提交超长数据串,则本状态码表示请求主体过长,服务器无法处理。
- 414 Request URI Too Long:与前一个响应类似,本状态码表示请求中的URL过长,服务器无法处理。
- 500 Internal Server Error:本状态码表示服务器在执行请求时遇到错误。
- 503 Service Unavailable:通常,本状态码表示尽管Web服务器运转正常.并且能够响应请求,但服务器访问的应用程序还是无法作出响应。