查看原文
其他

流量分析之还原邮件信息

哆啦安全 2022-07-23

The following article is from 取证知道 Author 小知

前言:上一期小知给大家分享了流量分析的第一篇文章-数据包的抓取。随后就有读者给小知发来了2个数据包,希望帮忙分析解答一下,今天小知就给大家分享下解答的过程,顺便给大家介绍下以后遇到这种情况,该如何去处理?

流量分析系列|流量数据包抓取

要求:

1、流量包1中上传图片中的字符串信息。

2、流量包2中涉及的邮箱。

3、流量包2中邮件的主题和内容。

4、流量包2中的邮箱附件文件。

第一题:

根据我们上一期的内容,很容易看到关键字“上传”“图片”

第一步:过滤上传的数据包,http.request.method=="POST"

第二步:在详细的封包区域找到相关的图片信息


第三步:将图片内容分组字节流导出,后缀名改为.jpg,即可得到字符串内容。


敲黑板:看到这里其实应该会有不少人有疑问,封包信息这么多,我怎么知道从哪里去找到上传图片的信息呢?其实这就是我们上一次给大家分享的时候说的,流量分析它要求我们的知识比较全面、扎实,下面给大家简单介绍下,如何看封包信息和重点关注的内容。

在详细的封包信息区域中,我们可以发现,每个数据包都有5层信息,对应以下具体的信息。

Frame:物理层的数据帧概况

Ethernet II: 数据链路层以太网头部帧

Internet Protocol Version 4:互联网层IP包头的信息

Transmission Control Protocol:传输层的数据段头部信息,此处是TCP协议。

Hypertext Transfer Protocol:应用层的信息,此处是HTTP协议

每一层我们关注的信息都是不一样的,接下来给大家介绍下:

物理层:主要的数据包中的帧信息,属于底层信息,这边对我有用的信息不多,主要的信息大家可以看下。

数据链路层:这块主要是以太网的头部帧,我们比较数据和关注的信息有MAC地址信息。

网络层:向传输层提供最基本的端到端的数据传送服务,主要包含源、目的IP信息

,在这里我们关注的主要有IP地址信息。

传输层:传输层主要定义传输数据的协议端口号,以及流量控制和差错校验(有TCP和UDP两种方式),这边我们关注的有端口号。

应用层:主要用于规定各应用程序的数据格式,涉及到具体的应用信息,如FTP、邮件等等信息都在这边的封包信息查找。

介绍完知识点,我们继续看

第二题:找涉及的邮件地址,题眼“邮件”,上期给大家分享了,邮件涉及到的协议有:smtp( 发件协议)、IMAP( 收件协议)、POP(收件协议)。

总共发现两个邮箱地址:84600XXX@qq.com和coolXX0104@qq.com

第三题和第四题其实都是一个类型,要提取邮件的内容和附件信息。首先看第三题:

1、通过过滤的数据包,可以发现有两封邮件。

2、对找到的邮件数据包,进行数据流追踪(邮件在网络传输以数据流传输)

3、对数据流信息进行分析


4、整理完成后,将文件后缀改为.eml,查看邮件,可以发现收发件人、主题等信息是正常的?但是发现内容无法显示

5、对照数据流分析,怀疑是编码方式的问题,将编码方式更改为BASE64,再次打开。

这时候得到邮件主题和内容。

6、同样的方法,找到带有附件信息的数据包,然后将其数据流复制出来。

7、复制的数据流为BASE64编码,如果要转成附件文件的话,需要将转换成二进制编码文件,故将复制出来的信息,利用Winhex进行转换。

8、转换完成以后,用Winhex查看两个文件的文件头部,发现为JPG和XLS格式,将文件后缀改成相应,即可得到数据。

9、至此我们对通过对流量的分析,拿到了邮件的信息和内容。、

最后再给大家介绍下邮件的常见编码方式:

传统的SMTP协议是基于ASCII码字符设计的,这种传统SMTP协议设计的SMTP服务器在处理邮件内容时只取出每个字节中的7个低bit位进行处理,而将最高bit位忽略不计,从而导致邮件内容不能出现中文字符或二进制数据。

很显然这是不现实的,所以人们将非ASCII字符的数据转换成可打印的ASCII字符后再发送,邮件阅读程序则按照相应的解码方式从邮件中还原出原始数据即可,比较常用的两种邮件编码方式为BASE64和Quoted-printable

扩展SMTP协议允许直接在邮件中传递二进制数据,而不用对它们进行邮件编码,这种没有进行邮件编码的二进制数据的邮件内容称为8bit编码。

7bit:ASCII字符并且没有经过编码

8bit:没有经过编码的原始数据,且其中包含有非ASCII字符的数据

Base64:将二进制数据转换成可打印的ASCII字符的编码方式,将一组连续的字节数据按6个bit位进行分组,然后对每组数据用一个ASCII字符来表示,典型标志是结尾带有”=“

Quoted-printable:将二进制数据转换成可打印的ASCII字符的编码方式,只对非ASCII字符的数据进行编码转化。每个非ASCII字符的字节数据,都被转换成一个"="号后跟这个字节的十六进制数据,典型的标志是带有多个”=“


【推荐阅读】

移动端过检测抓包最全解决方案

burpsuite在各场景下的抓包方法(建议收藏)


APP加固和脱壳方案总结

Android加固和脱壳原理探索

Android安全之定制ROM脱壳机浅析


Android10和11存储完全适配!

Android文件系统与Android11分区存储

Android11外部存储权限适配指南及方案


bundletool工具使用(Android aab包安装)

Google Play上架App之aab转apk和apk转aab的使用方法

Android App Bundle混淆加密加壳加固保护的解决方案(过Google App上架审核)


ASM插桩实现Android端无埋点性能监控

Gradle Plugin+Transform+ASM Hook并替换隐私方法调用(彻底解决隐私不合规问题)


关注,点赞,转发!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存