PHP代码审计入门:常见的危险函数和审计点

01什么是危险函数

函数设计出来就是让人使用的,之所以危险,是因为其功能过于强大.开发人员特别是刚从业的人员很少会完整阅读完整个文档,再或者是没有意识到当给这些函数传递一些非常规的,外部可控的参数会带来什么影响,所以踩坑的几率非常大.

所以在进行代码审计的时候,比较多的部分都是在审计调用这些危险函数的时候,参数是不是外部可控的.有没有进行正确的过滤.

PHP代码审计入门:常见的危险函数和审计点_第1张图片

02 PHP危险函数5大特征

PHP代码审计入门:常见的危险函数和审计点_第2张图片


2.1 能够执行任意代码的函数有三种:

  • 第1种是最常见的,会把传入的字符串当作php代码直接执行

PHP代码审计入门:常见的危险函数和审计点_第3张图片


  • 第2种是通过引入文件执行php代码,php里引入文件执行代码的只有4个函数

PHP代码审计入门:常见的危险函数和审计点_第4张图片


  • 第3种是一些数据处理函数,它们存在支持回调函数类型的参数,这个参数可以传入函数的字符串名称,一旦这个参数可控,那么可能造成漏洞,这些函数的特征非常明显,参数类型是callback形式,审计的基本上就是看他们的回调函数是不是用字符串的形式传递,是否可控,在PHP里存在大量的这种函数,这里只举5个比较常见的

v2-f3786742229c68bd3d1b0ef009421231_b.jpg


2.2 常见能够读取网络资源的函数
常见能够读取网络资源的函数,审计点一般是发起网络请求时有无白名单,否则存在SSRF漏洞

v2-1b207757f11c1f039e4a1ab0e612193f_b.jpg



2.3 能够执行系统命令或者调用外部程序的函数

能够执行系统命令或者调用外部程序的函数,这些函数使用不当容易引起命令注入,一般需要通常需要结合escapeshellcmd或escapeshellarg函数过滤传入的变量

PHP代码审计入门:常见的危险函数和审计点_第5张图片


2.4 能够操作文件(读写,移动,删除)的函数

能够操作文件(读写,移动,删除)的函数,在审计的时候也要注意传入的变量是否可控,是否存在穿越目录,导致任意文件读写的情况


2.5 能够修改运行时候的上下文环境(覆盖变量/函数)

v2-0c4f2fada158aef8531d9e4c8103fb40_b.jpg


03 编程语言自身的特性

脚本语言的特点就是灵活,所以语言本身的设计上有很多动态的设计,比如:动态类型,可变变量,可变函数


3.1 动态类型

动态类型可能导致一些比较条件的时候绕过,比如true == 'a'这个条件在PHP里为真,动态类型带来的条件判断问题,很多开发者都会在上面踩坑,详细的规则可以看php的官方文档

php.net/manual/zh/types


3.2 可变变量

可变变量就是有2个$符号的变量,比如这2行代码,其实声明了3个变量,1个是$a,1个变量是$b,还有一个是$hello,之所以有$hello这个变量,是因为第3行的$$a,是把$a的值当成一个变量名使用.当$a的值可控的时候,就可以覆盖其它已经定义的变量,比如当$a的值是b的时候,第三行的$$a就会把$b的test覆盖成world.

        
      

3.3可变函数

可变函数就是一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它,比如这段代码会输出function hello

        $a = 'hello';
function hello(){
echo 'function hello';
}
$a();
      

所以审计的时候也需要关注可变函数的变量是否可控。

04 小结

对于敏感函数的审计点,无非就是参数是否可控,是否有严格的过滤,过滤方案是不是业界最优解,然后去回溯这些参数的调用过程,看看在哪一步没有过滤或者是过滤不严的地方.整个审计的过程是比较枯燥的,而且可能要审计很久能发现一个漏洞甚至是没有任何发现。

既然审计套路这么固定,肯定有一些现成的工具,下面就给大家介绍2款。

  • 第一款是rips,这款工具是用php写的,开源版本虽然停更已久,现在主推商业版本,不过近几年来php所添加的函数,并没有增加多少危险函数,所以这款工具还是可以使用的.而且它使用了php自带语法分析函数token_get_all来分析上下文,相比一些依赖正则表达式的审计工具准确度有不少的提升。


  • 第二款工具是Seay,这款工具是法师的代码审计系统,同样有自动审计的功能,还能列出单个php文件里的所有变量和函数,以及这些变量的生命周期。扫描结果里面同样也是一些漏洞点的信息,验证的话可以双击某一条漏洞转到到源码的地方审计。

涨姿势的点赞集合哟~

你可能感兴趣的:(PHP代码审计入门:常见的危险函数和审计点)