Database 我的数据库被攻击了

Database 我的数据库被攻击了,database,sql-server-2008-r2,server-side-attacks,Database,Sql Server 2008 R2,Server Side Attacks,我有一个运行SQL Server 2008 r2的数据库。我对某些列的值有问题 我注意到有些字段值会自动更新 它们包含以下数据: 原始值12345 肮脏的价值12345为什么丈夫会出轨为什么男人会出轨妻子 我不知道这是怎么发生的,是什么样的攻击?知道在我的应用程序代码中,这是一个ASP.Net WebForms应用程序,我没有更新语句,一些受感染的列不是从客户端输入读取的,而是外键,它们的值是从数据库读取的,因此无法将这些脏值放入其中。我假设这是SQL注入攻击 SQL注入攻击的全部要点在于,

我有一个运行SQL Server 2008 r2的数据库。我对某些列的值有问题

我注意到有些字段值会自动更新

它们包含以下数据:

  • 原始值12345
  • 肮脏的价值12345
    为什么丈夫会出轨为什么男人会出轨妻子

我不知道这是怎么发生的,是什么样的攻击?知道在我的应用程序代码中,这是一个ASP.Net WebForms应用程序,我没有更新语句,一些受感染的列不是从客户端输入读取的,而是外键,它们的值是从数据库读取的,因此无法将这些脏值放入其中。

我假设这是SQL注入攻击

SQL注入攻击的全部要点在于,它们发现了执行任意SQL命令的单一弱点。如果您接受来自web的输入,无论是用于插入/更新/删除/选择查询,还是不使用参数化查询,攻击者都可以访问数据库中的任何表,并根据需要对其进行处理

如果没有更多的细节,很难精确地说明它是如何工作的——它似乎是一个脚本,因为互联网上有很多页面都有相同的URL,并且它们都使用.asp作为后缀

对我来说,要记住ASP语法已经太长时间了,但我要试一试。我也没有费心用HTML编码来使它更清晰

例如,假设您有一个页面,可以在其中查找有关产品的信息:

http://myapp.com/customers.asp?productID=1
当该页访问服务器时,您将构造一个SQL字符串:

Select * from products where productID = & request.productID
然后执行它,在页面上显示结果

在正常情况下,您的SQL请求是
Select*from productID=1的产品

攻击者可能会操纵URL,如下所示:

http://myapp.com/customers.asp?productID=1 union sp_help
这意味着你要执行死刑

Select * from products where productID = 1
union
sp_help
并在生成的网页上显示结果。要获得与产品数据中的列相匹配的sp_帮助结果需要一些尝试和错误,但最终攻击者会获得一个完整的数据库架构

如果攻击者想要操纵数据,他们可能会执行以下操作

http://myapp.com/customers.asp?productID=1; update lookupTable set description = description  + '<div style="display:none">why do husband cheat <a href="http://blog.businessdating.com/page/How-women-cheat">wifes that cheat</a> why do men cheat on their wife</div>'
http://myapp.com/customers.asp?productID=1; 更新lookupTable set description=description+“为什么丈夫会欺骗妻子?”

检查脚本,更新数据库类型名称和验证字段,无脚本我没有特定的脚本,所有语句都使用SqlCommand在我的应用程序中编写。我只有insert语句,受感染的字段并没有从客户端输入中进行值化,而是从数据库中进行值化。这是哪种类型的攻击?如果您的
SELECT
语句的构建方式不好(将SQL连接在一起而不是使用参数化查询),这可能会导致经典的SQL注入附加(仍然是web上的OWASP no.1攻击)…我不想听起来很苛刻,但请立即将应用程序脱机。这显然是不安全的,而且您似乎不具备保护应用程序的技能。如果你用谷歌搜索你专栏中的URL,你会发现很多页面被破坏了。有一个脚本在你的应用程序中发现了一个弱点;这可能是SQL注入。如果您存储个人信息、敏感数据或支付数据,您应该立即通知用户。攻击的全部目的是运行不属于应用程序一部分的DML语句(更新、删除、插入)。谢谢@Neville K关于这个答案,现在很清楚,潜在的sp_帮助是问题的根源。无论如何,我将更改所有db请求以使用SQLParameters。我想知道是否可以通过我的数据库授权来控制这一点,以便允许特定用户进行插入?