Project WebCodeПредставьте, что вам необходимо разрешить любому пользователю выполнить на сервере придуманный им PHP код. Дикость? Конечно. Да и объяснить зачем это нужно - непросто. В общем, примем за основу то, что
есть некий проект, в котором необходимо обеспечить выполнение произвольного кода (PHP) на строне сервера.
То есть, задача - позволить выполнять на сервере произвольный PHP код, который может _добавить_ и _выполнить_ любой пользователь интернета.
Насколько вы понимаете, такой веб-сервис - потенциальная дыра в системе безопасности.
Причем, сделать все нужно максимально портабельно - не через экзотическую систему "виртуальная машина" PHP 5 из расширения PECL (попробуй найди такого хостера за пару грин в месяц), а более простыми средствами.
Есть одно облегчающее обстоятельство. В выполняемом PHP коде нужно оставить только алгоритмическую часть, математические функции и функции вывода типа echo или print.
Обсуждение реализации такого сервиса, можно почитать здесь
http://phpclub.ru/talk/showthread.php?thre...20&pagenumber=2
В результате сервис был сделан, и в данный момент запущен для проверки здесь
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, пожалуйста, пришлите мне текст этого файла, и по настроению - последовательность ваших действий. При нахождении дырки просьба сильно не резвиться на сервере, файлы не уничтожать. Если охота порезвиться, ограничтесь пожалуйста дефейсом.
Взято тут