当遇到一个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_argv
register_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/
原文始发于微信公众号(船山信安):如何利用pear扩展实现rce
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论