利用Opcache缓存RCE以及"/."trick

本文介绍了如何利用Opcache实现远程代码执行(RCE)。通过理解PHP路径处理原理,利用"."技巧绕过后缀名过滤,结合Opcache的缓存特性,创建和覆盖index.php,最终达成RCE。同时,文章还探讨了Opcache的工作原理,解释了为何启用Opcache能提升PHP性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2019年3月21日10:20:01

源码:

	<?php
	error_reporting(0);
	
	$dir = 'sandbox/' . sha1($_SERVER['REMOTE_ADDR']) . '/';
	if(!file_exists($dir)){
	  mkdir($dir);
	}
	if(!file_exists($dir . "index.php")){
	  touch($dir . "index.php");
	}
	
	function clear($dir)
	{
	  if(!is_dir($dir)){
	    unlink($dir);
	    return;
	  }
	  foreach (scandir($dir) as $file) {
	    if (in_array($file, [".", ".."])) {
	      continue;
	    }
	    unlink($dir . $file);
	  }
	  rmdir($dir);
	}
	
	switch ($_GET["action"] ?? "") {
	  case 'pwd':
	    echo $dir;
	    break;
	  case 'phpinfo':
	    echo file_get_contents("phpinfo.txt");
	    break;
	  case 'reset':
	    clear($dir);
	    break;
	  case 'time':
	    echo time();
	    break;
	  case 'upload':
	    if (!isset($_GET["name"]) || !isset($_FILES['file'])) {
	      break;
	    }
	
	    if ($_FILES['file']['size'] > 100000) {
	      clear($dir);
	      break;
	    }
	
	    $name = $dir . $_GET["name"];
	    if (preg_match("/[^a-zA-Z0-9.\/]/", $name) ||
	      stristr(pathinfo($name)["extension"], "h")) {
	      break;
	    }
	    move_uploaded_file($_FILES['file']['tmp_name'], $name);
	    $size = 0;
	    foreach (scandir($dir) as $file) {
	      if (in_array($file, [".", ".."])) {
	        continue;
	      }
	      $size += filesiz
<think>我们正在解决用户关于“清理Zabbix界面缓存”的问题。用户提到的是index.php,这通常与Web界面相关。根据引用内容,安装涉及Web前端(zabbix-web-mysql)和Nginx配置(zabbix-nginx-conf)或Apache(zabbix-apache-conf-scl),但清理缓存的方法通常与Web服务器无关,而是与Zabbix前端应用本身有关。由于引用中没有直接提到如何清理界面缓存,我们需要根据Zabbix的常规维护知识来回答。Zabbix的前端(PHP编写)可能会在浏览器中缓存一些静态资源(如JS、CSS),但用户可能指的是服务器端的缓存或者需要强制刷新浏览器缓存。通常,清理Zabbix界面缓存的方法包括:1.**浏览器端缓存清理**:-强制刷新浏览器缓存:在浏览器中按下Ctrl+F5(Windows/Linux)或Cmd+R(Mac)来强制刷新页面并忽略缓存。-清除浏览器缓存:通过浏览器设置清除缓存。2.**服务器端Zabbix前端缓存**:-Zabbix前端在服务器上会生成一些缓存文件,位于`/usr/share/zabbix/assets`子目录下(具体路径可能因安装方式不同而略有差异)。可以删除这些缓存文件,然后重启Web服务(Apache或Nginx)以重新生成。-常见的缓存路径:-`/usr/share/zabbix/assets`-`/var/www/html/zabbix/assets`(如果使用Apache,且默认DocumentRoot)具体步骤(以常见路径为例):a.删除assets下的缓存文件:`sudorm-rf/usr/share/zabbix/assets/*`b.重启Web服务器:-对于Apache:`sudosystemctlrestarthttpd`或`sudosystemctlrestartapache2`-对于Nginx:`sudosystemctlrestartnginx`3.**Zabbix的PHP会话缓存**:Zabbix使用PHP会话,可以清除PHP的会话存储目录(通常为`/tmp`或`/var/lib/php/session`),但这通常不需要,除非有会话问题。由于用户特别提到了`index.php`,我们也可以尝试重新生成Zabbix前端文件缓存:4.**重新部署前端文件**:有些安装方式(如源码编译)可能需要重新部署前端,但使用包管理安装一般不需要。注意:在操作前,建议备份重要文件。另外,如果Zabbix前端是通过包管理器安装的,也可以尝试重新安装前端包来恢复默认文件,但这不是清理缓存的首选方法。根据上述引用,用户使用的是RPM包安装,所以我们可以按照删除assets缓存文件的方法操作。因此,给出以下步骤:步骤:1.删除Zabbix前端缓存目录(assets)中的内容:```bashsudorm-rf/usr/share/zabbix/assets/*```2.重启Web服务器(根据引用[2]使用了Apache?但引用[1]中安装的是Nginx?这里需要用户确认。由于引用[1]和[2]的安装方式不同,用户需要根据实际安装的Web服务器来操作):-如果使用Nginx:```bashsudosystemctlrestartnginx```-如果使用Apache:```bashsudosystemctlrestarthttpd#或apache2,取决于系统```3.清除浏览器缓存,然后重新访问Zabbix界面。注意:由于Zabbix的assets目录是存放编译后的前端资源(如CSS、JS等),删除后重启Web服务,Zabbix会自动重新生成这些文件。这不会影响配置数据(因为配置在数据库中)。补充:如果用户在使用过程中遇到了界面显示问题,可能是由于升级Zabbix后浏览器加载了旧的前端资源,清理服务器端缓存和浏览器缓存通常可以解决。如果问题仍然存在,可以检查Zabbix前端文件权限,确保运行Web服务器的用户(如nginx用户或apache用户)对`/usr/share/zabbix/assets`有读写权限。根据引用[3][4]中的配置,我们并没有看到与缓存相关的配置项,所以不需要修改配置文件。因此,回答如下:</think> ### 如何清理 Zabbix 界面缓存(index.php) 在 Zabbix 中清理界面缓存主要通过以下步骤实现: #### 1. **删除前端缓存文件** Zabbix 的前端缓存主要存储在 `assets` 目录中,执行以下命令: ```bash # 清理预编译的前端资源 sudo rm -rf /usr/share/zabbix/assets/* # 重启 Web 服务(根据实际环境选择) sudo systemctl restart nginx # 如果使用 Nginx(如引用[1]) 或 sudo systemctl restart httpd # 如果使用 Apache(如引用[2]) ``` 这会强制 Zabbix 在下次访问时重新生成静态资源(CSS/JS/图片等)。 #### 2. **清除浏览器缓存** 由于 `index.php` 是动态文件,浏览器可能缓存旧版界面: - 强制刷新页面:`Ctrl+F5`(Windows/Linux)或 `Cmd+Shift+R`(Mac) - 清除浏览器缓存:在浏览器设置中清除历史记录和缓存文件 #### 3. **清理 PHP OpCache(如启用)** 若服务器配置了 PHP OpCache,需重置缓存: ```bash sudo systemctl restart php-fpm # 重启 PHP 处理器 或创建重置脚本: echo "<?php opcache_reset(); ?>" > /usr/share/zabbix/reset_cache.php 访问 http://zabbix-server/reset_cache.php 后删除该文件 ``` #### 4. **验证结果** 访问 Zabbix 登录页并检查版本: ``` http://your-zabbix-server/zabbix/index.php ``` 注意页面底部版本号是否更新(如 `6.4.x`)。 > ⚠️ **注意事项** > 1. 操作前备份配置文件(如 `zabbix.conf.php`) > 2. 如果界面异常,检查目录权限: > ```bash > sudo chown -R nginx:nginx /usr/share/zabbix/assets/ # Nginx 用户 > ``` > 3. 更新后首次加载可能较慢(需重新生成缓存) 引用[1][3][4]显示 Zabbix 的核心配置(如数据库连接)在 `zabbix_server.conf`,但界面缓存独立于服务端配置[^1][^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值