安全基础第十二天:nginx相关配置和nginx-host绕过

news2024/11/25 11:43:57

目录

一、nginx的动静分离

1.动静分离的原理

 2.动静分离实验(centos做为放置静态资源的服务器,ubuntu做为请求的web服务器)

(1)在centos的/usr/local/nginx/html下创建一个静态文件static

(2)进入到static创建一个style.css文件,编辑以下内容

(3)进入到nginx的配置文件下

(4)配置nginx.conf文件,配置内容如下

(5)进入到ubuntu的/usr/local/nginx/html,编辑index.html编辑以下内容

(6)分别启动centos和ubuntu的nginx

(7)测试:在物理机的浏览器上访问我们的代理服务器(192.168.191.129),如果字体变红证明成功

 二、nginx的缓存

1.原理

2.实验过程

(1)进入到我们的/usr/local/nginx/conf/下

(2)编辑我们的nginx.conf文件,内容如下

(3)进入到html下创建一个huancun文件夹

(4)启动我们的centos和ubuntu的nginx

(5)测试:访问我们的centos(192.168.191.129)查看头部,我们发现cache-status:hit证明已缓存

(6)当上述完成后在我们的的服务器查看我们缓存的文件内容

 三、缓存投毒(2022年机场的缓存投毒漏洞靶场)

1.原理

2.漏洞复现

(1)在/usr/local/下创建一个v2board文件夹

(2)进入到v2board后,编辑一个docker-compose.yml文件,内容如下

(3)编辑entrypoint.sh,内容如下

(4)运行该环境

(5)查看docker环境是否起来

(6)在浏览器输入192.168.191.128:9090,进入到我们搭建的环境

(7)注册

(8)进入到我们的docker的mysql查看我们注册的数据

(9)查看到我们注册的用户数据

(10)用自己注册的用户进行登陆

(11)打开burpsuit抓取我们的登陆页面信息

(12)修改我们的头部信息,以及我们登陆信息,为了让我们服务器授权保存redis缓存

(13)结果如下

(14)检查我们的redis是否存储我们的用户信息,如果有证明我们成功获取到了后台的管理

(5)我们访问http://192.168.191.128:9090/api/v1/admin/user/fetch,成功获取到了管理的api


一、nginx的动静分离

注意: 本实验是基础反向代理基础上配置

1.动静分离的原理

当我们去访问www.baidu.com,我们的百度的web服务器会进行处理,当用户人数比较多的时候我们的请求会很多,就会造成我们的web服务器压力过大,导致性服务器超负荷运动,这些请求大部分是静态文件,一般在我们的resources/static/下,我们可以利用动静分离来缓解我们web服务器的压力,在我们的web服务器上放置我们的访问页面,在我们的代理服务器上放置我们的静态文件,通过访问我们的代理我们的服务器,就会将其转发请求我们的web服务器,请求页面资源,web服务器访问我们代理服务器上的静态资源,就完成我们的动静分离。

 2.动静分离实验(centos做为放置静态资源的服务器,ubuntu做为请求的web服务器)

(1)在centos的/usr/local/nginx/html下创建一个静态文件static

cd /usr/local/nginx/html/

mkdir static

 

(2)进入到static创建一个style.css文件,编辑以下内容

cd static

vim style.css

 p {color:red}

(3)进入到nginx的配置文件下

cd  ../../conf

(4)配置nginx.conf文件,配置内容如下

location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
    root   html/static;
    expires 7d;
}

(5)进入到ubuntu的/usr/local/nginx/html,编辑index.html编辑以下内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <p>ubuntu 192.168.191.128</p>
</body>
</html>

 

(6)分别启动centos和ubuntu的nginx

(7)测试:在物理机的浏览器上访问我们的代理服务器(192.168.191.129),如果字体变红证明成功

 二、nginx的缓存

1.原理

当我们访问某个服务器资源的时候,我们需要请求一段时间,服务器才会给我们响应,利用缓存机制,不仅可以缓解我们的服务器的压力,还可以加快我们对页面资源的快速获取,当我们第一次访问某个页面的时候,我么利用缓存机制将我们的页面资源缓存到本地,当我们第二次访问我们的页面的时候,我们会先访问我们的本地资源。

