![]() |
различные результат на *group+by* и *union+select*
Вот блин штука какая. На одном из сайтов нашел стандартную sql-инъекцию.
Запрос типа site.com/?nr=1' выдает ошибку "mysql_fetch_array()....". Скуль на лицо, с помощью запроса site.com/?nr=1+group+by+5/* появляется ошибка, стало быть кол-во столбцов 4 (при site.com/?nr=1+group+by+4/* - ошибки нет), значит должен быть верен запрос типа site.com/?nr=1+union+select+1,2,3,4/* ну или хотя бы site.com/?nr=1+union+select+null,null,null,null/*. Как не вертел, данные запросы вес равно выдают ошибку( При использовании order+by так же нет ошибок. В чем может быть проблема. Я предполагаю, что скрипт фильтрует в запросе второй select и так реагирует. |
юзай sql injection tool 4
|
1. Ты подставляешь юнион к существующему значению, а надо к несуществующему (...1+and+1=2+union+...).
2. Возможно там несколько запросов (в таком случае посимвольный брут). 3. Версия мускула = 3 (+and+substring(version(),1,1)=3 - это что бы проверить) и следовательно подзапросы не поддерживаются. Читай статью: https://forum.antichat.ru/threadnav43966-1-10.html |
м.б. там просто 3 версия секеля и нет юниона ;-)?
|
Если четвёртая версия это ещё не означает поддержку подзапросов.Вот какая точная версия,с которой начинается поддержка подзапросов - не помню...).Про третью вообще молчу))
|
Цитата:
Правда, тут о них речи не было, UNION не является частью подзапроса. Подзапрос имеется, скажем, в этом примере: Код:
SELECT 1,2,(SELECT `passwd` FROM `users` limit 0,1) from mysql.user;Код:
SELECT `password` FROM `users` WHERE `id` = (SELECT `user_id` FROM `comments` limit 155,1); |
Цитата:
Хыхы))А мне всегда почему-то казалось, что подзапрос - это выражения вида 1+and+substring(version(),1,1)=5; или 1+and+1=5+union+select; Выполнится второй запрос,а первый улетает.Так эт чо - один большой запрос или всё же два?)). Уф... |
попробуй site.com/?nr=-9999+union+select+1,2,3,4/* несуществующее значание
|
Цитата:
В запросе получается что то вроде этого: select title from page where page_id=[sql inj] Смысл запроса вывести заголовок указанной страницы. Сюда ты и подставляешь данные: select title from page where page_id=1 and substring(version(),1,1)=5 Смысл вывести заголовок указанной страницы и первый символ версии БД должен быть равен 5. Т.е. запрос выполнится успешно если верси БД равна 5. substring() и version() это функции. В данном примере ты используешь логический опрератор and и две функции, а подзапросы не используешь. Ограничиваясь такими логическими посимвольными учтонениями запроса, используя только функции и не используя подзапросы максимум что ты можешь сделать это вывести содержимое файла (и то если пользователь БД обладает соотвествующими правами) - подробнее тут => Работа с MySQL третьей версии... Цитата:
select title from page where page_id=1 and substring(version(),1,1)=5 union select 1 В данном случае если версия БД не равна 5, то выведется еденица. Подробнее тут => SQL injection полный FAQ Подзапросы используются для работы со слепыми инъекциями: select title from page where page_id=1 and (select 1 from user limit 0,1)=1 Подробнее про слепые инъекции тут => SQL инъекция FAQ (в т.ч. и blind SQL) P.S. а вообще очень советую купить справочник/учебник по синтаксису sql. |
мне кажется, что учше нам увидеть эту ссылку)
|
Цитата:
Но немного пораздумав и почитав, что Grey написал, попробовал логические запросы с and. Как и ожидалось версия оказалась 3.х и соответственно union не поддерживаются :mad: С помощью перлового скрипта перебрал user(), version(), database(). Запрос, типа site.com/?nr=1+and+ascii(substring((select+password+from+my sql.user),1,1))>1/* тоже не проканал, то ли это расценено как подзапрос, то ли доступа к mysql.user закрыт. Статья Grey о том как сливать файлы в 3-й версии, если есть доступ, наталкнула на такой запрос http://site.com/?nr=1&n=1+and+ascii(substring((LOAD_FILE(0x2f77777 72f777777382f757a2f64656661756c742e68746d)),100,1) )>1/* При его подачи ошибок нет, но и добиться, чтобы условие выполнилось, тоже не смог (захексин путь до файла, который выводится при ошибочной квери) |
Цитата:
Цитата:
Тут два варианта: 1. Пользователь БД не имеет прав на чтение/запись файлов. 2. Нельзя прочитать файл находящийся в /www (права на файлы поставленные жестко). Проверь можешь ли ты прочитать файл /etc/passwd - если ты и его не сможешь прочитать, то у пользователя БД явно нету соотвествующих привилегий - тут уж ничего не поделаешь. Вот что ещё может помочь тебе во взломе с помощью sql инъекций: Т.к. ты уже нашел на сайте уязвимый скрипт, то вполне возможно что есть и другие скрипты подверженные sql инъекциям, а именно: 1. SQL инъекция при авторизации в админке, т.е. вместо логина и пароля прописывай: 1' or 1=1/* Но при этом кавычки не должны фильтроваться. 2. Попробуй найти скрипт который работает с таблицей пользователей (выводит список пользователей или к примеру их email'ы) и в нём найти sql инъекцию и в таком случае ты можешь обойтись без подзапросов, а просто логичискими уточнениями: php?id=1+and+ascii(substring(username,1,1))>1 Врятли можно найти другие способы, но по крайней мере у тебя есть раскрытый пусть, может если найдешь инклуд или читалку, то может он поможет. |
Цитата:
|
99% Думаю надо юзать конструкцию типо.
1'+and+1= 1')+and+1= |
Цитата:
Вот процитирую: Код:
Как и ожидалось версия оказалась 3.х и соответственно union не поддерживаются С помощью перлового скрипта перебрал user(), version(), database(). |
| Время: 20:20 |