我是靠谱客的博主 鲤鱼汉堡,最近开发中收集的这篇文章主要介绍host头攻击漏洞,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一个服务器上跑多个程序是非常常见的现象。

但是这样做后会有一个问题,那就是容易造成 Host 头攻击。host 头(host header或称主机头)攻击,非常常见。比如,在 jsp 中,我们通常可能存在类似下面的代码。

<script type="text/javascript" src="<%=path=%>/js/zcms/zDrag.js"></script>
<script src="<%=request.getContextPath()=%>/manage/test.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/mkip/moon.js"></script>

上面的几种加载路径,背后都是通过 host 取得 url 地址,再拼接上固定的内容。

这个时候,假如我把你的 host 头给改掉了,比如改成我的 www.xttblog.com。然后这时你在加载的 js 文件,可能就来源于我的网站中已做好陷阱的 js 文件了。

这样,黑客就能拿到你的 cookie、用户名、密码等关键数据。这就是著名的 host 头攻击。

更有甚者,在你的网站上放入病毒,挖矿等代码。而你还不知道你被利用了。

那么该怎么解决这类问题呢?很简单,下面我们以 Nginx 为例,只需要修改一下配置文件即可。Apache 我就不举例了。

server {
	listen 8888 default;
	server_name _;
	location / {
		return 403;
	}
}

添加一个默认 server,当 host 头被修改匹配不到 server 时会跳到该默认 server,该默认 server 直接返回 403 错误。

重启 nginx 即可。

除了这种做法,也可以在目标 server 添加检测规则。比如下面的 if 判断配置。

server {
	server_name 192.168.0.171;
	listen 8888;
	if ($http_Host !~*^192.168.0.171:8888$) {
		return 403;
	}
	include /etc/nginx/default.d/*.conf;
	location / {
		root /www/dvwa;
		index index.php index.html index.htm
	}
}

另外,在 Tomcat 的配置文件,我们也可以直接配置 Host 的 name 为具体的 ip 地址,不要配置 localhost。

<Host name="www.xxx.com"  unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">  
    <Context path="/" reloadable="true" docBase="E:Workspacetest1WebRoot" />
    <Alias>196.128.1.101</Alias>
    <Alias>196.128.1.102</Alias>
    <Alias>196.128.1.103</Alias>
</Host>

说白了,这个漏洞是因为你使用了 Host 而没验证它。

String path = request.getContextPath();
String basePath = request.getScheme() + "://" 
		+ request.getServerName()
		+ ":" + request.getServerPort()
		+ path + "/";

目前,绿盟、burpsuite、360 等工具都可以对这一漏洞进行检测!

最后

以上就是鲤鱼汉堡为你收集整理的host头攻击漏洞的全部内容,希望文章能够帮你解决host头攻击漏洞所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部