SQL 注入和访问宏(不是 VBA)
SQL injection and Access macros (not VBA)
Microsoft Access 宏(不是 VBA)是否容易受到 SQL 注入的攻击?
有用于代码流、临时变量等的构造。是否可以编写一个将用户输入合并到 SQL 语句中的宏,这样 SQL 语句就会产生意外和不良后果?
SQL 语句可用于 运行SQL 操作。或者,SetProperty 操作可用于更改 RecordSource 或 RowSource 属性。
如果是,如何做到这一点?
当然可以,但由于宏提供的功能非常有限,因此此类案例大多是学术性的。
假设我正在尝试实现一个不允许访问数据库的登录系统,而不依赖于 VBA。我正在创建一个表单,为用户名和密码添加两个文本框,我正在制作表单模式并删除关闭按钮以禁止用户关闭表单,使我的宏成为访问数据库的唯一途径(在很多方面都不安全)。
宏:
If DCount("*","tblUsers","UserName = '" & Forms![LoginForm]!Username & "' AND [Password] = '" & Forms![LoginForm]!Password & "'") <> 0
CloseWindow
Object type = Form
Object Name = LoginForm
Save = Prompt
我的注入 payload 很经典:输入 ' OR 1=1 OR 'A' = '
作为用户名,密码为空,就可以了。
然而,这个例子非常荒谬。省略字符串定界符和连接运算符以使用基于表单的参数,注入突然变得不可能。
然而,RunSQL
宏操作根本不支持动态 SQL,因此不易受到 SQL 注入 afaik 的攻击。不过,您可以在其中使用表单参数。
正如 Zev Spitz 在评论中自己指出的那样,SetProperty
无法修改行或记录源,因此不能用于 SQL 注入攻击。
Microsoft Access 宏(不是 VBA)是否容易受到 SQL 注入的攻击?
有用于代码流、临时变量等的构造。是否可以编写一个将用户输入合并到 SQL 语句中的宏,这样 SQL 语句就会产生意外和不良后果?
SQL 语句可用于 运行SQL 操作。或者,SetProperty 操作可用于更改 RecordSource 或 RowSource 属性。
如果是,如何做到这一点?
当然可以,但由于宏提供的功能非常有限,因此此类案例大多是学术性的。
假设我正在尝试实现一个不允许访问数据库的登录系统,而不依赖于 VBA。我正在创建一个表单,为用户名和密码添加两个文本框,我正在制作表单模式并删除关闭按钮以禁止用户关闭表单,使我的宏成为访问数据库的唯一途径(在很多方面都不安全)。
宏:
If DCount("*","tblUsers","UserName = '" & Forms![LoginForm]!Username & "' AND [Password] = '" & Forms![LoginForm]!Password & "'") <> 0
CloseWindow
Object type = Form
Object Name = LoginForm
Save = Prompt
我的注入 payload 很经典:输入 ' OR 1=1 OR 'A' = '
作为用户名,密码为空,就可以了。
然而,这个例子非常荒谬。省略字符串定界符和连接运算符以使用基于表单的参数,注入突然变得不可能。
然而,RunSQL
宏操作根本不支持动态 SQL,因此不易受到 SQL 注入 afaik 的攻击。不过,您可以在其中使用表单参数。
正如 Zev Spitz 在评论中自己指出的那样,SetProperty
无法修改行或记录源,因此不能用于 SQL 注入攻击。