首页 > web开发 > 其他综合 > 正文
3.2 通读全文代码
2015-11-27 16:04:56     我来说两句      
收藏    我要投稿

前面提到的根据敏感关键字来回溯传入的参数,是一种逆向追踪的思路,我们也提到了这种方式的优缺点,实际上在需要快速寻找漏洞的情况下用回溯参数的方式是非常有效的,但这种方式并不适合运用在企业中做安全运营时的场景,在企业中做自身产品的代码审计时,我们需要了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞

通读全文代码也有一定的技巧,并不是随便找文件逐个读完就可以了,这样你是很难真正读懂这套Web程序的,也很难理解代码的业务逻辑,首先我们要看程序的大体代码结构,如主目录有哪些文件,模块目录有哪些文件,插件目录有哪些文件,除了关注有哪些文件,还要注意文件的大小、创建时间。我们根据这些文件的命名就可以大致知道这个程序实现了哪些功能,核心文件是哪些,discuz的程序主目录如图3-7所示。


 

在看程序目录结构的时候,我们要特别注意以下几个文件:

1)函数集文件,通常命名中包含functions或者common等关键字,这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在文件头部包含到其他文件。寻找这些文件一个非常好用的技巧就是去打开index.php或者一些功能性文件,在头部一般都能找到。

2)配置文件,通常命名中包括config关键字,配置文件包括Web程序运行必须的功能性配置选项以及数据库等配置信息。从这个文件中可以了解程序的小部分功能,另外看这个文件的时候注意观察配置文件中参数值是用单引号还是用双引号括起来,如果是双引号,则很可能会存在代码执行漏洞,例如下面Kuwebs的代码,只要我们在修改配置的时候利用PHP可变变量的特性即可执行代码。

<?php
/*网站基本信息配置*/
$kuWebsiteURL       = "http://www.kuwebs.com";
$kuWebsiteSupportEn         = "1";
$kuWebsiteSupportSimplifiedOrTraditional       = "0";
$kuWebsiteDefauleIndexLanguage                = "cn";
$kuWebsiteUploadFileMax                       = "2";
$kuWebsiteAllowUploadFileFormat   = "swf|rar|jpg|zip|gif";

/*邮件设置*/
$kuWebsiteMailType         = "1";
$kuWebsiteMailSmtpHost            = "smtp.qq.com";

3)安全过滤文件,安全过滤文件对我们做代码审计至关重要,关系到我们挖掘到的可疑点能不能利用,通常命名中有filter、safe、check等关键字,这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数,其他的则相对少见。而目前大多数应用都会在程序的入口循环对所有参数使用addslashes()函数进行过滤。

private static function _do_query_safe($sql) {
 $sql = str_replace(array('\\\\', '\\\'', '\\"', '\'\''), '', $sql);
 $mark = $clean = '';
 if (strpos($sql, '/') === false && strpos($sql, '#') === false && strpos($sql, '--') === false && strpos($sql, '@') === false && strpos($sql, '`') === false) {
  $clean = preg_replace("/'(.+?)'/s", '', $sql);
 } else {

4)index文件,index是一个程序的入口文件,所以通常我们只要读一遍index文件就可以大致了解整个程序的架构、运行的流程、包含到的文件,其中核心的文件又有哪些。而不同目录的index文件也有不同的实现方式,建议最好先将几个核心目录的index文件都简单读一遍。

上面介绍了我们应该注意的部分文件,可以帮助我们更有方向地去读全部的代码,实际上在我们真正做代码审计的时候,经常会遇到各种框架,这时候就会被搞得晕头转向,所以在学习代码审计的前期建议不要去读开源框架或者使用开源框架的应用,先去chinaz、admin5之类的源码下载网站下载一些小应用来读,并且一定要多找几套程序通读全文代码,这样我们才能总结经验,等总结了一定的经验,对PHP也比较熟悉的时候,再去读一些像thinkphp、Yii、Zend Framework等开源框架,才能快速地挖掘高质量的漏洞。

通读全文代码的好处显而易见,可以更好地了解程序的架构以及业务逻辑,能够挖掘到更多、更高质量的逻辑漏洞,一般老手会比较喜欢这种方式。而缺点就是花费的时间比较多,如果程序比较大,读起来也会比较累。

骑士cms通读审计案例

我们已经介绍了代码审计中通读全文代码审计方式的思路,下面我们用案例来说明这种通读方式。

为了方便大家理解,笔者找了一款相对简单容易看懂的应用骑士cms来介绍,版本是3.5.1,具体的审计思路我们在上文中已经有过介绍。

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.1 敏感函数回溯参数过程
下一篇:3.2.1.1 查看应用文件结构
相关文章
图文推荐
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站