2010-06-01 25 views
2

我对SQL注入和URL解码有一些了解,但是对于这个问题,比我更专家的人可以看看下面的字符串并告诉我它到底想要做什么?我的服务器上的SQL注入尝试

几周前,北京的一些孩子尝试了一些如下所示的注射。

%27%20于是%20char(124)%2Buser%2Bchar(124)= 0%20于是%20%27%27 = 27%

回答

4

它让一个关于某种SQL语句的表单数据被代入猜测,并假设它在道路上的某一步将不会很好地消毒。考虑一个程序交谈的SQL服务器(CISH代码纯粹为例):

fprintf(sql_connection, "SELECT foo,bar FROM users WHERE user='%s';"); 

然而,上面的字符串时,SQL服务器看到:

SELECT foo,bar FROM users WHERE user='' and char(124)+user+char(124)=0 and ''=''; 

哎呦!那不是你想要的。接下来会发生什么情况取决于数据库的后端以及您是否打开了详细的错误报告。

惰性web开发人员为所有客户端无条件启用详细错误报告并且不会关闭它是很常见的。 (道德:只能为非常严格的可信网络启用详细的错误报告,如果有的话)。这样的错误报告通常包含一些关于数据库结构的有用信息,攻击者可以使用这些信息来确定下一步要去哪里。

现在考虑用户名'; DESCRIBE TABLE users; SELECT 1 FROM users WHERE 'a'='。所以它会继续......这里有几种不同的策略,具体取决于数据如何发布。存在SQL注入工具包,可以自动执行此过程并尝试通过不安全的Web界面自动转储数据库的全部内容。 Rafal Los's blog post包含更多的技术洞察力。

您并不仅限于盗窃数据;如果你可以插入任意的SQL,那么obligatory xkcd reference说明它比我更好。

+0

正是我在找的东西。谢谢! – 2010-06-01 21:24:06

+1

应该指出,并非每个数据库都允许查询堆叠。例如mysql5引入了它,但mysql_query()仍然只接受1个查询。 – rook 2010-06-01 22:13:58

2

您会在这里找到详细的信息:

http://blogs.technet.com/b/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx

这些线是双重编码 - 该 第一组编码的字符,这 将由IIS被翻译,是 由%XX表示。例如,%20是一个 空间。第二组不意味着被翻译,直到他们到达 SQL Server并且他们使用SQL中的char(xxx) 函数。

+0

我熟悉char()。这是什么字符串瞄准? – 2010-06-01 20:24:24

2
' and char(124)+user+char(124)=0 and ''=' 

这strange..however,确保你逃串所以不会有SQL注入

+0

这些都是在上课之前被数据库清理过的,所以我相当肯定没有任何进展。 – 2010-06-01 20:23:41

+0

干得好,你没有什么好担心的:) – 2010-06-01 20:27:33

+0

我还是想了解它:) – 2010-06-01 20:32:29

2

其他人已经覆盖了是怎么回事,所以我要花点时间让我的高马和强烈建议,如果您尚未(我怀疑不是从下面的注释),您使用参数化查询。他们从字面上使你免于SQL注入,因为它们导致参数和查询完全分开传输。还有潜在的性能优势,yadda yadda等。

但是认真地做到这一点。

相关问题