VDShark
27.11.2008, 01:46
Начиналось все как всегда — дело было вечером, делать было нечего... Ну и все в таком духе. Наткнулся я на sql-inj на одном интересном проекте — ну и как водится решил ее подраскрутиь :) И решил ка я поизучать строение БД этого проектенга...
СУБД оказалась MySQL 5-й ветки, что не могло не радовать. Начал изучать information_schema... и уж до того обширное строение базы у этого проекта оказалось, что просто аж жуть. С горем пполам перебрал (автоматически естественно) имена баз и имена таблиц — но и на то ушло немало времени. Отобрал наиболее интересные таблицы — решил получить имена их колонок... И тут я начал потихоньку ужасаться, видя сколько мне записей прийдется извлечь, и представляя сколько это займет времени. И начал думать — а как бы так мне сократить время... И тут мне вспомнилась интересная функция, которая появилась в 5-й ветке мускула, если мне не изменяет память. Имя сей чудной функции — group_concat():
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
и начал я составлять запросы вида (допустим у нас скуль такая: site.com/?q={SQL}):
site.com?q=union+select+1,group_concat(table_schem a,'.',table_name,'.',column_name),3+from+informati on_schema.columns+group+by+1
И радости моей не было предела, когда эта чудная конструкция отработала :)
Но как говорится — в наше время в любой бочке меда есть ложка дегтя... Дело в том, что group_concat() формирует строку не более длинны, заданной в системной переменной group_concat_max_len, которая по стандарту равна 1024.
Но все же время, потраченное на получение необходимой мне информации, удалось сократить в десятки раз, чем я остался очень доволен.
P.S. Возможно метод не новый, но я о подомном ничего не слышал, как думаю и многие. Поэтому решил поделится мини-зарисовкой на этот счет :)
СУБД оказалась MySQL 5-й ветки, что не могло не радовать. Начал изучать information_schema... и уж до того обширное строение базы у этого проекта оказалось, что просто аж жуть. С горем пполам перебрал (автоматически естественно) имена баз и имена таблиц — но и на то ушло немало времени. Отобрал наиболее интересные таблицы — решил получить имена их колонок... И тут я начал потихоньку ужасаться, видя сколько мне записей прийдется извлечь, и представляя сколько это займет времени. И начал думать — а как бы так мне сократить время... И тут мне вспомнилась интересная функция, которая появилась в 5-й ветке мускула, если мне не изменяет память. Имя сей чудной функции — group_concat():
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
и начал я составлять запросы вида (допустим у нас скуль такая: site.com/?q={SQL}):
site.com?q=union+select+1,group_concat(table_schem a,'.',table_name,'.',column_name),3+from+informati on_schema.columns+group+by+1
И радости моей не было предела, когда эта чудная конструкция отработала :)
Но как говорится — в наше время в любой бочке меда есть ложка дегтя... Дело в том, что group_concat() формирует строку не более длинны, заданной в системной переменной group_concat_max_len, которая по стандарту равна 1024.
Но все же время, потраченное на получение необходимой мне информации, удалось сократить в десятки раз, чем я остался очень доволен.
P.S. Возможно метод не новый, но я о подомном ничего не слышал, как думаю и многие. Поэтому решил поделится мини-зарисовкой на этот счет :)