SQL注入原理深度解析(2)
作者:康凯 来源:asp之家 发布时间:2010-02-21 11:46:00
以下为引用的内容:
Stringquery="SELECTidFROMuser_tableWHERE"+
"username='"+username+"'AND"+
"password=PASSWORD('"+password+"')";
上述代码认为字符串username和password都是数据,不过,攻击者却可以随心所欲地输入任何字符。如果一位攻击者输入的用户名为
’OR1=1—
而口令为
x
那么查询字符串将变成下面的样子:
以下为引用的内容:
SELECTidFROMuser_tableWHEREusername=''OR1=1--'ANDpassword
=PASSWORD('x')
该双划符号--告诉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注射将会不期而至。


猜你喜欢
- 北京时间11月14日上午消息,据国外媒体今日报道,美国社交网站Ning已经搬迁到了Facebook原先的办公场所—&am
- Dedecms 5.5 实现自定义标题处理,在 {dede:function}@me='64edu.com'.@me{/de
- 当全世界大多数行业面临危机和困境的时候,Google的利润和市值依然迅速增长,Google暴利的背后到底隐藏了什么秘密。本文将第一次在世界上
- 1、配置系统管理(Admin Web Application)大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的
- 在很多关于内链建设的文章中,对内链建设的策略和注意事项方面很少有涉及,SEOmoz的randfish他们最近做了一个关于内部链接锚文本相关的
- 国内3G陆续开放了,越来越多的人会开始尝试手机上网,而且未来必然有很多普通网民将移动接入作为常用的上网方式。对于网页设计师来说,移动web设
- 一 环境Install VMware Tools on CentOS 7 to enable host shared folder acce
- 我很庆幸,自己从一个初二文化的不良青年到现在拥有五个站的小站长,这个过程很简单也很艰辛。2004年是我第一次接触网页,在中联网申请了自己的第
- VMware虚拟机下Centos7 桥接方式网络配置完整步骤,供大家参考,具体内容如下一、打开虚拟机的设置页面,设置虚拟机桥接模式如图:选择
- 前不久,在研究SEO时发现一个好东东Dmoz(The Open Directory Project/ODP),是一个人工编辑管理的目录集合,
- 竞争深度的构成1。网站年龄2。关键词扁平化程度3。域名4。内链5。外链6。更新速率7。关键词搜索量在以上的主要因素中,网站的年龄起着至关重要
- 国内知名IT企业金山软件近日宣布,旗下业务增长重心之一金山毒霸将与泰国知名网游运营商Asiasoft合作,正式进军泰国市场,并推出泰文版金山
- 一位网友在JavaEye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力。由于架构模式和部署
- 1)了解搜索引擎如何抓取网页和如何索引网页。你需要知道一些搜索引擎的基本工作原理,各个搜索引擎之间的区别,搜索机器人(SE robot或叫w
- Google®站长工具为你提供了访问与Google如何crawled及索引你的网站的有关的数据。这一免费特征:•
- 如果在Docker 中采用 docker search centos采用 docker pull docker.io/centos 下载基础
- 打开:require/sendemail.php查找第一个(269行左右):fwrite($fp, $msg); 在此行
- 上一篇文章已经安装好了虚拟机和Linux系统了,这次就来简单的说一下LInux系统的网络配置吧简单介绍Linux的文件夹bin:存放的是用户
- 有时在博客评论和论坛里看到有朋友说我们写的SEO技巧不够具体,感觉无从下手,这样的问题经常让分享技巧的人也有点无奈,不知道该具体到什么程度。
- 进入2007年后半年以来,有很多有钱的人都喜欢买个网站来运营。从站长网等一些大站也看得出来网站的交易量比以前大大增加。本人这段时间也曾交易过