​docker复现Nginx配置漏洞​

news/2024/7/5 2:25:10

目录

1.docker环境搭建

2.复现过程

2.1CRLF(carriage return/line feed)注入漏洞

​编辑

2.2.目录穿越

 2.3.add_header覆盖


1.docker环境搭建

1.安装docker

Debian系列

apt-get update
apt-get install docker.io

Redhat系列

yum install docker.io

2.下载并解压docker环境Nginx配置漏洞安装包

cd到对应目录下,docker启容器


unzip vulhub-master.zip
cd /root/vulhub-master/nginx/insecure-configuration
docker-compose up -d

这里主要注意两个问题:

没有docker-compose命令,较新版本的docker应该自带compose,没有的可以apt或者yum下载

apt-get install docker-compose

可能会报与官方镜像源连接超时的问题,切换阿里云的docker镜像源就好


sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://t6mxxtn9.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

如果还有其他报错,可以去找docker的官方文档解决

Docker Desktop | Docker Documentation

安装好后,用docker ps -a查看容器运行情况

root@localhost:~/vulhub-master/nginx/insecure-configuration# docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                                                   NAMES
797f6975a01e   vulhub/nginx:1   "nginx -g 'daemon of…"   59 minutes ago   Up 59 minutes   80/tcp, 0.0.0.0:8080-8082->8080-8082/tcp, :::8080-8082->8080-8082/tcp   insecure-configuration_nginx_1

 STATUS为up状态就表示容器正在运行

如果要进入容器,键入docker exec -it 797f6975a01e(这里写你的容器ID) /bin/bash命令

2.复现过程

2.1CRLF(carriage return/line feed)注入漏洞

这个漏洞产生的原因是请求重定向的错误配置,导致在url中输入回车换行符可以控制http响应头部

比如:


location / {
    return 302 https://$host$uri;
}

原本的目的是为了让http的请求跳转到https上

但是$uri参数是不包含查询参数的,于是当我们在url中输入%0d%0a时,$uri参数不会将回车换行符传入,这就导致用户可以控制http响应头部

访问http://ip:8080,使用bp抓包,构造反射性xss

%0d%0a%0d%0a<img src=1 onerror=alert(1)>

修复方法:把$url改为$request-uri,这个参数会传入完整的原始url请求,也就是说用户输入的所有内容都会被当做参数传入Location字段 

 

2.2.目录穿越

这个漏洞产生的原因是alias别名配置错误,导致在url中拼接目录获取敏感数据

location /files {
        alias /home/;
    }

原本的目的是想用户输入/files会跳转到/home目录下,但是/files并没有以"/"结尾,所以我们可以输入/files../,此时/files匹配上了,替换为/home/..,造成目录穿越

 2.3.add_header覆盖

这个漏洞产生的原因是Location子块中又添加了add_header参数,覆盖了父块中的参数,导致失效

add_header Content-Security-Policy "default-src 'self'";
    #这个头部用于配置浏览器加载和执行内容的安全策略。在这里,设置为 "default-src 'self'" 表示只        
    #允许从同源(即当前域名)加载内容,其他来源的内容被禁止加载。
    add_header X-Frame-Options DENY;
    #防止页面被嵌入到 <frame>、<iframe> 或其他框架中。设置为 DENY 表示不允许任何形式的嵌入。
        location = /test1 {
                rewrite ^(.*)$ /xss.html break;
        }
 
    location = /test2 {
        add_header X-Content-Type-Options nosniff;
        #该头部防止浏览器尝试嗅探未知 MIME 类型的响应内容
        rewrite ^(.*)$ /xss.html break;
    }

这个配置本意是想在子块中再添加一个参数,结果覆盖父块,导致父块参数全部失效

bp抓包发现父块添加的参数消失,只有子块里的参数

  修复方法:删除子块中的add_header参数,或者添加到父块中

 


http://lihuaxi.xjx100.cn/news/1436815.html

相关文章

python使用matplot库绘图颜色表

matlpot的color参数可以是十六进制&#xff0c;也可以是颜色描述的字符串。 下面是字符串描述的颜色表。为了颜色间要有区分度。同时要求颜色比较明显&#xff0c;特意选择一些比较有代表性的颜色&#xff0c;以供使用&#xff08;颜色由于个人需要&#xff0c;除去了红色和绿…

Apple AudioToolbox 之 音频编解码(AudioConverterRef)

今天记录是的是 使用 AudioToolbox 框架 使用 AudioConverterRef 工具进行本地音频文件的编码和解码。 本文打仓库代码为&#xff1a; JBLocalAudioFileConvecter 分别实现了&#xff1a; flac,mp3等其他音频编码文件 转换成 pcm文件。 &#xff08;解码&#xff09;pcm文件 …

【React | 前端】在React的前端页面中,判断某个变量值是否被定义?根据是否定义显示不同的内容?

问题描述 在React的前端页面中&#xff0c;判断某个变量值是否被定义&#xff1f;根据是否定义显示不同的内容&#xff1f; 问题场景 假如&#xff0c;现在有一个需求是设计一个新功能&#xff0c;新功能中要求新增一个之前没有的变量&#xff0c;假设是计算某一个数组的长度…

【QT】 QSS样式表设计一文了解

很高兴在雪易的CSDN遇见你 &#xff0c;给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT界面设计中的QSS样式技术&#xff0c;主要从**、**和**方面展开&#xff0c;希望对各位小伙伴有所帮助&#xff01;学会了QSS样式设计&#xff0c;就可以开动你的审美&#…

不同模块之间的service层调用之间的问题

这边有两个模块 1.用户模块 2.订单模块 下面是一些情况说明 模块service层(加了service注解)dao层(应用程序和数据库之间进行交互的数据访问层)service层是否调用dao层完成自动注解用户模块userserviceImpluserdao是订单模块orderserviceImporderdao否 如果用户模块需要调用…

Linux 基础(五)常用命令-文件属性

文件属性 文件权限文件属性修改文件权限属性 文件所有者 文件权限 文件属性 Linux中文件权限 可以通过文件属性体现&#xff1b; 使用 ll 查看文件列表 最前面的 l d 表示文件类型 1 5 表示硬链接数 或者 子文件夹个数 所属用户 所属用户组 文件大小 创建/更新时间 文件&…

Flink多流处理之Broadcast(广播变量)

写过Spark批处理的应该都知道,有一个广播变量broadcast这样的一个算子,可以优化我们计算的过程,有效的提高效率;同样在Flink中也有broadcast,简单来说和Spark中的类似,但是有所区别,首先Spark中的broadcast是静态的数据,而Flink中的broadcast是动态的,也就是源源不断的数据流.在…

3.5 Spring MVC参数传递

Spring MVC的Controller接收请求参数的方式有多种&#xff0c;本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式&#xff0c;同时解决POST请求中文乱码问题。 1. HttpServletRequest参数传递 Controller RequestM…