Помогите с примером инжекции через идентификатор

Фанат

oncle terrible
Команда форума
Сижу, полирую доклад, мозги уже кипят.
Простой примерчик не могу сообразить.
Нужна инъекция через идентификатор, что-то вроде

PHP:
$sql = "SELECT * FROM t ORDER BY `$field`";
простой UNION не прокатывает из-за ORDER BY - требуются скобки.
А больше ничего в голову не лезет.
Если есть идеи - буду благодарен.
 

Фанат

oncle terrible
Команда форума
Ага, для INSERT сообразил. но если найдется для селекта - было бы неплохо.
 

fixxxer

К.О.
Партнер клуба
в большинстве случаев вместо пробелов можно ставить /**/
 

fixxxer

К.О.
Партнер клуба
PHP:
$sql = "SELECT * FROM t ORDER BY `$field`";
простой UNION не прокатывает из-за ORDER BY - требуются скобки.
А больше ничего в голову не лезет.
Если есть идеи - буду благодарен.
Код:
SELECT * FROM t ORDER BY `someField`,  (IF 'admin-password' IN (SELECT password FROM t), `field1`, `field2`)
или blind injection
Код:
SELECT * FROM t ORDER BY `someField`, (IF 'admin-password' IN (SELECT password FROM t), BENCHMARK(999999, md5(s)), 1)
 

Фанат

oncle terrible
Команда форума
интерееесно.
но скобки тоже прокатывают. Для инсерта я сделал.
Но вот для селекта тоже хочется. причем менее высосанный из пальца случай, чем ORDER BY $field.
Есть, конечно, уникумы, которые SELECT * FROM userdata$id делают, но ты ж понимаешь - здесь в первую очередь сделают стойку на подход, а не на реализацию.
 

Фанат

oncle terrible
Команда форума
Да! Ещё хотелось бы без кавычек, поскольку мы их искейпим.
Но это, впрочем, не проблема - 0х нотация спасет например.

Но вот хотелось бы что-нибудь поубедительнее перебора...

Оно ж как иллюстрация идет, а еще и иллюстрацию объяснять - много времени займет.
Что-нибудь тупое, как Бобби Фейсом-об-тейбл...
 

fixxxer

К.О.
Партнер клуба
понятно что перебор не тупой брутфорс а последовательным приближением - ord( password[0] ) < 128 ? 1 : 0 итд

md5 таким образом подбирается очень быстро во вменяемое число запросов, дальше rainbow и приехали

фейсом об тейбл тут не получится, боюсь

но если человек настолько буратино, что возможность даже тупого перебора через sql inj для него не является причиной все немедленно исправлять - ну я не знаю, не уверен в целесообразности вообще такому пытаться что-то объяснять
 

fixxxer

К.О.
Партнер клуба
вообще очень показательно сделать дырявый демо-сайт и натравить на него skipfish ;)
 

Вурдалак

Продвинутый новичок
Фанат, обычно перебора (читай: бинарного поиска) хватает всегда, на практике за сравнительно небольшое количество запросов можно получить список таблиц, список полей таблицы типа users (всё из INFORMATION_SCHEMA) и вуаля. Если в SELECT есть что-то интересное, что есть ещё SELECT ... INTO OUTFILE '/bla/bla', но на практике никогда не работает (либо потому что апострофы/кавычки нельзя — 0x тут синтаксисом запрещено, либо потому что нет прав/не знаешь куда писать). Но в теории так шелл залить можно.
 

Фанат

oncle terrible
Команда форума
не уверен в целесообразности вообще такому пытаться что-то объяснять
К сожалению, если доклад на конфе остался непонятым, то это проблема не слушателей, а докладчика.

Но в общем ладно. Какой-нибудь беньчмарк длинный - бесполезный, но поражающий воображение, пожалуй, сойдет.
В конце концов, доклад не про инъекции, а про защиту от них.
 

fixxxer

К.О.
Партнер клуба
Думаю, достаточно привести примеры и выложить слайды с оными, кому интересно, как это работает - сам потом разберется
 

Фанат

oncle terrible
Команда форума
вот я дебил
зачем нам ордер бай если мы можем таблицу подставить динамически.
 
Сверху