SQL Server:具有只读用户的未经过授权的用户输入

时间:2014-07-08 12:15:47

标签: sql sql-server security sql-injection

我创建了一个带有HTML / PHP的简单页面,其唯一目的是获取未经过用户输入的输入。

它位于:http://109.201.140.29/mssql/

我这样做只是为了好玩,我目前使用这台Windows服务器。

当用户只能(只读)访问数据库test_db时是否有任何风险?

它还会记录失败/成功的查询,错误日志示例(如您所见,丢弃表不起作用):

[2014-07-08 14:27:41] (query) Execution of query: "DROP TABLE users;" Failed.
     src IP: <snip>
     err: SQLSTATE[42S02]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot drop the table 'users', because it does not exist or you do not have permission.

成功查询日志的样本:

[2014-07-08 14:17:38] (query) Executed: "select * from users;".
     src IP: <snip>.
     Returned rows: 100.

[2014-07-08 14:17:45] (query) Executed: "select @@version;".
     src IP: <snip>.
     Returned rows: 1.

[2014-07-08 14:19:12] (query) Executed: "SELECT * FROM information_schema.tables".
     src IP: <snip>.
     Returned rows: 1.

我想是一个简单的问题;但这里有风险吗?除了将用户输入作为查询的明显缺陷..

用户按照我说的只读访问权限,并且不是任何数据库的所有者。

我问,因为这是我第一次使用SQL Server,但从我的测试来看,至少查询似乎只允许阅读(SELECT),这对于此目的是可行的。

当然可以随意测试查询 - 因为可能存在一些我不知道的查询。

1 个答案:

答案 0 :(得分:0)

安全性源于机密性,可用性和完整性。 您只需提供任何访问权限,机密性就会受到严重影响。 Damien表示,可用性受到影响,也可以使用其他方法。 完整性是&#34;只读&#34;权限实际上有助于保护,但它也是有限的。 您的数据库版本是Microsoft SQL Server 2012 - 11.0.2100.60,总有新漏洞可以提供整个服务器接管,如果您直接访问数据库,攻击者总是可以执行暴力攻击来猜测并冒充其他更强大的用户或甚至管理员用户(例如EXECUTE AS LOGIN ...)。 您永远不能关闭所有潜在的漏洞,并且绝不允许任何直接访问您的数据库。