负载均衡反向代理下的webshell上传+apache漏洞

news/2024/4/28 14:29:35/文章来源:https://blog.csdn.net/weixin_53284312/article/details/128939682

目录

  • 一、负载均衡反向代理下的webshell上传
    • 1、nginx 负载均衡
    • 2、搭建环境
    • 3、负载均衡下的 WebShell连接的难点总结
      • 难点一、需要在每一台节点的相同位置都上传相同内容的 WebShell
      • 难点二、无法预测下次的请求交给哪台机器去执行。
      • 难点三、下载文件时,可能会出现飘逸,导致下载失败。
      • 难点四、目标机器不能出外网
    • 总结
    • 4、解决方法
      • 方法一、关机/停服
      • 方法二、判断是否执行
      • 方法三、`在Web层做 HTTP 流量转发`
        • 1.创建 antproxy.jsp 脚本
        • 2.修改 Shell 配置, 将 URL 部分填写为 antproxy.jsp 的地址
        • 3. 测试执行命令, 查看 IP
  • 二、apache漏洞
    • 1、Apache HTTPD 换行解析漏洞(环境没搭建成功)

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

1、nginx 负载均衡

负载均衡策略策略
轮询请求顺序逐一分配
权重按照权重大小分配
ip_hash根据客户端IP分配
URL_hash根据URL分配
least_conn根据连接数分配

下来我简单介绍几种负载均衡的策略

  1. 轮询
    轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB…
upstream mysvr { server 192.168.137.131; server 192.168.137.136;       
}

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。
  1. weight
    跟据配置的权重的大小而分发给不同服务器不同数量的请求
upstream mysvr { server 192.168.137.131 weihet = 100; server 192.168.137.136 weihet = 200;
}
  1. ip_hash
    ip_hash:nginx会让相同的客户端ip请求相同的服务器
upstream mysvr { server 192.168.137.131; server 192.168.137.136;ip_hash;
}

2、搭建环境

github下载
在这里插入图片描述

cd /ant/loadbalance/loadbalance-jsp
docker-compose up  -d

这里我搭建环境的时候出了点问题,不知道为什么dockers-compose up -d 执行不了, 然后我我把docker-compose 删了重新安装发现还是不行,然后我恢复快照重新搭建环境,最后解决办法是卸载docker 重新安装docker和docker-compose。

cd /usr/local/bin/
#下载docker-compose
wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64
#重命名
rename docker-compose-Linux-x86_64 docker-compose docker-compose-Linux-x86_64
#给执行权限
chmod +x /usr/local/bin/docker-compose

上述下载方式有问题,由于compose更新了,Docker Compose V2 是 Docker Compose 的主要版本碰撞版本。它在Golang中完全重写了(V1是用Python编写的)。撰写 V2 的安装说明与 V1 不同。V2 不再是独立的二进制文件,必须调整安装脚本。

#在 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

在这里插入图片描述
在这里插入图片描述

环境搭建完成,现在我们的整体框架如下图
nginx 反向代理到两台内网服务器上,Node1 和 Node2 均是 tomcat 8 ,在内网中开放了 8080 端口,他们两个之间可以互相通信,我们在外部是没法直接访问到的。
在这里插入图片描述
然后我们进入docker-nginx 查看一下nginx 配置。
做了轮询的负载均衡策略。
在这里插入图片描述
假定在真实的业务系统上,存在一个 RCE 漏洞,可以让我们获取 WebShell。
我们上传了我们的一句话木马。
尝试用蚁剑登录
在这里插入图片描述
成功连接目标,因为两台节点都在相同的位置存在 ant.jsp,所以连接的时候也没出现什么异常。

3、负载均衡下的 WebShell连接的难点总结

难点一、需要在每一台节点的相同位置都上传相同内容的 WebShell

假如说node1上有ant.jsp,node2上没有,这就会出现一会连接失败,一会连接正常的问题
我们进入node2删除ant.jsp
在这里插入图片描述
一旦有一台机器上没有,那么在请求轮到这台机器上的时候,就会出现 404 错误,影响使用。还好负载均衡的策略是轮询,还存在一定的规律,如果是其他策略,更难以把控。
在这里插入图片描述

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

在这里插入图片描述
由于难点一测试时删除了 node2的ant.jsp,我们重新copy一下
docker cp ant.jsp 46c0af8b0ca3:/usr/local/tomcat/webapps/ROOT/ant.jsp
由于nginx服务器上配置了 轮询负载均衡,所以我们无法下次的请求交给哪台机器去执行,有点飘忽不定。
在这里插入图片描述

难点三、下载文件时,可能会出现飘逸,导致下载失败。

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

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