2.实验过程

(1)进入到我们的/usr/local/nginx/conf/下

cd /usr/local/nginx/conf/

 

(2)编辑我们的nginx.conf文件,内容如下

    proxy_cache_path /usr/local/nginx/html/huancun levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;

# 使用名为nginx_cache的缓存空间
            proxy_cache hot_cache;
            # 对于200、206、304、301、302状态码的数据缓存1天
            proxy_cache_valid 200 206 304 301 302 1d;
            # 对于其他状态的数据缓存30分钟
            proxy_cache_valid any 30m;
            # 定义生成缓存键的规则(请求的url+参数作为key)
            proxy_cache_key $host$uri$is_args$args;
            # 资源至少被重复访问三次后再加入缓存
            proxy_cache_min_uses 3;
            # 出现重复请求时,只让一个去后端读数据,其他的从缓存中读取
            proxy_cache_lock on;
            # 上面的锁超时时间为3s,超过3s未获取数据,其他请求直接去后端
            proxy_cache_lock_timeout 3s;
            # 对于请求参数或cookie中声明了不缓存的数据,不再加入缓存
            proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
            # 在响应头中添加一个缓存是否命中的状态(便于调试)
            add_header Cache-status $upstream_cache_status;

(3)进入到html下创建一个huancun文件夹

cd ../html

mkdir huancun

 

(4)启动我们的centos和ubuntu的nginx

(5)测试:访问我们的centos(192.168.191.129)查看头部,我们发现cache-status:hit证明已缓存

(6)当上述完成后在我们的的服务器查看我们缓存的文件内容

cd /usr/local/nginx/html/huancun/

ls -al

 三、缓存投毒(2022年机场的缓存投毒漏洞靶场)

1.原理

在后台就建全了一个api接口,我们先注册一个普通的用户,我们这个普通用户的身份存储到了我们的redis中,之后我们将这个认证信息的普通用户接口拿出来,之后我们利用这个认证信息去链接我们后台管理系统,之所以我们能进入到后台,是因为我们的redis是按照后端的认证信息进行建全的,当我们去访问它的时候他是按照是否有这个认证信息,并不去检查他是不是管理员,之后他就为我们的普通用户开放管理后台,从而导致的漏洞。

2.漏洞复现

该复现漏洞环境是在ubuntu上搭建的

(1)在/usr/local/下创建一个v2board文件夹

cd /usr/local/

mkdir v2board

 

(2)进入到v2board后,编辑一个docker-compose.yml文件,内容如下

version: '2'
services:
  web:
    image: vulhub/v2board:1.6.1
    ports:
     - "9090:80"
    depends_on:
     - db
     - redis
    entrypoint:
     - bash
     - /entrypoint.sh
    volumes:
     - ./entrypoint.sh:/entrypoint.sh
    command: apache2-foreground
  db:
   image: mysql:5.7
   environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=v2board
  redis:
   image: redis:7-alpine

 

(3)编辑entrypoint.sh,内容如下

#!/bin/bash
set -ex

wait-for-it db:3306 -t 300 -- echo "database is connected"
if [[ ! -e ".env" ]]; then
    echo -e "db\nv2board\nroot\nroot\nadmin@example.com\nexample123" | php artisan v2board:install
    sed -i 's/REDIS_HOST=.*/REDIS_HOST=redis/g' .env
fi

chown www-data:www-data -R /var/www/html
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
        set -- apache2-foreground "$@"
fi

exec "$@"

(4)运行该环境

docker-compose up -d

(5)查看docker环境是否起来

docker ps -a

(6)在浏览器输入192.168.191.128:9090,进入到我们搭建的环境

(7)注册

(8)进入到我们的docker的mysql查看我们注册的数据

docker exec -it abb37671d3a3 /bin/bash

mysql -uroot -proot

show databases;

use v2board;

show tables;

select * from v2_user \G

 

(9)查看到我们注册的用户数据

(10)用自己注册的用户进行登陆

curl -i -s -k -XPOST --data-binary "email=test%40qq.com&password=a123123123" http://localhost:9090/api/v1/passport/auth/login

