nginx的基本配置以及相关漏洞
(依旧是前段时间的笔记)
 
安装 http://nginx.org/en/download.html 
下载Nginx
找到conf/nginx.conf
1 2 3 4 5 6 7 8 location ~ \.php$ {             root           D:/phpstudy_pro/WWW;# 网站目录             fastcgi_pass   127.0.0.1:9000;#php-cgi监听端口号             fastcgi_index  index.php;             fastcgi_param  SCRIPT_FILENAME  D:/phpstudy_pro/WWW$fastcgi_script_name;             include        fastcgi_params;         } 
 
在配置下php
找到php.ini
extension_dir修改为php的ext目录
1 extension_dir="D:\phpstudy_pro\Extensions\php\php5.6.9nts\ext" 
 
使用php-cgi.exe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Usage: php  [-q ] [-h ] [-s ] [-v ] [-i ] [-f  <file >]        php  <file > [args ...]   -a                Run  interactively    -b  <address:port >|<port > Bind  Path  for  external  FASTCGI  Server  mode    -C                Do  not  chdir  to  the  script 's  directory    -c  <path >|<file > Look  for  php.ini  file  in  this  directory    -n                No  php.ini  file  will  be  used    -d  foo [=bar ]     Define  INI  entry  foo  with  value  'bar '   -e                Generate  extended  information  for  debugger /profiler    -f  <file >        Parse  <file >.  Implies  `-q '   -h                This  help    -i                PHP  information    -l                Syntax  check  only  (lint )   -m                Show  compiled  in  modules    -q                Quiet -mode .  Suppress  HTTP  Header  output .   -s                Display  colour  syntax  highlighted  source .   -v                Version  number    -w                Display  source  with  stripped  comments  and  whitespace .   -z  <file >        Load  Zend  extension  <file >.   -T  <count >       Measure  execution  time  of  script  repeated  <count > times .    php -cgi.exe  -b  127.0.0.1:9000 -c  php.ini 
 
运行php-cgi
使用nginx.exe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 nginx version: nginx/1 .17 .6  Usage: nginx  [-?hvVtTq ] [-s  signal ] [-c  filename ] [-p  prefix ] [-g  directives ] Options :  -?,-h          : this  help    -v             : show  version  and  exit    -V             : show  version  and  configure  options  then  exit    -t             : test  configuration  and  exit    -T             : test  configuration , dump  it  and  exit    -q             : suppress  non -error  messages  during  configuration  testing    -s  signal      : send  signal  to  a  master  process : stop , quit , reopen , reload    -p  prefix      : set  prefix  path  (default : NONE )   -c  filename    : set  configuration  file  (default : conf /nginx.conf )   -g  directives  : set  global  directives  out  of  configuration  file  
 
默认下使用conf/nginx.conf的配置信息
接下来访问http://localhost 
写一个hello world
至此环境搭建完毕
配置 配置文件结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...              #全局块 events {         #events块    ... } http      #http块 {     ...   #http全局块     server        #server块     {          ...       #server全局块         location [PATTERN]   #location块         {             ...         }         location [PATTERN]          {             ...         }     }     server     {       ...     }     ...     #http全局块 } 
 
更改配置文件后可使用
 
测试配置文件是否可用
1 2 3 D:\phpstudy_pro\Extensions\nginx-1.17.6>nginx.exe -t nginx: the configuration file D:\phpstudy_pro\Extensions\nginx-1.17.6/conf/nginx.conf syntax is ok nginx: configuration file D:\phpstudy_pro\Extensions\nginx-1.17.6/conf/nginx.conf test is successful 
 
开放不同端口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 events  {     worker_connections   1024 ;  } http  {     server  {          listen        80 ;          server_name   localhost;          location  /  {              root    html;              index   index.html  index.htm;          }      }      server  {          listen        81 ;          server_name   localhost;          location  /  {              root    html;              index   index.html  index.htm;          }               }  } 
 
PS:events 必须要有,这里的worker_connections表示最大连接数
使用不同域名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 http {     server {     listen       80;     server_name  noel.cn;     root           D:\phpstudy_pro\WWW\seay;# 网站目录     location / {         index  index.html,index.htm,index.php;     }     }     server {         listen       80;         server_name  noel.com;         root   D:\phpstudy_pro\WWW;# 网站目录         location / {             index index.html,index.htm,index.php;         }     } } 
 
PS:本地需要修改hosts文件
也可以新建一个sites-enabled目录,在文件夹下新建nginx-com.conf
1 2 3 4 5 6 7 8 9 10 11 server {     listen       80;     server_name  noel.com;     root   D:\phpstudy_pro\WWW;# 网站目录     location / {         index index.html,index.htm,index.php;     } } 
 
nginx-cn.conf
1 2 3 4 5 6 7 8 9 server {     listen       80;     server_name  noel.cn;     root           D:\phpstudy_pro\WWW\seay;# 网站目录     location / {         index  index.html,index.htm,index.php;     } } 
 
此时的nginx.conf
1 2 3 4 5 6 7 8 events {     worker_connections  1024; } http {     include sites-enabled/nginx-*.conf; } 
 
alias 
This directive assigns a path to be used for the indicated location.
 
给指定的目录分配一个URL路径
在nginx-cn.conf文件的server中添加如下内容
1 2 3 location /html/ {     alias D:/phpstudy_pro/Extensions/nginx-1.17.6/html/; } 
 
这时候我们访问的http://noel.cn/html/index.html中的index.html就是alias指定目录下的文件 
404 在nginx.conf的http模块中加入
1 2 error_page 404 https://www.baidu.com; #错误页 proxy_intercept_errors on;#如果被代理服务器返回的状态码为400或者大于400,设置的error_page配置起作用。默认为off。 
 
意为将404页面跳转至百度
漏洞 目录遍历 在nginx.conf的http模块中加入
 
目录穿越 前面我们有配置过alias,当alias时出现错误就可导致这一漏洞
这次在nginx-com.conf文件的server中添加如下内容
1 2 3 location /html {     alias D:/phpstudy_pro/Extensions/nginx-1.17.6/html/; } 
 
对比上面的配置,我们只是在html后没加/,这也就导致了目录穿越,不过只能穿越至上层目录,配合目录遍历可以看到文件内容
http://noel.com/html../ 
思考:如果能确认存在该漏洞但不存在目录遍历是否能通过爆破利用
解析漏洞 问题出在cgi上
当php.ini中cgi.fix_pathinfo值设置为1(默认不开启)
之后在上传一个图片马
http://noel.com/seay/test.jpg/.php