password
status
date
icon
category
tags
slug
summary

0x00 前言

打算开发一款根据人名枚举企业邮箱的工具,简单的记录下踩的坑。

0x01 生成字典

采集了几万个人名,又从网上找了 top500 的人名,经过分析,发现人名拼音大致符合二八原则。百分之二十的拼音就已经覆盖了百分之八十的人名。
常用的姓拼音有 111 个,其中有 55 个占据了绝大部分(20 个大概占据了 80%+)
拼音一共 400+,常用的名拼音有 186 个,其中 79 个占据了绝大部分。
都取绝大部分,考虑到 2 个字和 3 个字的情况,共 55*79*80 = 347 600
这个数量勉强还在接受范围内。

0x02 准确率

一般验证邮箱是否存在都是连接邮件服务器然后发送一个请求,根据返回值来确认邮箱是否存在。
返回 250 或者 451 则邮箱存在,返回 550 则邮箱不存在
发现腾讯企业邮箱对于不存在的邮箱有时会返回 250,验证影响准确率,网上所有的开源检测工具据测试准确率只有 50%-60%左右,这个准确率完全无法接受。
发现网上的部分付费邮箱验证服务可以高概率判断邮箱是否存在,而开源的判断成功率都只有 50%多一点,故想搭建邮箱服务器偷一手付费邮箱验证服务的包,然后就是一大堆坑😭。
  • 一开始是用的 fapro 搭的 smtp 服务,发现并因为它啥都返回 250,部分付费的会认为它是 Catch-all 邮箱。
  • 后来搭建了真正的 smtp 服务,但是因为不清楚企业邮箱的过滤规则,没法还原出一样的场景,导致抓到的包并不好用。
  • 终极方案:用 Python 写了个 tcp 转发脚本。逻辑如下
    • 邮箱验证服务 - 我的邮箱服务器 - 将邮箱替换 - 转发到企业邮箱服务器
      代码
通过终极方案,偷学了国内外十多家卖邮箱识别业务的技术,发现了好几种可以增加识别率的办法,我这里使用了两种:
  • 随机且不同的 HELOMAIL FROM
  • 250 后不断开立马再验证一个为不存在的邮箱,
  • 多次验证
经过测试,对于准确率还可以,已经可用。
重复次数 3 次的时候准确率大概是97%

0x03 云函数

考虑到隐匿及封 ip 等问题,故考虑使用云函数进行发包。云函数正适合这种请求多,流量少的场景。因为函数burst 的限制,一次调用云函数需要尽可能发送多个验证请求减少云函数并发。初步设想如下
客户端异步请求云函数 云函数每分钟运行 300 - 400 次 在考虑到云函数内存有限的情况下每次尽可能多的验证邮箱,因为按次计费,不能一次只验证一个 注意:除了云函数执行时间拉满外别忘了 api 超时时间也拉满
云函数代码如下
传入邮箱服务器地址需要验证的邮箱列表及需要调用的次数,进行验证后返回验证的结果。

0x04 客户端

我目前的策略是先统一验证 3 次再验证匹配到的 5 次,虽然按照我写的逻辑,这和直接验证 8 次请求量一样,但是发现有些时候短时间内对同一个邮箱验证太多次会触发风控,分成两批次验证,间隔时间比较长,经测试效果比直接 8 次好。
感觉算法还有非常多可以优化的地方,不过最近精力很差,就先这样吧,后续用到再改进。
使用时需要修改云函数 api 以及邮箱的格式,第三方库只有一个 httpx
 
HACKTHEBOX加速与共享Systemd Miner挖矿木马分析及清理
公告
password
status
date
icon
category
tags
slug
summary
年轻时,你的潜力是无限的。说实在的,任何事都有可能做成。你可以成为爱因斯坦,也可以成为迪马吉奥。直到某一天,你身上的可能性消失殆尽,你没能成为爱因斯坦,你只是一个无名之辈。那真是糟糕的时刻。
🔮
所谓魔法不过是我们尚未了解的科学。
📚
潜心学习,低调发展。