
Эксплойт для удаленного выполнения команд в команде Golang go get.
Эксплойт для удаленного выполнения команд в команде go get языка Golang.
Когда вы выполняете go get для пакета, Go спроектирован так, чтобы собрать и установить пакет без выполнения какого-либо кода из него. Предполагается, что вы можете безопасно получить, собрать и даже установить пакеты Go, не доверяя им вовсе. Теоретически это кажется простой задачей для инструментария Go, но на практике это настоящий вызов. go get выполняет множество действий под капотом, включая вызов сторонних инструментов, таких как git и clang, способами, которые сильно зависят от конфигураций пакетов. Обеспечение безопасности этих вызовов — это тяжелая битва, которую Go пока не выиграл.
Когда включен cgo, этап сборки во время go get вызывает хост-компилятор C, gcc или clang, добавляя флаги компилятора, указанные в исходных файлах Go. И gcc, и clang поддерживают механизм плагинов, в котором плагин в виде разделяемой библиотеки загружается в компилятор по директиве флагов компилятора. Это означает, что репозиторий пакета Go может содержать файл exploit.so вместе с исходным файлом Go, который говорит (например) // #cgo CFLAGS: -fplugin=exploit.so, что приводит к загрузке атакующего плагина в хост-компилятор C во время сборки. Плагины gcc и clang имеют полный неограниченный доступ к хост-системе.
Версии Go до 1.8.7, Go 1.9.x до 1.9.4 и предварительные версии Go 1.10 до Go 1.10rc2 допускают удаленное выполнение команд через go get во время сборки исходного кода, используя возможность плагинов gcc или clang, поскольку аргументы -fplugin= и -plugin= не блокировались.
Для эксплойта нам понадобится разместить наш вредоносный пакет. Нам нужен веб-сайт с TLS и действительной цепочкой сертификатов. Простой способ сделать это — использовать github.
Затем вам понадобится вредоносный файл plugin/.so. Код в exploit.c поможет вам с этим.
Примечание: Измените следующий код в exploit.c на вашу команду
void exploit() {
system("<Your CMD>");
}
Примечание: Скомпилируйте этот файл в соответствии с архитектурой машины/ПК жертвы
Вы можете собрать exploit.so, используя следующую команду:
gcc -shared -o exploit.so -fPIC exploit.c
После того, как вы разместите полную полезную нагрузку на Github, вы сможете передать ссылку на пакет жертве.