Доб­рался до базы дан­ных и не зна­ешь, как рас­кру­тить век­тор до зах­вата сер­вера? В этой статье на паль­цах раз­берем при­меры получе­ния рута сна­чала в базе, а затем и на сер­вере.

SQL Privilege Escalation быва­ет двух типов: повыше­ние при­виле­гий внут­ри базы дан­ных и повыше­ние при­виле­гий в опе­раци­онной сис­теме. При повыше­нии при­виле­гий в ОС важ­но, что­бы база дан­ных была запуще­на от име­ни при­виле­гиро­ван­ного поль­зовате­ля. Как минимум это дол­жен быть дру­гой поль­зователь, что­бы мож­но было поис­кать дру­гие век­торы для эска­лации.

info

Для крат­кости в статье воль­но исполь­зую тер­мин «база дан­ных» по отно­шению к MySQL и про­чим сис­темам управле­ния базами дан­ных (СУБД). База дан­ных — это набор таб­лиц, индексов и подоб­ного. Сис­тема управле­ния базами дан­ных — прог­рам­мное обес­печение, которое пре­дос­тавля­ет воз­можность соз­дания баз дан­ных и дос­тупа к ним.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

 

От MySQL до root на сервере

Для демонс­тра­ции уяз­вимос­ти будем исполь­зовать лабора­тор­ную работу с VulnHub под наз­вани­ем Kioptrix: Level 1.3. Ска­чай ее, если собира­ешь­ся пов­торять все упражне­ния из статьи. Рекомен­дую: так ты гораз­до луч­ше пой­мешь изло­жен­ное, плюс у тебя будет воз­можность поэк­спе­римен­тировать самос­тоятель­но.

Для запус­ка в VirtualBox бери вер­сию VMware. В архи­ве лежит файл Kioptrix4_vmware.vmdk, VirtualBox понима­ет этот фор­мат. Соз­дай новую машину, задай наз­вание, выбери тип Linux и ука­жи ОС Ubuntu. Образ ISO выбирать не нуж­но. В нас­трой­ках жес­тко­го дис­ка выбери «Исполь­зовать сущес­тву­ющий». Наж­ми кноп­ку выбора дис­ка, добавь новый носитель, ука­зав путь к Kioptrix4_vmware.vmdk. Машина готова к стар­ту.

Я не буду опи­сывать путь получе­ния логина и пароля. Если инте­рес­но, поп­робуй прой­ти этот путь пол­ностью — начиная со ска­ниро­вания пор­тов и до момен­та получе­ния кред.

Для аутен­тичнос­ти ата­ки под­клю­чись по SSH. Или, как я, исполь­зуй тер­минал запущен­ной машины. Раз­ницы никакой нет: все коман­ды и реак­ция на них оди­нако­вые.

За­логинь­ся с учет­ными дан­ными john/MyNameIsJohn. Машина выдаст при­ветс­твие, но это огра­ничен­ная обо­лоч­ка lshell. Limited Shell филь­тру­ет коман­ды поль­зовате­ля, оставляя толь­ко самое необ­ходимое. Нап­ример, ls, cd, echo. Если попыта­ешь­ся выпол­нить mysql, получишь сооб­щение о неиз­вес­тной коман­де. Что­бы заг­рузить при­выч­ный bash, выпол­ни

echo os.system('/bin/bash')

Обо­лоч­ка написа­на на Python, поэто­му echo проб­росит интер­пре­тато­ру os.system(). Фун­кция system() из стан­дар­тно­го пакета os выпол­нит сис­темный вызов. Теперь у тебя есть пол­ноцен­ный шелл.

Запуск mysql за пределами lshell
За­пуск mysql за пре­дела­ми lshell

Поп­робуй запус­тить mysql от рута: mysql -u root. На тес­товой машине для поль­зовате­ля root базы дан­ных пароль не уста­нов­лен. Сов­ремен­ные вер­сии MySQL все­ми спо­соба­ми защища­ют от вхо­да под root с пус­тым паролем, но сре­ди айтиш­ников мно­го талан­тли­вых ребят, которые не приз­нают пароль для root.

Чек­ни поль­зователь­ские фун­кции:

select * from mysql.func;

Поль­зователь­ские фун­кции — это спо­соб рас­ширить воз­можнос­ти MySQL. Код пишут на сис­темном язы­ке прог­рамми­рова­ния, вро­де C или C++. Его ком­пилиру­ют в обыч­ные биб­лиоте­ки: .so для Linux или .dll для Windows. Биб­лиоте­ку помеща­ют в пап­ку пла­гинов MySQL, пос­ле чего фун­кцию мож­но добавить как UDF (user-defined function). UDF нуж­ны, нап­ример, при обра­бот­ке слож­ных струк­тур дан­ных и реали­зации собс­твен­ных алго­рит­мов, а еще ког­да нуж­ны сис­темные вызов и про­чие вещи, которые не под­держи­вает MySQL.

Результат проверки функций
Ре­зуль­тат про­вер­ки фун­кций

В выводе есть инте­рес­ная фун­кция sys_exec из биб­лиоте­ки lib_mysqludf_sys.so. Ско­рее все­го, такая фун­кция выпол­няет сис­темные вызовы, а наз­вание биб­лиоте­ки lib_mysqludf_sys.so доволь­но популяр­но в сре­де хакин­га, исходный код может быть подобен это­му коду на GitHub.

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

select sys_exec("id");

В резуль­тате будет NULL, а не ожи­даемый вывод id. Нап­рямую фун­кция не рас­кры­вает информа­цию, но оста­ется кос­венный вари­ант — некор­рек­тный вызов:

select sys_exec("brbrbr");

MySQL отва­лит­ся с ошиб­кой. Зна­чит, есть хороший шанс, что UDF дей­стви­тель­но выпол­няет сис­темные вызовы, но при этом не обра­баты­вает ошиб­ки. Поп­робуй добавить поль­зовате­ля john в груп­пу адми­нис­тра­торов:

select sys_exec(usermod -aG admin john);

warning

В при­мере я добавил поль­зовате­ля в груп­пу admin, это осо­бен­ность кон­крет­ной лабы. В боль­шинс­тве слу­чаев добав­лять нуж­но в груп­пу sudo.

От­вет NULL дает надеж­ду, что все прош­ло успешно. Вый­ди из MySQL в обо­лоч­ку и выпол­ни sudo su. Бин­го! Ты добил­ся эска­лации при­виле­гий через MySQL.

Эскалация привилегий через пользовательскую функцию MySQL
Эс­калация при­виле­гий через поль­зователь­скую фун­кцию MySQL
 

Загрузка UDF на сервер

Ис­поль­зовать буду ту же машину — Kioptrix: Level 1.3.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии