Sql injection і заливка шелла (на прикладі)

SQL injection і заливка шелла (на прикладі)

Доброго времени суток, читач!

Отже, ось моя передісторія.
Трохи більше ніж пів року назад, я напоровся на один портал, де в URLe зауважив запит виду ". Modules.php? Name = Mediacatalogpa = Newsrelizcatnewid = 3".
Навіть не сподіваючись на диво, в кінець урла я підставив одинарні лапки '.
І що ми бачимо? А бачимо ми помилочку MySQL:
1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' ORDER BY p.pid DESC LIMIT 0, 20 'at line 12

Тепер закінчуємо передмову і приступаємо не посередньо до злому!

Апупенно 4-1 = 3, все правильно!

Якщо вам не зрозуміла робота цієї системи, зараз намалюю:
| ////
1 45 49 50

Спочатку ми визначаємо граничні значення, ми взяли 10 в якості початкового значення і 50 в якості кінцевого, потім стали поступово відсікати:
1-50
30-50 (обидва значення були вірні, звідси робимо висновок що полів у нас від 30-ти до 50)
і т.д

3. З полями визначилися, давайте подивимося, чи виводиться введена нами інформація. Проскролім сторінку нижче і бачимо щось подібне до цього:
6 1
7 2
8 3
9 4
0 5
2 9

Що ж це таке. А це, дорогі друзі, ті циферки що ми вводили в урл.
Значить інформація все ж виводиться. Чудово!

4. Я исспользовать третє поле для виведення інформації (потім вам прийдется комбінувати поля, для того що б не виводить інформацію по черзі, а отримати її відразу). Для того що б у нас була можливість виконувати запити, ми повинні исспользовать команду union, вона об'єднує запити. Після union вже безпосередньо виконуємо запит.

Для того що б вам було зрозуміло як ми звертаємося до БД, я приведу конструкцію:

SELECT something FROM anything WHERE something_else = anything_known / *
ВИБРАТИ що-небудь З чого-небудь ДЕ що-нібудь_другое = чогось нібудь_івестному_нам / *

Давайте дізнаємося версію mysql, яка встановлена ​​на сервері (команда version ()):

Перегорнемо сторінку вниз, і бачимо що на місці, де у нас показувалася трійка, тепер красується - 5.0.41-community
Класно! Версія MySQL 5.0.41, а в версіях MySQL після 5-й є таблиця INFORMATION_CHEMA. Розповім коротко про неї:
Ця таблиця, де записані всі імена таблиць в БД і їх полів, а значить нам тепер не потрібно підбирати імена таблиць і колонок в них, тепер ми можемо просто подивитися їх імена. А робиться це таким чином:
- Дізнаємося імена таблиць. Використовуємо колонку table_name з таблиці TABLES в базі даних INFORMATION_SCHEMA:

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


-Дізнаємося імена колонок з цікавить нас табліциНам потрібен доступ до адмінки, значить дивимося таблицю адмінів "spnuke_admins". Використовуємо колонку column_name з таблиці COLUMNS в базі даних INFORMATION_SCHEMA, де ім'я таблиці spnuke_admins:

Перегорнемо сторінку нижче і бачимо імена таблиць:
admins_login
admins_key_name
admins_email
admins_password

Цікавлять нас таблиці:
admins_login і admins_password

Сподіваюся ви розібралися в цьому, так що продовжуємо.

5. Тепер приступаємо до вилучення солодощів. Дізнаємося імена адмінів. Використовуємо колонку admins_login з таблиці spnuke_admins:

Гортаємо сторінку вниз і бачимо логіни адмінів цього сайту:
# Admin
# Ferz
# ewgenij
# pitbul
# Duschmann
# Sako
# stasm
# roman
# ekctpa
# stinker
# - = TaNaToS = -
# avanes
# -® = TriToN = ®-

Знову гортаючи сторінку і бачимо хеш паролів навпаки логінів користувачів:

Так от результат підбору паролів до шешам:
# Sako - 2099141

Решта паролі не цікаві. Так як у цих адмінів урізані прова. А ось у користувача Sako, теже прова що і у користувача Admin.

7. Отже, момент істини. Логіном в систему.

Урра. Залягання! Я адмін цього сайту, зашибісь!
Але потім я подумав: "Ну поимел права адміна. І що? Адже і раніше мені вдавалося досягти подібного, на інших сайтах. Але ж хочеться більшого!".
Тут я вирішив залити php йшов на сервер, тоді у мене буде доступ не тільки до сайту, але і до файлів самого сайту (тобто до ісходникам)! Це вже цікаво.

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

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

Мучився мучився і нарешті домучался, а в один програмісти зробили тільки перевірку на назву файлу?

8. Давайте пріпішем до нашого лушпи розширення gif (shell.php.gif).

Якщо виникнуть питання, пишіть в асю, із задоволенням допоможу чим зможу.
ICQ - 8790249