(11)打开burpsuit抓取我们的登陆页面信息

(12)修改我们的头部信息,以及我们登陆信息,为了让我们服务器授权保存redis缓存

(13)结果如下

 

(14)检查我们的redis是否存储我们的用户信息,如果有证明我们成功获取到了后台的管理

docker exec -it 188ca92883cd /bin/sh

redis-cli

select 1

keys *

(5)我们访问http://192.168.191.128:9090/api/v1/admin/user/fetch,成功获取到了管理的api

 四、总结

第三部分的内容可以结合缓存投毒进行描述

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

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

相关文章

目标检测概述

传统目标检测 任务目标 从图像中找出相应的物体位置 目标检测的核心目的在于&#xff0c;估计出目标在图像中的坐标。 问题定义 目标检测的结果是什么&#xff1f; 预测出目标在图像中的位置。 位置如何表示&#xff1f; 通常采用水平矩形框的形式估计目标。 在opencv中…

为什么Java要求多用组合,少用继承?

前言&#xff1a; 最近有一个要好的朋友去阿里大厂面试Java高级工程师&#xff0c;在第二轮面试的过程中&#xff0c;面试官提了一个问题&#xff1a;“解释下Java项目中为什么要求多用组合&#xff0c;少用继承&#xff1f;”。朋友觉得这个题目既熟悉&#xff0c;又陌生&…

【LeetCode】504. 七进制数

504. 七进制数&#xff08;简单&#xff09; 方法一&#xff1a;七进制数预处理 思路 这里我利用了提示&#xff0c;得知 |num| < 10^7 &#xff0c;因此所使用到的七进制数肯定也小于等于 107 &#xff0c;我将 7 的次方数算出来&#xff0c;预存在数组 seven 中。 后续…

ADUC834BSZ-ASEMI代理亚德诺ADUC834BSZ原厂芯片

编辑-Z ADUC834BSZ特征&#xff1a; 2个独立ADC&#xff08;16位和24位分辨率&#xff09; 24位无缺失代码&#xff0c;主ADC 21位rms&#xff08;18.5位p-p&#xff09;有效分辨率20 Hz 偏移漂移10 nV/C&#xff0c;增益漂移0.5 ppm/C 62 KB片上闪存/EE程序存储器 4 KB…

C++(Qt)读取.mat文件(可以读取多级变量)

全网最全&#xff0c;从安装环境和配置环境变量&#xff08;配置环境变量是大坑&#xff09;&#xff0c;然后再到需要的SDK库&#xff0c;再到代码详细解读。 首先就是需要安装matlab&#xff0c;注意&#xff1a;你使用的编译器版本需要和MATLAB版本相互兼容&#xff01;&am…

使用模板构建泛型栈

目录 一.构造栈 使用构造函数 代码&#xff1a; 二.销毁栈 使用析构函数 代码 三.判空&#xff0c;判满 四.扩容 代码 五.入栈&#xff0c;出栈 代码 六.取栈顶元素 代码 代码合集 template< class T>模板 T为当前栈的数据类型 栈类型有三个属性&#x…

Linux:概述 、安装 、文件与目录结构 、vim编辑器 、网络配置 、远程登录 、系统管理 、基础命令 、软件包管理 、克隆虚拟机 、shell编程

1、课程介绍 2、Linux概述(入门篇) 2.1、Linux的诞生 2.1.1、Linux是什么? Linux是一个操作系统&#xff08;OS&#xff09; 所谓的操作系统就是直接用来操作计算机底层硬件的软件。 2.1.2、Linux的出现 2.2、Linux和Unix的渊源 2.3、GNU/Linux 2.4、Linux VS Windows 3、…

机器学习期末复习 决策树ID3的计算与构建

ID3构建的流程就是参考书上的那个伪代码。 1&#xff09; 开始&#xff1a;构建根节点&#xff0c;将所有训练数据都放在根节点&#xff0c;选择一个最优特征&#xff0c;按着这一特征将训练数据集分割成子集&#xff0c;使得各个子集有一个在当前条件下最好的分类。 2&#xf…

愿力,心力,能力

