黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 网管频道 >> 入侵检测 >> 正文
·完美空间提供500M免费AS04-10·企业安全之YY内网准入以04-09
·企业安全之意识与策略04-09·剑走偏锋:IIS漏洞利用04-09
·我来免费网提供100M免费04-09·1122mb.com提供20G超大免04-08
·映像劫持与反劫持技术04-07·让所有"暴力删除工具"无04-07
·入侵88red系统的详细过程04-07·Sql Injection脚本注入终04-07
·vbs+delphi 反弹后门生成04-07·飞讯网提供100MB免费PHP04-07
·突破SQL注入攻击时输入框04-04·结合内核和病毒技术的最04-04
·Real Player rmoc3260.d04-04·亿万网络今月最后为您提04-04
·php+mysql 5 sql inject04-03·Real Player rmoc3260.d04-03
·oblog文件下载漏洞04-03·免费啦提供1G-2G免费全能04-03
·完全解析网页后门和挂马04-02·一句话开3389(只测试过04-02
·萧萧免费空间网提供100M04-02·谷道免费空间网提供1G免04-01
·从本地入手解决双线路由03-31·sablog 1.6 多个跨站漏洞03-31
·富文本编辑器的跨站脚本03-31·Cookie注入是怎样产生的03-31
[推荐]php代码不开源下的一种漏洞检测思路
      ★★★★★

php代码不开源下的一种漏洞检测思路

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-8-25 9:21:58

现在很多的php软件厂商为了一些目的都开始将自己的产品用Zend加密起来,当客户使用的时候根本不知道程序里面的细节,的确给那些搞安全的人很大的难度,所以一些厂商就开始认为只要是Zend过的产品都是安全的。但是其实不然,即使在不知道原代码并且不考虑Zend破解的情况下,我们一样可以利用 Php本身的一些特性来到达获取程序的一些商业逻辑以及信息以到达探测程序的漏洞等等。

测试程序的安全性方法一般有三种,第一是完全的不知道源代码,不知道程序内部处理的细节,完全靠输入的参数来猜测程序内部的细节以及可能出现的问题,另外一种就是能得到程序的代码知道代码的处理流程,通过对代码的分析来得到程序的问题。还有另外一种方式就是处于中间的灰盒测试,可以知道程序的一部分细节,这里我们要说的可能就属于这种方式了,因为我们知道Zend所谓的加密其实是将PHP代码转成了一个中间态的代码,在支持Zend加密的主机上最终都是跟正常的PHP文件一样被翻译成底层代码执行的,不过是源代码不可见罢了。但是要注意一点就是,这个加密代码是在我们提供的环境之中运行的,他用的语言环境是我们机器上的PHP,他所选择的数据库等存储系统是我们提供的文件系统或者Mysql等数据库,这就比单纯的黑盒测试多了很多可以利用的地方,因为我们完全可以控制他的运行环境,甚至大部分的处理结果对我们也是可见的,我们就有空子可钻了。

然后说说PHP代码里的常见漏洞,一般的漏洞包括有Sql注射,文件包含,代码执行,Xss注射,逻辑性错误......等等。在知道代码的情况下我们可以比较容易检测出大部分的漏洞,但是由于代码加密变的不可见,只采用一般的黑盒测试方法只能检测一些常见的漏洞,但是对于一些变量没初始化和一些逻辑错误无能为力。下面就说说在应用层如何探测程序的一些安全问题。

首先就是如何“调试”加密的PHP脚本的问题,这里的调试实际上是指如何让加密的PHP脚本在我们可以控制的环境下运行,我这里用的方法就是创建一个php文件来include包含执行需要调试的加密过的PHP文件,在include之前我们可以设置调试代码,在include执行完毕后我们还可以利用后面提到的方法查看脚本的一些信息。譬如我们要调试zend.php这个被加密的文件,就可以利用下面的方式:

eg <?php
//一些运行前的代码
echo "Just a example";
include 'zend.php';
echo "OK";
//一些运行后的代码
?>

这样zend.php里的东西就受我们的影响了。


然后要做的就是对代码的刺探了,很幸运的是PHP提供了很多的函数给我们使用,譬如比较有用的有:

get_defined_vars 返回由所有已定义变量所组成的数组 (PHP 4 >= 4.0.4, PHP 5)
get_declared_classes 返回由已定义类的名字所组成的数组 (PHP 4, PHP 5)
get_defined_constants 返回由已定义常量的名字所组成的数组
get_defined_functions 返回由已定义的函数
get_included_files 返回已经包含的文件名
......

大家可以去php手册里查下,利用这些函数我们就能做很多事情了,譬如我们知道某个加密的文件zend.php里面有我们很想要的东西,譬如数据库帐户密码,譬如某个加密的Key,譬如......那么我们就可以将这个文件利用上面的方法include出来,然后用 get_defined_vars函数看信息,例子如下:

eg <?php
include 'zend.php';
print_r(get_defined_vars);
?>

怎么样,出来了吧?同样,一些程序员通常把一些函数放到一个php文件里,我们就可以通过同样的方法得到这个php文件里定义了的函数了。

在一些程序破解里,经常有一个说法叫做Hook,其实我们在进行我们的测试的时候也可以进行简单的Hook。一个站点的SQL查询里经常蕴涵了很多的信息,如果知道了进行某个操作要用的SQL查询对我们的测试是很有用处的。我们有好几个方法,譬如更改php的mysql_query函数,在 Mysql方面做手脚,这里我们还是简单点看看应用层能做什么吧!一般的PHP代码都喜欢将Mysql操作封装起来放到一个文件里,我们就可以将这个文件替换掉,自己实现他需要实现的函数,在其中将他运行的SQL语句断下来保存(Thx Saiy),然后我们就可以分析这些SQL查询了,同样的道理,我们完全可以做出假的Function来到达猜测某些函数的功能的目的,在假的函数里用如下func_get_args函数就可以截获传入的参数。当然,这对于函数内部的细节还是不清楚的,但是很多时候已经足够了,起码把黑盒由文件级别降低到函数级别了,呵呵。

[1] [2] 下一页

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886