HTTP Responses
当用户发送一个请求时,服务器会返回HTTP 响应。例如,下面的响应可能被返回:
响应的重要的一部分是状态代码;状态代码后是原因,这些信息位于响应的第一行。客户端根据这些信息可以知道如何处理响应。常用的状态代码如下:
(1)200 OK:请求被处理成功
(2)302 Found:用户被重定向,如登录失败发送登录页面给用户
(3)401 Unauthorized:资源访问受限制
(4)404 Not found:客户端请求的资源未找到
(5)500 Internal Server Error:处理请求时错误发生。
一些很少出现的状态如418: I'm a teapot。
在状态代码后,是HTTP头。
HTTP头包含一些信息且影响浏览器如何处理请求和翻译其内容。在上面的响应中,我们可以看到下面的信息:
a、时间
b、server头,提供一些关于远程Web服务器的信息
c、X-Powered-By头,提供更多的信息
d、Content-Length头,告诉浏览器响应的大小
e、Content-Type头,告诉浏览器接下来是什么。这个头会改变浏览器行为;如果头是text/html,浏览器会渲染响应。如果是text/plain,浏览器就不会去渲染。
内容是发送回的信息,它可能是HTML页面,一些图片,其他一切基本的内容。当浏览器检索到HTML页面时,它会解析并自动取出每个响应资源:
JavaScript 文件
CSS文件
图片 ....
HTTPs
HTTPs是HTTP在SSL上的实现。SSL部分保证客户端:
1、客户端可以同正确的服务器会话:认证;
2、通讯是安全的:加密;
很多SSL版本存在问题(如SSLv1和SSLv2)
SSL也可以用于保证客户端的认证。客户端证书可以用于保证只有持有有效证书的人可以连接服务器且发送请求。这是一种限制访问服务的一种方法,且常被用于请求高安全级别系统(支付、敏感Web服务)。然而,部署时需要维护证书和撤销列表。
HTTP流量侦听
存在三种方法侦听HTTP流量:
1、使用工具如Wireshark 或者 tcpdump
2、在浏览器中,大多数浏览器有扩展插件可以使用户查看传输和接受的流量
3、在浏览器和服务器间设置代理
每个方法有各种的优劣势。在后续的分析中可以看出优劣势主要表现在通讯是否使用了SSL和用户是否希望去中断/修改请求信息。
产生HTTP流量
可以以下面的方式产生HTTP流量:
1、因为HTTP是文本协议,可以使用telnet或者netcat工具
2、可以使用编程语言发送HTTP流量。编程语言可以从socket中写或者读取信息,以及同服务进行交互。甚至,大多数语言有HTTP库可以使程序猿较容易的建立和发送请求,且获得相应的响应。
3、最后,使用浏览器产生HTTP请求
显然使用浏览器访问网站是最简单的方法。但是,其他的方法可以更好的访问细节或者伪造HTTP请求。
使用telnet 或者netcat可以快速的发送HTTP请求:
$telnet vulnerable 80
GET /HTTP /1.1
Host:vulnerable
[...]
也可以使用netcat:
$echo "GET /HTTP /1.1 \r\n Host:vulnerable \r\n\r\n" | nc vulnerable 80
[...]