[room] Страшный сон администратора уже реальность.

Sergey Stepanov =?iso-8859-1?q?dlagovna_=CE=C1_mail=2Eru?=
Пт Июн 16 19:49:13 MSD 2006


Эх, решил запостить сюда инфу для любителей PHP и прочих извращений...


Представьте, что вы имеете сайт, написаный на PHP и вам необходимо 
разрешить любому пользователю выполнить на сервере произвольный PHP код.

Дикость? Конечно. Да и объяснить зачем это нужно - непросто. В общем, 
примем за основу то, что есть некий проект, в котором необходимо 
обеспечить выполнение произвольного кода (PHP) на строне сервера.

То есть, задача - позволить выполнять на сервере PHP код, который может 
_добавить_ и _выполнить_ любой пользователь интернета. При этом нужно
обезопасить всю остальную рабочую часть сайта от действий разнообразных 
представителей семейства кулхакероф.

Насколько вы понимаете, такой веб-сервис - потенциальная дыра в системе 
безопасности.

Причем, сделать все нужно максимально портабельно - не через 
экзотическую систему "виртуальная машина" PHP 5 из расширения PECL 
(попробуй найди такого хостера за пару грин в месяц), а более простыми 
средствами.


Правда, есть одно облегчающее обстоятельство. В выполняемом PHP коде 
нужно оставить только алгоритмическую часть, математические функции и 
функции вывода типа echo или print.



Обсуждение реализации такого сервиса, можно почитать здесь
http://phpclub.ru/talk/showthread.php?s=&threadid=81551&perpage=20&pagenumber=1

В результате сервис был сделан, и в данный момент запущен для проверки 
здесь
http://xi.net.ru/sandbox/webcode.php

Все запущено на FreeBSD + Apache, PHP ветки 4, SAFE MODE не включен.



И теперь, в целях проверки, я приглашаю всех желающих попробовать 
взломать эту чудо-разработку. Думаю, не перевелись еще на Руси богатыри, 
которым это будет интересно.


На страничке находится поле для кода и кнопочка "Выполнить". Вы можете 
добавлять любой PHP-код, и если система посчитает его безопасным, он 
будет запущен на выполнение на сервере, а в окно браузера будет выдан 
результат.

Если система посчитает код опасным, будет выдано предупреждение с 
указанием опасной строки и конструкции в ней.

Скопируйте, например, такой код, и запустите его на выполнение

$i=3;
$j=5;
echo $i+$j;

В ответ будет выдано 8, т.е. система работает. Теперь нужно выяснить, 
насколько эта система безопасна.


Соглашения.
-----------

- PHP код не нужно оформлять тегами начала-конца php-кода ("<?", 
"<?php", "?>" и тому подобные), система сама их добавит.

- В PHP коде разрешено использовать только алгоритмические конструкции 
языка, математические функции, команды echo и print.

- Вы можете описывать свои функции и использовать их.

- Для задания строк используйте апостроф. Использование двойных кавычек 
и обратного апострофа запрещено.

- Использование переменных переменных ($$) запрещено.

- Использование объектно-ориентированной части языка PHP запрещено.

- После проверки, введеный код выполняется через функцию eval().

- Код не проверяется на ошибки в синтаксисе PHP

- Код не проверяется на зацикленность

- Код не проверяется на возможность выделения достаточной памяти


В данный момент проверяется именно валидатор кода. Поэтому других мер 
безопасности - защита от флуда и прочее, пока не реализовано. 
Пожалуйста, не нарушайте работу сервера тупым JavaScript флудом и 
другими "нагружающими" поделками.


Проверка валидатора.
--------------------
(то, ради чего все и затевалось)

В данный момент нужно выяснить главную вещь - действительно ли валидатор 
выявляет все опасные конструкции. Для этого, в тот же каталог, где 
расположен скрипт webcode.php, помещен файл msg.txt. Права на него 
назначены как 600, его содержимое могут читать php-скрипты, а 
непосредственно из интернета он не виден.

В файле msg.txt находится сообщение, которое необходимо каким-либо 
образом попытаться прочитать. Вы можете использовать любые технические 
методы взлома. Но обратите внимание, социальный хак хостера - это не 
круто . Взлом через сниффинг пароля на админку - за взлом webcode.php не 
считается )

Если вам удасться прочитать содержимое файла msg.txt, пожалуйста, 
пришлите мне текст этого файла, и по настроению - последовательность 
ваших действий. При нахождении дырки просьба сильно не резвиться на 
сервере, файлы не уничтожать. Если охота порезвиться, ограничтесь 
пожалуйста дефейсом.

Ваши замечания или отчеты об обнаруженных дырках присылайте пожалуйста 
на мой любимый e-mail dlagovna на mail.ru или размещайте на форуме.


Информация так же размещена на PhpClub.ru, BugTraq.ru, SecurityLab.ru.


-- 
Со всяческими пожеланиями, Сергей.
http://xi.net.ru



Подробная информация о списке рассылки smoke-room