Конечно, хотя макросы предоставляют очень ограниченные возможности, такие случаи в основном носят академический характер.
Допустим, я пытаюсь реализовать систему входа в систему, которая запрещает доступ к базе данных, не полагаясь на VBA.Я создаю форму, добавляю два текстовых поля для имени пользователя и пароля, и я делаю форму модальной и удаляю кнопки закрытия, чтобы запретить пользователю закрывать форму, делая мой макрос единственным способом получить доступ к базе данных (во многих отношениях небезопасно).
Макрос:
If DCount("*","tblUsers","UserName = '" & Forms![LoginForm]!Username & "' AND [Password] = '" & Forms![LoginForm]!Password & "'") <> 0
CloseWindow
Object type = Form
Object Name = LoginForm
Save = Prompt
Моя полезная нагрузка для инъекций является классической: введите ' OR 1=1 OR 'A' = '
в качестве имени пользователя, пустой пароль, вы находитесь.
Однако этот пример довольно нелепый.Строковые разделители и операторы конкатенации не используются для использования параметров на основе форм, и внедрение внезапно становится невозможным.
Макро-действие RunSQL
, однако, вообще не поддерживает динамический SQL, поэтому не уязвимов SQL инъекцию афаик.Однако в нем можно использовать параметры формы.
Как отметил сам Зев Спитц в комментариях, SetProperty
не может изменять источник строки или записи, поэтому не может использоваться для атак с использованием SQL-инъекций.