当前位置:首页 > nginx > nginx-漏洞修复 > 正文内容

nginx host头攻击漏洞

host头攻击漏洞概念

客户端在发起请求时,会发送一个host头给服务器,服务器会根据客户端发送的host识别要请求的页面或者转发的后端服务器,以此返回请求的内容。

有些网站的代码配置为,通过请求的host头拼接路径来形成访问的url,这时候攻击者会发送一个异常的host头,如果服务端没有进行host头识别判断的话,同意了这个请求,攻击者就会通过这个异常的host头拼接路径来制造陷阱,非法劫持网站中的一些信息,以及上传病毒代码或文件,甚至是取得整个网站或者服务器的控制权限,这就是host头攻击。


实验

通过url 301重定向,传递异常的host头来非法获取信息

设置172.25.230.47的18080为访问端口,配置两个域名:app.com和test.com,访问这两个域名分别转发到后端的172.25.230.53:8801及172.25.230.52:8801上

image.png

图片1.png

配置nginx

172.25.230.55

server1

app.com

server {
      listen   18080;
      server_name  app.com;  
   
      location /test1/ {
         return 301 http://app.com:18080/apptest1/test.html;    ##设置url重定向,访问/test1/路径跳转到/apptest1/test.html上
      }
    
      location /apptest1/ {
        proxy_pass http://172.25.230.53:8801;
        proxy_redirect off;
        proxy_set_header  Host  $host:$server_port;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;
      }
}


server2

test.com

server2
test.com
server {
  listen  18080;
  server_name  test.com;
  
  location /test1/ {
    return 301 http://test.com:18080/apptest1/test.html;   ##设置url重定向,访问/test1/路径跳转到/apptest1/test.html上
  }
 
  location /apptest1/ {
    proxy_pass http://172.25.230.52:8801;
    proxy_redirect off;
    proxy_set_header  Host  $host:$server_port;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
  }
}


172.25.230.52

配置静态页面,访问test.com转发到这台8801端口上

##nginx配置
server {
        listen   8801;
        server_name  test.com;
 
        location / {
            root   html;
            index  index.html index.htm index.php;          
        }
}
 
##静态页面配置
]# echo 'this is 172.25.230.52:8801' > /nginx/html/apptest1/test.html


172.25.230.53

配置静态页面,访问app.com转发到这台8801端口上

##nginx配置
server {
        listen   8801;
        server_name  app1.com;
 
        location / {
            root   html;
            index  index.html index.htm index.php;          
        }
}
##静态页面配置
]# echo 'this is 172.25.230.53:8801' > /nginx/html/apptest1/test.html


分别访问app.com和test.com

curl -XGET -L http://app.com:18080/test1/

curl -XGET -L http://test.com:18080/test1/


图片2.png


在访问app.com时传递host头test.com

curl -XGET -L -H'Host:test.com' http://app.com:18080/test1/

发现变成了访问test.com时的内容

202309181695028495709597.png


查看请求响应过程:

图片4.png


url进行了一次跳转,应该是跳转到http://app.com:18080/apptest/test1.html上,后端代理到172.25.230.53:8801上,由于nginx未进行host判断,将test.com识别成了请求的host头,因而返回的是test.com:18080的内容,后端代理到了172.25.230.52:8801上。


解决办法:

添加host头判断

if ($host !~* ^app.com$){
    return 403;
}
  

图片5.png


扫描二维码推送至手机访问。

版权声明:本文由个人博客发布,如需转载请注明出处。

本文链接:https://opszzfwordpress.club/post/193.html

分享给朋友:
返回列表

上一篇:nginx取消文件共享

没有最新的文章了...

“nginx host头攻击漏洞” 的相关文章

nginx取消文件共享

nginx取消文件共享

在nginx中,有一个参数"autoindex",配置这个参数的作用是自动创建索...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。