简短的介绍:
不正确的应用程序验证会将无效数据传递到 SQL Server 2012 中执行的 SQL 更新语句中,从而导致应用程序无法处理的服务器端错误。从数据库安全的角度来看,这可以被利用吗?
背景:
我不是全职安全专家,并且有一个与安全相关的问题,希望有一个简单的答案。我正在使用“黑盒”方法调查“现成”Web 应用程序中的潜在安全漏洞,并且遇到了令人担忧的问题。该应用程序似乎无法验证几个 nvarchar 字段的数据输入长度,并将输入数据直接传递到数据库。即使数据违反了数据类型长度限制,应用程序也会声称一切都已成功提交。因为尝试写入导致服务器端出错并且数据没有提交到数据库,所以这似乎是一个仅基于应用程序验证的语句,而不是来自数据库的任何返回信息。
问题:
除了从无效的 SQL 插入语句中丢失输入数据的明显问题之外,这种 SQL Server 级别的数据类型长度溢出是否可以被利用来读取或写入数据库,或者创建一个内存占用循环,从而阻碍后续操作?要求?
在各种编程语言中,我知道可以利用缓冲区内存溢出在应用程序级别执行代码(“粉碎堆栈”),我想知道 SQL Server 级别的执行是否受到控制并且只会产生错误来自 SQL Server 级别的验证,或者它是否可能以某种方式包含额外的命令,如; DELETE FROM USERS;
或类似的东西,这可能会引起额外的关注。
如果您需要更多信息,请告诉我。我想有大量的文档围绕这个,但在大量搜索后无法从谷歌或其他堆栈答案中找到我需要的东西。也许答案只是“SQL Server 2012 有足够的内部验证来防止这种情况”。请指出我正确的方向。谢谢!