当遇到一个LFI漏洞时,如果想要进一步利用实现rce,那么就要结合其它的文件。网上看到了可以通过pearcmd.php文件来实现rce。本文就是记录一下这种方法。 利用条件1)服务器上安装pear,也就是存在pearcmd.php。同时知道pearcmd.php的文件路径 2)web环境下在php.ini中register_argc_argv设置为On 3)存在文件包含,可以包含php文件并且没有open_basedir的限制 前置知识pearcmd.php简介pecl是PHP中用于管理扩展而使用的命令行工具,而pear是pecl依赖的类库 如何安装安装pear PHP版本在7.3及以前,pecl/pear是默认安装的 在7.4以后,需要我们在编译的时候指定--with-pear才会安装 网上说,在dokcer任意的版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php。(然而总会遇到特殊的情况,没有这个文件的存在) 当没有这个文件存在时,可以尝试使用yum install php-pear去安装。 安装成功以后,执行pear命令可以得到 而pearcmd.php文件所在的位置在/usr/share/pear/pearcmd.php(不同的系统可能位置也不同,一般就是在/usr/local/lib/php/pearcmd.php目录下) register_argc_argvregister_argc_argv选项通俗的说就是控制是否可以通过$_SERVER[‘argv’]`获得命令行参数。为On则可以通过$_SERVER[‘argv’]获取命令行参数,反之则不可以。 如果存在php.ini的话,默认是Off。如果没有php.ini则默认是On。 如下所示,在cli中不受register_argc_argv参数的影响,在web页面要将该参数设置为On。 利用方式通过前面一段时间报出来的thinkphp任意文件包含漏洞来进行利用。在靶机可出网的情况下,可以直接拉取外网的脚本,方式如下: 另外 也可以通过将要执行的语句写入一个文件。 然后直接包含该文件 在测试过程中遇到的问题,我使用的php版本为PHP 5.4.16,通过上述命令写入的文件如下: 直接包含发现并不能执行php命令。后来发现是由于php.ini中的short_open_tag选项导致的。将该选项改为On就可这场执行命令。 这里存在一个问题,在不修改此选项的情况下,是否可以写入<?php phpinfo();?>方法来执行命令。 总结文件包含要找到适合包含的文件才能利用最大化,本文的方式只是一种,各位大佬是否还有其它的方式来达到rce的目标,可以来讨论。 来源:https://www.freebuf.com/
|