目标机器不能出外网,要想深入,只能使用 reGeorg/HTTPAbs 等 HTTP Tunnel,但隧道随时可能断开连接,tunnel 脚本全部都会失效。
1、reGeorg内网渗透工具
eGeorg可以称为内网代理。实际上,它可以起到代理的作用
在这里插入图片描述
模拟上图的场景
主机A、主机B、攻击者
假如主机A上运行了Web服务,且IP或者端口映射到公网,可以被外部人员访问,主机B是在外网访问不到的。攻击者通过漏洞在主机A上传了Webshell,但同时又出于某些限制并未能得到主机A的主机权限也无法反弹shell,那么他这个时候,也是无法通过常规方法反弹shell或者直接登录主机A从而访问到主机B的。

ReGeorg就在这个时候起了作用,攻击者已经有了主机A的webshell权限(即可以在web服务器中上传文件),而主机A可以和主机B通信。那么在主机A上安装reGeorg工具,使得攻击者发出的请求以及目标机器的响应经过A的http转发,达到攻击者可以和主机B进行通信的效果。
2、ab(http)与abs(https)压测工具
ab全称为:apache bench
ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求。

总结

看似四个难点,归根结底是由于nginx,上配置了负载均衡的问题,我们无法预测,管控下一次请求在那台服务器上,所以导致了这一系列问题,下面我们介绍一些解决办法。

4、解决方法

方法一、关机/停服

关掉其中一台机器,这种行为最不推荐,但如果你不在乎关掉服务器的损失当我没说。这种方法影响业务,不建议尝试,测试除外。

方法二、判断是否执行

既然无法预测下一次是哪台机器去执行,我们可以在Shell 执行 Payload 之前,判断要不要执行。
创建shell 脚本
在这里插入图片描述
蚁剑不知道出现莫名的问题
在这里插入图片描述

方法三、在Web层做 HTTP 流量转发

我们用 AntSword 没法直接访问 LBSNode1 内网IP(172.23.0.2)的 18080 端口,但是有人能访问呀,除了 nginx 能访问之外,LBSNode2 这台机器也是可以访问 Node1 这台机器的 18080 端口
在这里插入图片描述
我们的目的是:所有的数据包都能发给「LBSNode 1」这台机器。
如上图所示,我们可以在node2上做数据转发,整合数据后转发给node1
首先:我们通过nginx,直接访问node1,
其次:我们把请求发给Node2,Node2 上面的 /antproxy.jsp 把请求重组之后,传给了 Node1 的 /ant.jsp,成功执行。

1.创建 antproxy.jsp 脚本

修改数据转发的目标地址
在这里插入图片描述
注意
不要使用上传功能,上传功能会分片上传,导致分散在不同 Node 上。
要保证每一台 Node 上都有相同路径的 antproxy.jsp,保证每一台都上传了脚本

2.修改 Shell 配置, 将 URL 部分填写为 antproxy.jsp 的地址

在这里插入图片描述
在这里插入图片描述
第一次改成172.18.0.2:18080,出现蚁剑连接不上的问题,然后改成172.18.0.2:8080,就可以连接成功。
在这里插入图片描述

3. 测试执行命令, 查看 IP

在这里插入图片描述
这个方法有个缺点,需要「目标 Node1」和「其它 Node2」 之间内网互通,如果不互通,就无法解决问题。

二、apache漏洞

1、Apache HTTPD 换行解析漏洞(环境没搭建成功)

Apache HTTPD 换行解析漏洞(CVE-2017-15715)
影响版本:2.4.0~2.4.29
影响说明:Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

在这里插入图片描述
在1.php后面插入一个\x0A,php会解析成1.php%0a,从而成功解析
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【3】深度学习之Pytorch——如何使用张量处理表格数据集(葡萄酒数据集)

张量是PyTorch中数据的基础。神经网络将张量输入并产生张量作为输出,实际上,神经网络内部和优化期间的所有操作都是张量之间的操作,而神经网络中的所有参数(例如权重和偏差)也都是张量。 怎样获取一条数据、一段视频或…

Springboot + RabbitMq 消息队列

前言 一、RabbitMq简介 1、RabbitMq场景应用,RabbitMq特点 场景应用 以订单系统为例,用户下单之后的业务逻辑可能包括:生成订单、扣减库存、使用优惠券、增加积分、通知商家用户下单、发短信通知等等。在业务发展初期这些逻辑可能放在一起…

openGL学习之GLFW和GLAD的下载和编译

背景:为什么使用GLFW和GLADOPenGL环境 目前主流的桌面平台是GLFW和GLAD之前使用的GLUT和Free GLUT已经基本淘汰了,所以记录一下如何下载GLFW和GLAD并且编译.GLFW下载:An OpenGL library | GLFW复制到你想存放的位置,我这里就存放到C盘Libaray文件夹下了,这里是我存放…

中国区注册使用ChatGPT指南(OpenAI‘s services are not available in your country)

ChatGPT又火了,各大平台热搜提到手软。暴增的访问量,即使强如ChatGPT,也表示顶不住了。Openai表示服务器已满负荷,ChatGPT暂无法提供服务由于目前ChatGPT未在中国开放,所以国内目前是无法注册使用ChatGPT。但我经过一番…

