【发布时间】:2014-08-29 04:17:08
【问题描述】:
我使用 HTML/PHP 创建了一个简单的页面,其唯一目的是获取未经处理的用户输入。
位于:http://109.201.140.29/mssql/
我这样做只是为了好玩,我目前将此 Windows 服务器用于其他目的。
当用户只有(只读)访问数据库 test_db 时是否有任何风险?
它还记录失败/成功的查询、错误日志示例(如您所见,drop table 不起作用):
[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),这对于此目的来说是可以的。
当然可以随意测试查询 - 因为可能有一些我不知道的查询。
【问题讨论】:
-
EXEC xp_dirtree 'C:\'给了我一个结果.... 好一半的结果 -
是的,我在错误日志中看到了,呵呵,编辑:我也在打印捕获的异常,无论它失败。因此有一半的结果:)
-
当然有风险,攻击者可以看到您数据库中包含的所有数据。更不用说@ElectricLlama 已经有脏树了。
-
DOS算不算坏事?
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; SELECT * from users WITH (XLOCK); WAITFOR DELAY '23:59:59' -
select * from sys.syslogins。这些东西本身没有任何作用,它们只是增加了“攻击面”
标签: sql sql-server security sql-injection