asp.net - 如何在SQL注入攻击后清理?

时间:2012-04-13 12:03:26

标签: asp.net sql-server sql-injection database-security

我有几个旧网站刚刚被我的托管公司脱机,显然是由于SQL注入攻击。我查看了我的数据库,是的,我被黑了。 * *糟糕

我的数据库已经填充了附加到我的原始数据的脚本标记(至少我的原始数据仍然存在,所以这很好)。

我一直在查看我的旧代码并且看到了一些未经过处理的输入位置,所以很明显我会仔细检查并检查更多内容。 我还下载了黑客网站,将其与我多年前上传的版本(使用某种文件检查程序)进行比较,这应该让我看看他们是否曾尝试添加后门。

我的问题是......

1)有没有办法可以从数据库中删除所有附加的脚本标签,因为它们完全一样?

2)还有什么我应该注意或忽略的吗?

我想指出的是,这些旧网站上没有存储任何敏感材料,所以这没什么大不了的,我只想让它们重新启动并再次运行。

我正在汲取我的安全知识,并将很快删除主机上的所有文件,更改所有密码并上传改进的(并且不那么黑客友好的)网站。

感谢...

4 个答案:

答案 0 :(得分:2)

具体回答您的脚本标记替换问题,除了作为手动任务之外,我看不到任何其他内容。

我确定你已经考虑过了这个问题,但是对一个领域的一个简单的替换声明应该把这些东西拿出来:

update MyTable
set field = replace(field, 'unwanted', '')
where field like '%unwanted%'

如果有很多表和字段,那么我相信你可以使用SQl数据字典来实现某种自动化。如下所示:

DECLARE @ColName varchar(255), @TableName varchar(255), @sSQL varchar(1000)
DECLARE colcur CURSOR for
 SELECT name, object_name(id) 
   FROM syscolumns
  WHERE name = 'Moniker'

  OPEN ColCur
 FETCH NEXT FROM ColCur 
  INTO @ColName, @TableName

WHILE @@FETCH_STATUS = 0
BEGIN
    Set @sSQL = 'update ' + @TableName + ' set ' + @ColName + ' = replace(' + @ColName + ', ''unwanted'', '''') where ' + @ColName + ' like ''%unwanted%'''

    exec(@sSQL) 

    select @ColName, @TableName
    FETCH NEXT FROM ColCur 
    INTO @ColName, @TableName
END 

CLOSE ColCur
DEALLOCATE ColCur

答案 1 :(得分:2)

我想这些是理想情况下的一些步骤:

  1. 让您的网站离线。也许您想要显示“Down to technical maintenance”消息而不是404.
  2. 备份被黑客入侵的数据库,您可能希望稍后进行分析
  3. 确保修复易受SQL注入攻击的代码片段。我建议在团队中这样做,以便更加彻底。
  4. 从备份还原数据库
  5. 上传(希望如此)已修复的主页
  6. 请联系您的律师,因为您可能泄露了客户数据。
  7. 与您的律师一起讨论下一步的法律步骤。
  8. 正如您所提到的,黑客页面上没有存储敏感材料,这可能意味着您可以跳过第6步和第7步。

答案 2 :(得分:1)

如果你有备份,这是使用备份的理想时间,因为你不确切知道你的数据是如何被破坏的。如果您没有备份,那么这应该是将来使用备份并保护自己免受此类攻击的教训。此外,如果您没有备份,则应创建一个清理数据的算法,但这并不能保证不会留下任何垃圾。

答案 3 :(得分:0)

首先Protect From SQL Injection

然后,从最近的备份中恢复数据。