PHP 危险函数

代码审计存在漏洞的要点

(1)是否存在危险函数

(2)危险函数的变量是否可控

(3)逻辑漏洞需要理解业务的关系(越权、密码找回、登录框、短信轰炸、验证码爆破、验证码绕过、验证码识别、验证码不刷新)

1 代码执行函数

    php中可以执行代码的函数有: eval()、assert()、``、system()、exec()、shell_exec()、passthru()、 pcntl_exec()

    这些函数中的参数(部分)可控时,则可能命令注入漏洞。通常会使用escapeshellarg对参数进行处理,但在低版本的PHP库函数中该函数存在漏    洞(原因:Windows上未对反斜杠进行过滤),需要注意

2 文件包含代码注入

    include $file;

            变量$file 可控的情况下我们就可以包含任意文件。从而getshell目的

            另外再不同的配置环境,可以包含不同的文件,因此分为远程文件包含和本地文件包含。

            包含函数可以读取任意文件内容,这就需要用到【支持的协议和封装的协议】以及【过滤器】

            include($_GET['file']);

            ?file=php://file/convert.base64-encode/resource=index.php

            file是协议    convert.base64-encode 是过滤器

        include_once

        require

        require_once

条件:allow_url_include=On,PHP Version>=5.2.0

访问http://127.0.0.1/demo.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E时,即执行phpinfo()。


3.命令执行函数

    exec():执行一个外部程序

    passthru():执行外部程序并且显示原始输出

    proc_open() :执行一个命令,并且打开用来输入/输出的文件指针

    shell_exec():通过shell环境,并且将完整的输出以字符串方式返回

    system():执行外部程序,并且返回输出

    popen():通过popen()参数传递一条命令,并对popen()所打开的文件进行执行。

4.文件操作函数

    copy : 拷贝文件

    file_get_contents:将整个文件读入为一个字符串

    file_put_contents:将字符串写入文件

    file:把整个文件读入一个数组中

    fopen:打开文件或者url

    move_uploaded_file:将上传的文件移动到新位置

    readfile:输出文件

    rename:重命名一个文件或目录

    rmdir:删除目录

    unlink&delete :删除文件

5. 正则表达代码注入

preg_replace()函数:

    当pattern中存在/e模式修饰符,匹配上时,即允许执行replacement中的代码。

5.1 第一个(pattern)参数注入

条件:magic_quotes_gpc=Off,pattern参数中注入/e选项;

访问http://127.0.0.1/preg_replace1.php?reg=%3C/php%3E/e

即会执行phpinfo()

5.2 第二个人(replacement)参数注入

条件:pattern参数中带/e

提交 http://127.0.0.1/demo2.php?h=phpinfo()时, 即 执行phpinfo()。


参考:(1)php危险函数总结:https://www.cnblogs.com/tr1ple/p/11202512.html

(2)PHP代码执行函数:https://blog.csdn.net/weixin_34309435/article/details/91454503

(3)PHP代码执行漏洞总结:https://www.php.cn/php-weizijiaocheng-393985.html

(4)web渗透之php危险函数:https://zhuanlan.zhihu.com/p/134154861

你可能感兴趣的:(PHP 危险函数)