首页 > 技术文章 > 2、渗透学习之Web应用程序技术

qianggediyi 2021-05-26 20:59 原文

一、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服务器运转正常.并且能够响应请求,但服务器访问的应用程序还是无法作出响应。

推荐阅读