代码审计学习-1

通用代码审计思路

1)根据敏感关键字回溯参数传递过程。

  我们挑其中的一条代码,双击该项直接定位到这行代码,在选中该变量后,在下方可以看到该变量的传递过程,并且点击下方的变量传递过程也可以直接跳转到该项代码处,可以非常直观地帮助我们看清整个变量在该文件的传递过程。另外我们可以看到$parentid变量是在如下代码段获得的:右键选中该代码定位该函数主体可以看到跳转到了class_function.php文件的314行

2)查找可控变量,正向追踪变量传递过程。

  

3)寻找敏感功能点,通读功能点代码。

4)直接通读全文代码。

  首先我们要看程序的大体代码结构,如主目录有哪些文件,模块目录有哪些文件,插件目录有哪些文件,除了关注有哪些文件,还要注意文件的大小、创建时间。我们根据这些文件的命名就可以大致知道这个程序实现了哪些功能,核心文件是哪些。在看程序目录结构的时候,我们要特别注意以下几个文件:1)函数集文件,通常命名中包含functions或者common等关键字,这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在文件头部包含到其他文件。寻找这些文件一个非常好用的技巧就是去打开index.php或者一些功能性文件,在头部一般都能找到。2)配置文件,通常命名中包括config关键字,配置文件包括Web程序运行必须的功能性配置选项以及数据库等配置信息。从这个文件中可以了解程序的小部分功能,另外看这个文件的时候注意观察配置文件中参数值是用单引号还是用双引号括起来,如果是双引号,则很可能会存在代码执行漏洞。3)安全过滤文件,安全过滤文件对我们做代码审计至关重要,关系到我们挖掘到的可疑点能不能利用,通常命名中有f ilter、safe、check等关键字,这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数,其他的则相对少见。而目前大多数应用都会在程序的入口循环对所有参数使用addslashes()函数进行过滤。4)index文件,index是一个程序的入口文件,所以通常我们只要读一遍index文件就可以大致了解整个程序的架构、运行的流程、包含到的文件,其中核心的文件又有哪些。而不同目录的index文件也有不同的实现方式,建议最好先将几个核心目录的index文件都简单读一遍。

  在学习代码审计的前期建议不要去读开源框架或者使用开源框架的应用,先去chinaz、admin5之类的源码下载网站下载一些小应用来读,并且一定要多找几套程序通读全文代码,这样我们才能总结经验,等总结了一定的经验,对PHP也比较熟悉的时候,再去读一些像thinkphp、Yii、ZendFramework等开源框架,才能快速地挖掘高质量的漏洞。

原文地址:https://www.cnblogs.com/ly584521/p/13207813.html