9

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

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

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

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

4

4 回答 4

5

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

于 2008-08-28T14:31:58.553 回答
2

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

UPDATE Table 
SET TextField = SUBSTRING(TextField, 1, CHARINDEX('</title', TextField) - 1)
WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX('</title', Textfield, 1) > 0)))
于 2010-10-08T21:47:24.857 回答
1

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

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

重要的一点是,您需要做的第一件事就是关闭该站点。现在,您正在积极地向您的用户提供恶意软件,这可能会让您在以后受到法律修复。放置一个占位符页面,这样您的用户就不会被蒙在鼓里,但也不要继续提供恶意软件。然后,您可以修复该站点以确保它不再容易受到注入。对于这种特定攻击,最简单的方法是禁用您的 Web 用户的 sysobjects/syscolumns 权限,但您也需要通过清理来进行更多操作,否则再次破解只是时间问题。然后,您可以使用提供的代码清理站点并将其重新上线。

于 2008-08-28T14:44:59.240 回答
0

这将扭转这种情况,明智的做法是从您的站点运行的用户名中获取 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 注入攻击的工具

于 2008-08-28T14:33:07.990 回答