Программное обеспечение для тестирования SQL инъекций - PullRequest
0 голосов
/ 05 мая 2020

Нам приходится работать со старой версией ERP-системы (1993 г.).

Она имеет несколько модулей. У этих модулей есть windows (вкладки). На вкладках есть столбцы (очевидно).

В этих вкладках ПОЛЬЗОВАТЕЛЬ может создать «новый столбец» -> это похоже на подзапрос. Запрос можно использовать только в круглых скобках ().

Мне просто любопытно, можно ли сделать инъекцию пользователем.

например:

 --basic query (self join)
(select i.my_col from my_table i where my_pk = i.pk)

 --illlustrating
(select replace(i.my_col, 'UPDATE...') from my_table i where my_pk = i.pk)

Is есть ли способ сделать второй запрос работоспособным? Я имею в виду, может ли пользователь каким-то образом обновить столбцы с помощью этого метода?

Как я могу это проверить?

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Предотвращение внедрения SQL зависит от механизма, который превращает вводимые пользователем данные в исполняемые операторы. Фактический пример, который вы опубликовали, не запустится, но я могу придумать, как можно было бы захватить SELECT для запуска вредоносного DML. Это зависит от структуры: учитывая, что лежащее в основе программное обеспечение является древним, я подозреваю, что оно может быть чрезвычайно уязвимым.

Вообще говоря, если вас беспокоит SQL Injection, вам следует исследовать, используя встроенный DBMS_ASSERT пакет Oracle для проверки ваших SQL строк. Узнать больше

0 голосов
/ 05 мая 2020
Значения

Dynami c могут обрабатываться для условий where через preparedStatement и setParameter, однако, к сожалению, эта опция недоступна для выбора Dynami c column.

Лучшее может быть сделано, это иметь все возможные / применимые имена столбцов до перехода к запросу.

// check if my_col is possible values else throw the error.
(select replace(i.my_col, 'UPDATE...') from my_table i where my_pk = i.pk)
...