English
 电子信箱
 加入收藏

  威盾防火墙 >> 新闻中心 >> 业界动态 >> SQL注入原理深度解析

 

SQL注入原理深度解析

威盾防火墙 2015-01-07

 

该双划符号--告诉SQL解析器,右边的东西全部是注释,所以不必理会。这样,查询字符串相当于: SELECTidFROMuser_tableWHEREusername=''OR1=1

如今的SELECT语句跟以前的已经大相径庭了,因为现在只要用户名为长度为零的字符串''或1=1这两个条件中一个为真,就返回用户标识符ID——我们知道,1=1是恒为真的。所以这个语句将返回user_table中的所有ID。在此种情况下,攻击者在username字段放入的是SQL指令'OR1=1--而非数据。

四、构造SQL注射代码

为了成功地注入SQL命令,攻击者必须将开发人员的现有SQL命令转换成一个合法的SQL语句,当然,要盲注是有些难度的,但一般都是这样:

'OR1=1–

或者

')OR1=1--

此外,许多Web应用提供了带来错误报告和调试信息,例如,利用'OR1=1--对Web应用进行盲注时,经常看到如下所示的错误信息:

Errorexecutingquery:
YouhaveanerrorinyourSQLsyntax;
checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear
'SELECT(title,body)FROMblog_tableWHEREcat='OR1=1'atline1

该错误信息详细地为我们展示了完整的SQL语句,在此种情况下,SQL数据库所期待的好象是一个整数,而非字符串,所以可以注入字符串OR1=1--,把单引号去掉就应该能成功注入了。对于大多数SQL数据库,攻击者可以在一行中放入多个SQL语句,只要各个语句的语法没有错误就行。在下面的代码中,我们展示了如何将username设为'OR1=1并把password设为x来返回最后的用户ID:

Stringquery="SELECTidFROMuser_tableWHERE"+  "username='"+username+"'AND"+  "password=PASSWORD('"+password+"')";   

当然,攻击者可以注入其它的查询,例如,把username设为:

'OR1=1;DROPTABLEuser_table;--  而这个查询将变成:  SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;--'ANDpassword=PASSWORD('x');  它相当于:  SELECTidFROMuser_tableWHEREusername=''OR1=1;DROPTABLEuser_table;   

这个语句将执行句法上完全正确的SELECT语句,并利用SQLDROP命令清空user_table。

注射式攻击不必非要进行盲式攻击,因为许多Web应用是利用开放源代码工具开发的,为了提高注射式攻击的成功率,我们可以下载免费的或者产品的试用版,然后在自己的系统上搭建测试系统。如果在测试系统上发现了错误,那么很可能同样的问题也会存在于所有使用该工具的Web应用身上。

五、小结

我们在本文中向读者介绍了注射攻击的根本原因,即没有对数据和命令进行严格区分。然后通过一些程序源码对SQL的攻击进行了细致的分析,使我们对SQL注射机理有了一个深入的认识。如果您是一名web应用开发人员,那么您就当心了,一定不要盲目相信用户端的输入,而要对用户输入的数据进行严格的“消毒”处理,否则的话,SQL注射将会不期而至。


相关内容: 最新内容:
防护黑客必学招数 SQL注入拦截-MYIIS-VIF助你一臂之力[2015-01-07]
研究员开发新技术 抵御SQL注入攻击[2015-01-06]
关于JSP防范SQL注入攻击[2015-01-06]
ShopEx曝SQL注入漏洞电商网站面临“拖库”威胁[2015-01-06]
研究发现:黑客论坛讨论最多的是DDoS和SQL注入[2015-01-06]
超强JSP防SQL注入攻击[2015-01-06]
防护黑客必学招数 SQL注入拦截-MYIIS-VIF助你一臂之力[2015-01-07]
企业安全:黑客阻击技术攻防战[2015-01-06]
学习心得 TCP/IP攻击原理分析总结[2015-01-06]
详解TCP/IP协议栈面临的五大网络安全问题[2015-01-06]
应对网络威胁锐捷展示一站式安全防御[2015-01-06]
Bash漏洞来势凶猛 浪潮SSR主动防御[2015-01-06]