• nginx解析漏洞,配置不当,目录遍历漏洞环境搭建、漏洞复现


    nginx解析漏洞,配置不当,目录遍历漏洞复现

    1.Ubuntu14.04安装nginx-php5-fpm

    安装了nginx,需要安装以下依赖

    sudo apt-get install libpcre3 libpcre3-dev
    sudo apt-get install zlib1g.dev
    sudo apt-get install libssl-dev
    

    安装php:

    apt-get install php5-fpm
    
    apt-get install nginx
    

    开启Nginx对php的支持,去掉配置文件中关于php的注释并重启Nginx即可

    vim /etc/nginx/sites-available/default
    

    nginx网站目录

    /usr/share/nginx/html
    

    nginx解析php

    nginx无法启动可以查看日记查找解决方法

    vim /var/log/nginx
    

    访问php文件403

    在/etc/php5/fpm/pool.d/www.conf中编辑
    listen = /var/run/php5-fpm.sock为127.0.0.1:9000
    
    在/etg/nginx/sites-available/**.conf中编辑
    fastcgi_pass/var/run/php5-fpm.sock为127.0.0.1:9000
    

    后重启nginx,php5-fpm即可

    重启服务命令
    service php5-fpm restart
    service nginx restart
    

    2.Nginx的文件解析漏洞复现

    如果在访问test.jpg这个文件时以这种去访问/test.jpg/1.php,可能会被当做PHP代码去执行

    用户配置不当造成的解析漏洞。
    我们现在进行不当配置实现解析漏洞

    vim /etc/php5/fpm/php.ini
    修改cgi.fix_pathinfo为1
    

    vim /etc/php5/fpm/pool.d/www.conf
    修改security.limit_extensions允许解析其他格式文件为PHP
    


    解析漏洞成功

    3.Nginx目录遍历漏洞

    vim /etc/nginx/sites-available/default
    

    在location这里加上

    autoindex on;
    

    4.nginx目录穿越漏洞

    Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。

    错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):

    location /files {
        alias /home/;
    }
    


    遇到的坑

    5.Docker为什么刚运行就退出了

    docker run -d -p 80:80 ubuntu
    

    运行了一个简单的容器后,然后docker ps -a 进行查看, 会发现容器已经退出

    很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
    容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的
    这个是docker的机制问题,比如你的web容器,我们以nginx和fpm为例,
    正常情况下,我们配置启动服务只需要启动响应的service即可,例如

    service nginx start && service php5-fpm start
    

    但是,这样做,nginx和fpm均为后台进程模式运行,就导致docker前台没有运行的应用,
    这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了.

    解决方法:
    1.最佳的解决方案是,将你要运行的程序以前台进程的形式运行,当然,如果你的容器需要同时启动多个进程,
    那么也只需要,或者说只能将其中一个挂起到前台即可.
    比如上面所说的web容器,我们只需要将启动指令修改为:

    service php5-fpm start && nginx -g "daemon off;"
    

    这样,fpm会在容器中以后台进程的方式运行,而nginx则挂起进程至前台运行,这样,就可以保持容器不会认为没事可做而自杀了.

    2.对于有一些你可能不知道怎么前台运行的程序,提供一个投机方案,你只需要在你启动的命令之后,
    添加类似于 tail top 这种可以前台运行的程序,这里特别推荐 tail ,然后持续输出你的log文件.
    还是以上文的web容器为例,我们还可以写成:

    service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
    

    把这条命令加到start.sh实现自启

    参考链接
    https://www.jianshu.com/p/13d5912a6417
    https://blog.csdn.net/qq_32434307/article/details/79480036
    https://blog.csdn.net/wang_quan_li/article/details/48003811
    https://vulhub.org/#/environments/nginx/nginx_parsing_vulnerability/

  • 相关阅读:
    MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别
    教你如何快速使用Github
    NET开发者部署React-Native
    分层架构
    微内核架构(Microkernel Architecture)
    ABP-N层架构
    MVC 应用免受 CSRF攻击
    Redis时延问题
    JS call与apply
    jQuery插件编写
  • 原文地址:https://www.cnblogs.com/hackxf/p/10051732.html
Copyright © 2020-2023  润新知