本帖最后由 sijor 于 2020-8-29 17:23 编辑
最近一直在学习抓包解包,给大家分享一次E-mail的抓包解包的实验过程,共同学习,如有大神路过,请指点不足之处,多谢!
实验开始: 使用的是Foxmail给自己发送一张图片附件,发送前使用Wireshark捕获数据包,原图如下:
设置过滤条件:输入"smtp",可以清晰的看到SMTP发送邮件的详细过程了
对具体数据包的分析: 第54号数据包是客户端向服务器端发送的EHLO指令,向服务器表明自己的身份,在信息中可以看到客户端计算机的名字;接下来的第58号数据包是客户端向服务器端发送的AUTH LOGIN指令,请求登陆认证;接下来的第61号数据包中是经过加密登陆用户名,SMTP是不接收明文的,必须是通过64位的编码之后才能发送,采用的是Base64的加密形式;第63号数据包中是经过加密后密码;第68号数据包表示邮箱登陆成功;第69号数据包中是发送邮件的账户,第73号数据包中是接受邮件的账户;第75号是数据包中是客户端发送的内容;接下来第76号数据包可以看出服务器端使用了<CR><LF>接受了文本的内容,因为SMTP是属于请求应答的模式,都是基于ASCII文本,并且CR(车)LF(换行)作为结束符;第77~127号数据包就是所发送的数据,由于这个邮件数据比较多,因此分多个数据包进行发送;接下来的第129号数据包是发送邮件的账户和主题等等的信息.
恢复数据包中的图片文件:附件图片是以base64编码格式的TCP数据流,需要解码成二进制的图片文件,才能完美还原图片,但是在网上没有找到合适的软件,干脆自己用C语言写了一个Base64ToImage解码小工具 ( 贴中分享给大家的, 解压码:52pojie )
1.首先在任意数据包上点击邮件,选择跟随TCP数据流
2.接下来就可以看到完整的TCP数据流了
3. 从第①框中可以看出附件是一个图片格式的文件,第②框中就是图片Base64编码后的可见字符数据了,把这些数据复制到记事本中保存为TXT文件,最好是和Base64ToImage解码小工具放在同于文件夹下,当然也是为了操作方便.
4.不过在解码还原中间还要多做一步,大家是否注意到保存好的TXT文件中,Base64编码并是不连续的,那是因为服务器使用了<CR>回车<LF>换行的方式接收了附件
也就是说现在的数据流中每行中都多出了<CR><LF>这两个字符,也就是0D 0A这两个十六进制数,从WinHex中可以清晰的看出每76个字节就有一个0D0A,怎么办呐,相信这点是难不倒聪明的大家的,利用WinHex的替换功能就可以完美解决,这里就不在多熬述,其实还有个问题,大家有想过吗?如果发件人隐藏了附件格式,或者干脆把扩展名删除,大家还能不能分辨出是什么文件吗?可以思考一下哦!
5.去掉<CR><LF>后,就可以开始还原图片啦,命令行下进入Base64ToImage解码小工具目录,然后输入Base64ToImage TXT文件.txt 解码目标文件.jpg,哈哈!一闪而过,可以看到同目录下生成了一个Jpg格式的文件,这就是我们想要得到的附件了,
打开看看是不是和发送的附件图片一样呐!
实验总结:其实这其中还有很多可分析和借鉴的东西,我也是在不断学习的道路上,在此分享的目的是和大家共同学习,同时逼着自己不断提高自己的水平,希望大家多提宝贵意见. |