网络攻防之http host字段

网络攻防之http host字段一、host字段用途http1.0是没有host字段的,http1.1在http1.0的基础之上增加了TCP长连接之外,还增加了更多的请求头和响

大家好,欢迎来到IT知识分享网。

一、host字段用途

http1.0是没有host字段的,http1.1在http1.0的基础之上增加了TCP长连接之外,还增加了更多的请求头和响应头来改进和扩充http1.0的功能,其中包括在请求头增加host字段。

试想在一台主机中创建了三台阿虚拟机,三台虚拟机各自运行了独立的网站应用1.com、2.com、3.com,我们都知道一个IP地址是可以对应多个域名的,所以我们可以在DNS服务器上创建三条A记录

1.com 指向1.1.1.1

2.com 指向1.1.1.1

3.com 指向1.1.1.1

三个域名都使用同一个公网IP(1.1.1.1)对外提供服务.

当用户浏览器访问1.com的时候,通过DNS解析,最终源站能看到的不是域名,而是1.1.1.1,那么问题来了,源站怎么知道用户访问的具体是这个主机里边的哪个应用呢?

网络攻防之http host字段

http1.1引入host概念,可以通过host来区分用户访问的是虚拟机上的哪个站点。

网络攻防之http host字段

有人会问一个问题:这种方法跟我使用IP+端口的方式指定应用有什么区别?比如通过配置1.1.1.1:80访问1.com,1.1.1.1:81访问2.com,1.1.1.1:82访问3.com,同样可以实现上述功能。

不同之处在于——通过host指定应用,你可以用相同的IP+端口访问不同的应用,即1.com、2.com、3.com都使用1.1.1.1:80这个IP和端口,这就给虚拟机部署多个应用提供了极大扩展空间,比如我还可以继续部署4.com、5.com等,而不必担心端口问题。

二、host字段小结

1.host字段可以是域名,也可以是ip地址。host字段域名/ip后可以跟端口号,如host: www.1.com:80

2.host可以由程序自定义,某些程序为了防止运营商或防火墙拦截会定义虚假host,因为http头中的host字段可以由程序自定义,所以host字段的值就会有很多特殊情况,如包含多个’/’字符的HOST头信息,结尾含有”.”等。

3.http1.1中host字段可以是空值,但是不能缺失host字段,如果缺失,服务器返回400 bad request,http1.0中可以缺失host字段

4.http响应头(response header)中不包含host字段,所以wireshark中http host过滤到的都是请求包

5. host字段和referer有何区别?

host字段定义的是源站的服务,refer定义的是访问来源

三、host攻击方式

为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个Host字段值是不可信赖的(可通过HTTP代理工具篡改),如果应用程序没有对Host字段值进行处理,就有可能造成恶意代码的传入。

结合这张图,php开发框架下,当主机收到了1.1.1.1这个IP地址,程序员直接使用了_SERVER[“HTTP_HOST”]这个参数,直接代入了host字段的值。具体可以造成什么样的后果呢?可以参考以下这个案例

利用host攻击实现重置密码中毒

 在讲如何进行攻击前,为了把握关键点,先来了解用邮箱进行密码重置的大致流程:

1.用户通过提交注册时使用的邮箱告知服务器进行密码重置;

2.服务器进行匹配确认该用户真实存在后,会生成一个独一无二的令牌,该令牌将会与当前需要重置密码的用户进行绑定;

3.接着服务器将会发送一封确认重置密码请求的邮件到该用户的邮箱,邮件内有一个含有之前生成的令牌的URL;

4.用户点击该URL进行确认;

5.服务器将检查提交的令牌参数,正确无误后将会生成密码重置表单让用户进行密码重置;

了解以上流程后就能发现,令牌充当的是信物的作用,并且密码重置逻辑能够实现的基础为:含有令牌的URL只有重置密码的用户才能获得

在Host存在漏洞的情况下,我们先用自身拥有的账号提交密码重置请求,抓包后修改用户主体为目标用户以及将Host指向受我们控制的域名服务器。这样一来,我们就能直接获得目标用户重置密码需要的令牌。

1、先到重置密码页面输入自己的用户名或账号,点击提交,获得重置密码的正确url格式备用。

网络攻防之http host字段

2、本人邮箱收到密码重置邮件,得到正确的重置密码url格式

网络攻防之http host字段

3、根据抓包获取的信息进行填充,把host字段修改为任意值

网络攻防之http host字段

4、回头检查邮箱,发现仍然可以收到密码重置邮件,说明程序没有对host字段做严格验证

网络攻防之http host字段

5、接下来把需要重置密码的邮箱修改为目标用户carlos,修改host为我们自己控制的服务器域名,这时系统会触发针对目标用户carlos的密码重置,源站服务器会生成一个carlos的密码重置令牌,并与host指定的域名进行交互

网络攻防之http host字段

6、返回我们自己控制的服务器查看访问日志,得到目标用户carlos的令牌token

7、这里有之前重置自己的账号收到的邮件,把红框里边的token替换成目标用户的token,构造出一个全新的url

网络攻防之http host字段

8、点击url弹出新页面,进行密码重置,得到目标用户carlos的访问权限。

网络攻防之http host字段

以上仅仅展示host攻击的一种具体表现形式,其他的攻击方式还有很多,这里所展示的攻击不代表你找一个网站就能轻易复现,毕竟这种攻击方式已经烂大街了,网站运营方不可能连这点基本的防护能力都没有,不过站在理解host攻击的方式角度,这个案例还是有价值的。

四、host攻击防护建议

1.源站配置

Host攻击的防护本质在于要对用户提交的host字段在源站侧做验证。

比如在nginx框架下修改以下配置:

Server{

Listen 8888 default;

Server_name www.abc.com;

Location / {

Return 403

}

}

添加了一个默认server www.abc.com,当host头匹配不到正确的server时就跳转到该默认的server,该server直接返回403错误。

重启nginx。

2. 网宿防护服务

CDN是以host字段携带的域名作为请求域名的,CDN收到用户访问请求后会去验证host携带的域名是否有做配置,如果host字段的内容与CDN域名配置界面的内容不匹配,则该用户无法访问。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/68045.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信