愿力&#xff0c;心力&#xff0c;能力 三力合一成点事 趣讲大白话&#xff1a;人与人的力量差别大 【趣讲信息科技165期】 *************************** 愿力是人文东方智慧 西方大概是mission使命之类 比如佛家发愿 儒家大概类似于立志 心力也是人文东方智慧 西方大概是意志…

51单片机(十七)红外遥控(外部中断)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

基于ssm的汽车服务平台

基于ssm的汽车售后服务平台 快速链接 基于ssm的汽车售后服务平台功能模块技术栈硬件环境功能截图 功能模块 用户 注册功能&#xff1a;用户通过注册功能进行访问平台预约服务功能&#xff1a;用户可以预约服务预约记录查询&#xff1a;用户可以查询自己预约记录也可以进行修改…

AIGPT中文版(人人都能使用的GPT工具)生活工作的好帮手。

AIGPT简介 AIGPT是一款非常强大的人工智能技术的语言处理工具软件&#xff0c;它具有 AI绘画 功能、AI写作、写论文、写代码、哲学探讨、创作等功能&#xff0c;可以说是生活和工作中的好帮手。 我们都知道使用ChatGPT是需要账号以及使用魔法的&#xff0c;其中的每一项对我们…

【框架源码】Spring底层IOC容器加入对象的方式

1.Spring容器加入对象方式简介 使用XML配置文件 在XML配置文件中使用< bean >标签来定义Bean&#xff0c;通过ClassPathXmlApplicationContext等容器来加载并初始化Bean。 使用注解 使用Spring提供的注解&#xff0c;例如Component、Service、Controller、Repository等注…

学习Python的day.14

模块学习 什么是模块&#xff1a; 打开Python解释器&#xff0c;定义了data 1&#xff0c; 然后去访问data是可以访问到的&#xff1b;关闭Python解释器&#xff0c;再打开&#xff0c;再去访问data&#xff0c;访问不到了。 假设我有1000行的代码&#xff0c;在python解释器…

pv操作练习题

信号量解决五个哲学家吃通心面问题 题型一 有五个哲学家围坐在一圆桌旁&#xff0c;桌中央有盘通心面&#xff0c;每人面前有一只空盘于&#xff0c;每两人之间放一把叉子。每个哲学家思考、饥饿、然后吃通心面。为了吃面&#xff0c;每个哲学家必须获得两把叉子&#xff0c;…

【机器视觉1】坐标系定义

坐标系定义 1. 图像坐标系2. 摄像机坐标系3. 世界坐标系4. 三种坐标系间的转换4.1 摄像机坐标系与无畸变图像坐标系之间的变换4.2 世界坐标系与摄像机坐标系之间的变换4.3 世界坐标系与无畸变图像坐标系之间的变换 1. 图像坐标系 数字图像坐标系&#xff1a; O 0 − u v O_0-u…

【差分+操作】C. Helping the Nature

Problem - 1700C - Codeforces 题意&#xff1a; 思路&#xff1a; 一开始手玩了一下 如果不是高低高的形式&#xff0c;那么一定不能通过操作3把全部元素变成0 因此就是先把所有元素变成高低高的形式 但是低在什么地方不确定 因此考虑枚举中间低谷位置&#xff0c;O(1)计…

【多微电网】基于粒子群优化算法的面向配电网的多微电网协调运行与优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

软件测试岗,4轮成功拿下字节 Offer,面试题复盘(附答案)

一共经历了四轮面试&#xff1a;技术4面&#xff0b;HR面。 特整理出所涉及的全部知识点&#xff0c;并复盘了完整面试题及答案&#xff0c;分享给大家&#xff0c;希望能够帮到一些计划面试字节的朋友。 一、测试基础理论类 怎么编写案例?软件测试的两种方法测试结束的标准…

allegro查看板子元器件的pin脚总数

怎么在ALLEGRO里统计焊盘和包括芯片pin和阻容的pad&#xff1f; 板子要拿出去布&#xff0c;需要根据焊盘计费&#xff1f; 方法一&#xff1a; 在find里面只勾选pin&#xff0c;然后鼠标左键&#xff0c;选择全部的pin 再选择菜单Display–element&#xff0c;如下图&#x…