Старое, но полезное от Пита Финнегана - Функция DBMS_SYS_SQL.PARSE_AS_USERИсточник: oraclemaniacs
Этот пакет не документирован, он используется средствами репликации (Oracles Replication Options). Хранимые процедуры в Oracle 7.3 и 8.0 выполняются с правами владельца. Начиная с Oracle8i появилась возможность определения процедур, выполняющихся с правами вызывающего. Этот недокументированный пакет DBMS_SYS_SQL.PARSE_AS_USER может позволить вам инсталлировать пакеты, которые работают с привилегиями вызывающего, а не с привилегиями владельца. Эта потенциальная "дыра" может быть использована, чтобы заставить администратора выполнять в будущем какие-то операторы SQL. Приведем простой пример: -- Запустив этот командный файл, получим: <!--[if !supportEmptyParas]-->Connected.
Как видите, здесь есть одно главное ограничение - вы должны иметь привилегию для выполнения пакета DBMS_SYS_SQL. Вполне резонно найти способ получения такой привилегии или базы данных, в которой такая привилегия уже имеется. Как видно из данного контрольного примера, можно создать процедуру, которая изменяет пароль пользователя SYS (можно изменять пароли любых пользователей или создавать пользователей, или предоставлять им привилегии DBA ), и все это можно делать из схемы пользователя DBSNMP . Однако это пока ничего не значит для нас, так как пользователь DBSNMP все еще не имеет права изменять чьи-либо пароли, кроме своего. Решение проблемы фактически заключается в том , чтобы заставить пользователя SYS или другого администратора выполнить для вас эту вашу новую процедуру. Мы поискали в DBA_OBJECTS процедуры, принадлежащие пользователю SYS и нашли PSTUBT, которая еще не имеет публичного синонима, а затем создали публичный синоним PSTUBT, указывающий на нашу новую процедуру HACK_USER. Эта процедура выбрана только в качестве примера, в идеале вы должны найти процедуру или функцию, которая регулярно выполняется администратором. Наша процедура вызывает DBMS_SYS_SQL.PARSE_AS_USER для выполнения фрагмента кода, а затем вызывает оригинальную процедуру, принадлежащую SYS . Это означает, что мы должны обеспечить соответствие параметров нашей процедуры параметрам существующей процедуры. В данном случае пользователь DBSNMP имеет право выполнения процедуры, принадлежащей SYS . Если это не так, то не вызывайте оригинальную процедуру, поскольку ошибки доступа могут быть зарегистрированы. Для любознательных: процедура PSTUBT была добавлена для Oracle Forms 3 и 4 и вызывалась во время компиляции кода форм для проверки вызываемых в сервере функций, процедур и пакетов PL/SQL. В Oracle Forms 3 и 4 еще использовался PL/SQL версии 1. Эта процедура создает фиктивную заглушку ( stub ), чтобы компилятор форм мог синтаксически проверить код формы. Если вы еще используете Oracle Forms 3 и 4 и иногда компилируете от имени администратора, проблема остается открытой. Ключевым моментом данной попытки взлома является поиск процедуры, которая регулярно выполняется администратором, в идеале это могут быть задания, находящиеся в очереди заданий, или ночные пакетные задания. Нецелесообразно выдавать привилегии выполнения пакета DBMS_SYS_SQL пользователям, которые создают процедуры и помогают другим пользователям выполнять то, что они требуют.
|