邮件那些事3—解析邮件Received数量问题与识别发件人IP
2015-10-20 13:21
651 查看
通过前两节的内容,读者是否对邮件的整个传输结构有了一定的了解呢,那么接下来我们学习邮件头的解析,邮件头会根据不同的邮件服务器产生不同的结构,但大致一定会有的,也是我们重点关注的结构有两个:
一个是邮件的发送和接收者描述部分
一个是邮件系统添加的部分也就是Received部分
比如使用163免费邮箱的张三(zhangsan)想要给李四(lisi)发送一个邮件,那么会经过如下步骤:
首先张三调用客户端或者网页发送邮件,有网页或者客户端添加如下字段:
Date: Wed, 21 Oct 2015 14:19:00 +0800 (CST)
From: =?GBK?B?1cW729TG?= <zhangsan@163.com>
To: lisi@qq.com
Subject: =?GBK?B?zfjSs7eizfjSsw==?=
X-Priority: 3
X-Mailer: Coremail Webmail Server VersionSP_ntes V3.5 build(通常是网页发送的)
有张三的邮件服务器接受张三的邮件,添加Received字段,意思是从张三处接收到了邮件
Received: from zhangsan$163.com ([1.189.181.14] ) by ajax-webmail-wmsvr3
(Coremail) ; Wed, 21 Oct 2015 14:19:00 +0800(CST)
接下来由李四接受服务期添加Received字段,意思是从张三的邮件服务器处接受到了邮件。
Received: from zhangsan$163.com ([1.189.181.14] ) by ajax-webmail-wmsvr3
(Coremail) ; Wed, 21 Oct 2015 14:19:00 +0800(CST)
最后邮件会变成如下样子:当然这中间也可能有其他字段一般不同的邮件服务器添加不同的可选项字段,通常是X- 开头。
Received: from m13-3.163.com (unknown[220.181.13.3])
bynewmx84.qq.com (NewMx) with SMTP id
for<lisi@qq.com>; Wed, 21 Oct 2015 14:19:01 +0800
Received: from zhangsan$163.com ([1.189.181.14] ) by ajax-webmail-wmsvr3
(Coremail) ; Wed, 21 Oct 2015 14:19:00 +0800(CST)
Date: Wed, 21 Oct 2015 14:19:00 +0800 (CST)
From: =?GBK?B?1cW729TG?= <zhangsan@163.com>
To: lisi@qq.com
Subject: =?GBK?B?zfjSs7eizfjSsw==?=
X-Priority: 3
X-Mailer: Coremail Webmail Server VersionSP_ntes V3.5 build
每个字段的意思大家应该能够理解,其中包括发送者、接受者、发送日期、优先级、发送媒介(客户端or网页);发送服务器添加Received;接受服务器添加Received;
那么,当笔者(笔者是搞信息安全的,接触大规模恶意代码和恶意邮件)分析众多邮件时发现,有的时候,仅仅只有一个Received:有的时候确有两个!甚至更多(下一节伪造邮件发件人时介绍这种情况)那么这是为什么呢?于是乎我采取了测试方法,主要这里面有四种情况:
1. 网页发送网页
2. 网页发送客户端
3. 客户端发送网页
4. 客户端发送客户端
笔者亲测四种情况来八一八谜团:
网页发网页
可以看出:网页发网页
原始IP是发送者IP,有原始IP字段
且有两个received
网页发客户端
网页发客户端,
只有一个received
原始IP是发送者IP,有原始IP字段
而且客户端带有头
不同客户端有不同客户端的标签字段。
客户端发网页
没有IP字段,但接受字段有IP
有两个received
客户端发客户端
没有IP,但接受字段有IP
最后通过测试总结如下:
如果是网页发,那么肯定有原始IP字段,相反客户端发就没有
如果是网页接受,那么指定有两个received ,相反,如果是客户端接收就有一个received
这下大家清楚了吧。那么如果出现多个received或者发件人可疑那么极有可能该邮件是通过伪造所得的,详细信息关注笔者的下一篇博文《邮件那些事4—浅析伪造发信人的原理与识别》
那么原始IP问题,可见无论是网页发送还是客户端发送,都是有原始IP可以溯源的。
注:笔者也是现学现卖如果有错误之处,请大神帮助矫正。
一个是邮件的发送和接收者描述部分
一个是邮件系统添加的部分也就是Received部分
比如使用163免费邮箱的张三(zhangsan)想要给李四(lisi)发送一个邮件,那么会经过如下步骤:
首先张三调用客户端或者网页发送邮件,有网页或者客户端添加如下字段:
Date: Wed, 21 Oct 2015 14:19:00 +0800 (CST)
From: =?GBK?B?1cW729TG?= <zhangsan@163.com>
To: lisi@qq.com
Subject: =?GBK?B?zfjSs7eizfjSsw==?=
X-Priority: 3
X-Mailer: Coremail Webmail Server VersionSP_ntes V3.5 build(通常是网页发送的)
有张三的邮件服务器接受张三的邮件,添加Received字段,意思是从张三处接收到了邮件
Received: from zhangsan$163.com ([1.189.181.14] ) by ajax-webmail-wmsvr3
(Coremail) ; Wed, 21 Oct 2015 14:19:00 +0800(CST)
接下来由李四接受服务期添加Received字段,意思是从张三的邮件服务器处接受到了邮件。
Received: from zhangsan$163.com ([1.189.181.14] ) by ajax-webmail-wmsvr3
(Coremail) ; Wed, 21 Oct 2015 14:19:00 +0800(CST)
最后邮件会变成如下样子:当然这中间也可能有其他字段一般不同的邮件服务器添加不同的可选项字段,通常是X- 开头。
Received: from m13-3.163.com (unknown[220.181.13.3])
bynewmx84.qq.com (NewMx) with SMTP id
for<lisi@qq.com>; Wed, 21 Oct 2015 14:19:01 +0800
Received: from zhangsan$163.com ([1.189.181.14] ) by ajax-webmail-wmsvr3
(Coremail) ; Wed, 21 Oct 2015 14:19:00 +0800(CST)
Date: Wed, 21 Oct 2015 14:19:00 +0800 (CST)
From: =?GBK?B?1cW729TG?= <zhangsan@163.com>
To: lisi@qq.com
Subject: =?GBK?B?zfjSs7eizfjSsw==?=
X-Priority: 3
X-Mailer: Coremail Webmail Server VersionSP_ntes V3.5 build
每个字段的意思大家应该能够理解,其中包括发送者、接受者、发送日期、优先级、发送媒介(客户端or网页);发送服务器添加Received;接受服务器添加Received;
那么,当笔者(笔者是搞信息安全的,接触大规模恶意代码和恶意邮件)分析众多邮件时发现,有的时候,仅仅只有一个Received:有的时候确有两个!甚至更多(下一节伪造邮件发件人时介绍这种情况)那么这是为什么呢?于是乎我采取了测试方法,主要这里面有四种情况:
1. 网页发送网页
2. 网页发送客户端
3. 客户端发送网页
4. 客户端发送客户端
笔者亲测四种情况来八一八谜团:
网页发网页
可以看出:网页发网页
原始IP是发送者IP,有原始IP字段
且有两个received
网页发客户端
网页发客户端,
只有一个received
原始IP是发送者IP,有原始IP字段
而且客户端带有头
不同客户端有不同客户端的标签字段。
客户端发网页
没有IP字段,但接受字段有IP
有两个received
客户端发客户端
没有IP,但接受字段有IP
最后通过测试总结如下:
如果是网页发,那么肯定有原始IP字段,相反客户端发就没有
如果是网页接受,那么指定有两个received ,相反,如果是客户端接收就有一个received
这下大家清楚了吧。那么如果出现多个received或者发件人可疑那么极有可能该邮件是通过伪造所得的,详细信息关注笔者的下一篇博文《邮件那些事4—浅析伪造发信人的原理与识别》
那么原始IP问题,可见无论是网页发送还是客户端发送,都是有原始IP可以溯源的。
注:笔者也是现学现卖如果有错误之处,请大神帮助矫正。
相关文章推荐
- LeetCode(116) Populating Next Right Pointers in Each Node
- Android Studio 打包及引用 aar
- LeetCode(116) Populating Next Right Pointers in Each Node
- 基于Boost库的C++文件遍历
- android studio 插件添加方式
- Item 42:typename的两种用法 Effective C++笔记
- 操作符
- Java反射之java.beans包
- postgresql vacuum操作
- 百度脑图
- javascript基础01
- list 集合
- Light Bulb(三分)
- Xcode7中你一定要知道的炸裂调试神技
- 安装使用 redis
- centos 入门1 安装和网络配置
- WebStorm 10.0.4注册码
- c:foreach遍历循环List<Map>
- css类的两种使用方法
- 优先队列