当前位置: 代码网 > 服务器>网络安全>脚本攻防 > SQL注入原理介绍

SQL注入原理介绍

2008年10月08日 脚本攻防 我要评论
SQL注入原理介绍 对于Web应用来说,注射式攻击由来已久,攻击方式也五花八门,常见的攻击方式有SQL注射、命令注射以及新近才出现的XPath注射等等。本文将以SQL注射为例,在源码级对其攻击原理进行深入... 08-10-08
四、构造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注射将会不期而至。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com