『 MySQL篇 』:MySQL表的聚合与联合查询

基础篇 MySQL系列专栏(持续更新中 …)1『 MySQL篇 』:库操作、数据类型2『 MySQL篇 』:MySQL表的CURD操作3『 MySQL篇 』:MySQL表的相关约束4『 MySQL篇 』:MySQL表的聚合与联合查询目录一. 聚合查询1.1 聚合函数1.2 GROUP BY子句…

Python将字典转换为csv

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理…

MySQL篇02-三大范式,多表查询

数据入库时,由于数据设计不合理,会存在数据重复、更新插入异常等情况, 故数据库中表的设计遵循的设计规范:三大范式1.第一范式(1NF)要求数据库的每一列都是不可分割的原子数据项,即原子性。强调的是列的原子性,即数据库中每一列的…

攀升MaxBook P2电脑U盘重装系统方法教学

攀升MaxBook P2电脑U盘重装系统方法教学。攀升MaxBook P2电脑是一款性价比非常高的笔记本。有用户购买了这款电脑后,想要将系统进行重装。今天和大家分享一个U盘重装系统的方法,学会这个方法后以后就可以自己轻松去重装电脑系统了。接下来一起看看具体的…

相机坐标系的正向投影和反向投影

1 、正向投影: 世界坐标系到像素坐标系 世界3D坐标系(x, y, z) 到图像像素坐标(u,v)的映射过程 (1)世界坐标系到相机坐标系的映射。 两个坐标系的转换比较简单,就是旋转矩阵 平移矩阵,旋转矩阵则是绕X, Y&#xff…

Thread 类及常见方法

Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的 Thread 对象与之关联。用我们上面的例子来看,每个执行流,也需要有一个对象来描述,类似下图所示,而 Thread 类的对象就是用来描述一…

分享111个JS焦点图代码,总有一款适合您

分享111个JS焦点图代码,总有一款适合您 111个JS焦点图代码下载链接:https://pan.baidu.com/s/1GxjW5m9DNOPEQd-Qf_gGSA?pwd4aci 提取码:4aci Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj jQuery宽屏左右…

没有人能比我快,用Python写一个自动填写答案的脚本

前言 不是标题党,真的就是没有人比我快,今天用Python写了个自动填写答案的脚本,快就算了,准确率还是百分之百 话不多说 咱先看代码 后看效果 不想看全文的 点击文末名片 领取源码 环境使用 Python 3.8Pycharm 模块使用 imp…

Request Method: OPTIONS

节选自https://blog.csdn.net/Amnesiac666/article/details/121105088版权归原作者所有,如有侵权请联系删除Request Method: OPTIONS一些接口在请求时,会自动发送一个的请求,我查了一遍代码,不是代码中写明的。 网上给出的解释涉及…

Pinecone:一款专为红队研究人员设计的WLAN网络安全审计框架

关于Pinecone Pinecone是一款专为红队研究人员设计的WLAN网络安全审计框架,该工具基于模块化开发,允许广大研究人员根据任务需求进行自定义功能扩展。Pinecone设计之初专用于树莓派,可以将树莓派打造为便携式无线网络安全审计工具&#xff0…

java面试题(十六)springBoot

1.1 说说你对Spring Boot的理解 参考答案 从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。Spring Boot使用“习惯优于配置”的理念让你的项目快速地运行起来,使用Spring Boot很容易创建一个能独立运…

广告深度学习计算:向量召回索引的演进以及工程实现

问题定义召回操作通常作为搜索/推荐/广告的第一个阶段,主要目的是从巨大的候选集中选出相对合适的条目,交由后链路的排序等流程进行进一步的择优。因此,召回问题本质上就是一个大规模的最值的搜索问题:对于评分 和候选集 &#x…

最短路之Dijkstra(15张图解)

🌼多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 闲来无事听听歌 Dijkstra可解决“单源最短路径”问题 四种最短路算法 Floyd算法 时间复杂度高,但实现容易(5行核心代码),可解决负权边,适用于数据范围…

方法的定义与使用详解

我们常用创建一个class修饰的就是一个类 其中有一个main方法,是主要的启动方法 这里写目录标题我们正常修饰的方法是由返回值的,但是用void修饰的没有static的使用方法中形参和实参的使用值传递引用传递类跟对象的关系this构造器--构造方法这个&#xf…

uniapp+java/springboot实现微信小程序APIV3支付功能

微信小程序的支付跟H5的支付和APP支付流程不一样,本次只描述下小程序支付流程。 一.账号准备 1.微信小程序账号 文档:小程序申请 小程序支付需要先认证,如果你有已认证的公众号,也可以通过公众号免费注册认证小程序。 一般30…

自定义input[type=file]上传按钮样式的四种方案,你知道几种?

目录前言方案1 opacity: 0;实现方案2 display:none样式元素选择 :label样式元素选择:其他元素::file-selector-button兼容性用法🧨🧨🧨 大家好,我是搞前端的半夏 🧑,一个热爱写文的前…