host头攻击漏洞

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

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



上面的几种加载路径,背后都是通过 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。

  
    
    196.128.1.101
    196.128.1.102
    196.128.1.103

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

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

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

你可能感兴趣的:(JavaWeb,host攻击)