概述
网络攻防之http host字段
第一章 host字段用途
第二章 host字段小结
第三章 host攻击方式
第四章 host攻击防护建议
一、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,那么问题来了,源站怎么知道用户访问的具体是这个主机里边的哪个应用呢?
http1.1引入host概念,可以通过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格式备用。
2、本人邮箱收到密码重置邮件,得到正确的重置密码url格式
3、根据抓包获取的信息进行填充,把host字段修改为任意值
4、回头检查邮箱,发现仍然可以收到密码重置邮件,说明程序没有对host字段做严格验证
5、接下来把需要重置密码的邮箱修改为目标用户carlos,修改host为我们自己控制的服务器域名,这时系统会触发针对目标用户carlos的密码重置,源站服务器会生成一个carlos的密码重置令牌,并与host指定的域名进行交互
6、返回我们自己控制的服务器查看访问日志,得到目标用户carlos的令牌token
7、这里有之前重置自己的账号收到的邮件,把红框里边的token替换成目标用户的token,构造出一个全新的url
8、点击url弹出新页面,进行密码重置,得到目标用户carlos的访问权限。
以上仅仅展示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://blog.csdn.net/angry_program/article/details/109034421?spm=1001.2014.3001.5502
最后
以上就是还单身砖头为你收集整理的网络攻防之http host字段网络攻防之http host字段一、host字段用途二、host字段小结三、host攻击方式四、host攻击防护建议的全部内容,希望文章能够帮你解决网络攻防之http host字段网络攻防之http host字段一、host字段用途二、host字段小结三、host攻击方式四、host攻击防护建议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复