Featured image of post Fast Mail Bomber:爬取公共 Mailman 接口实现千量级邮件轰炸机

Fast Mail Bomber:爬取公共 Mailman 接口实现千量级邮件轰炸机

早年间我的一个小项目,网页邮件轰炸机,占据谷歌同类搜索第一名很长时间直到今天。现在我将它的威力放大了 10 倍,来看看它的实现原理吧。

免责声明:仅供学术研究使用。对于违反相关法律、造成危害的滥用行为,开发者不负任何责任。

前言

来源于我五六年前的一个项目:【居正】垃圾邮件轰炸机

最开始只是挂在网站上玩玩,然后就好几年都没管它了。最近一年来发现总有人以「邮件轰炸机」的验证消息加我 QQ 好友,还问怎么卖之类的。我感到很疑惑,我这个小破站什么时候盈利过了。。

后来在谷歌上一搜,直接震惊了。只要以「邮件轰炸」之类的关键词搜索,我这个小网页居然基本都是排第一名的。谷歌后台的数据也是如此:

这个小网页实现的原理,主要是内置一些 GET 就能调用的 mailman 接口,在执行时用 document.write 写 iframe,给目标邮箱发送 subscribe 的确认邮件。GNU Mailman 是一款很多国外网站有部署的 Newsletter 邮件套件,在默认配置中,没有 CSRF 和 captcha 验证,所以很容易被滥用。从网络上可以搜到很多这种接口。

由于年代久远,旧的邮件轰炸机里面的接口基本都不能用了,我本来也无心维护。但是就在不久前,有位旅居欧洲的老哥发邮件联系我,说自己被邮件诈骗了,发件人地址是一个美国的 IP,投诉无果,只能轰炸对方邮箱解气???

看了下随信附带的证据,被坑了两千多欧,好吧,确实挺惨的。所以我决定尽一点绵薄之力吧,虽然可能也没什么实质效果就是了。

于是我用 PHP 翻新了这个项目,项目地址:https://github.com/juzeon/fast-mail-bomber/ 项目中配有中文文档,使用起来很简单的。

2020/12/18更新了十分新手向的一个教程:传送门

实现

具体实现如下。

首先调用 Shodan(一个渗透时候用的信息搜集引擎)api 获取提供者(provider)列表,或者从本地文件导入。一个提供者一般来说会附带一个 listinfo 页面,这个页面里会包括很多接口节点(node),而接口节点是可以直接调用来发邮件的。比如这个是 centos 官网的 listinfo:

随便点一个接口节点进去:

是一个表单。填写这个表单提交后会发送一份确认邮件到目标邮箱,那么这种确认邮件就可以用来实行邮箱轰炸了。

虽然有些 mailman 服务器会增加 CSRF 验证或者验证码(比如 centos 官网上这个),但大部分都是毫无验证,直接打一个 GET 请求过去都能发邮件。

搜集一大堆这种 listinfo 后,再通过脚本依次访问,把里面的接口节点整合起来就能用了。

程序使用了 guzzle 这个 php 的 http 类库来实现多线程访问接口。

我抓取了一下,有效的 provider 大概快 200,能抓取到的 node 大概快 3000 了吧。如果全部循环一遍的话,确实是够呛的。更不用说循环多遍了。其实旧版的那个网页,接口也就 100 多个,声称能发 500 封是因为把接口循环了好几遍。。。

需要特别注意的是,发送邮件时,请求接口的这个 IP 地址会被暴露:

这就有点坑了。。所以用的时候,请一定要挂代理。

网页版

将原来那个网页版翻新了一下,提供给大家测试:https://www.skyju.cc/mailhzj.html

不建议用网页版,理由有以下:

  • 浏览器跨源政策限制,只能通过 iframe 调用接口节点,且无法查看成功与否,也无法查看进度。
  • 现代浏览器已经禁止了证书错误、TLS 1.0、TLS 1.1 等不安全的 HTTPS 连接。经测试发现很多 provider 明明证书配置错误还要强制 HTTPS,用网页版的话就完全没法用。PHP 本地版的就没这个限制。

所以我只在网页版中提供了refined_nodes.json,就是每个 provider 只精炼一个 node 的版本,为的是鼓励大家去用 PHP 本地版。

测试

请 54df 群里面的小伙伴帮忙用自己的邮箱测了下,已经把几家邮箱的测试结果都放到 github 上了。其中 zoho mail 的表现是最好的,在一般反垃圾配置下,轰炸 500 封几乎都有收到,大部分被拦截,小部分进了 Newsletter 归档。yandex 邮箱效果看起来更好,轰炸了 300 封只收到 60 封还全进了垃圾箱,但据说这家本身就很会漏邮件。。。

对于大部分邮箱来说,由于 mailman 默认配置中发送邮件的模板都是一样的,所以简单地添加以下字符串到邮件正文过滤列表中就可以防止这类轰炸:

1
Mailing list subscription confirmation notice for mailing list

但是 QQ 邮箱居然没有正文过滤的功能,真的服。于是我用这种匹配规则勉强替代一下:

计划

未来开发中会加入更多获取 provider 的方式,除了 Shodan,还可以用国内的 ZoomEye(已经加上了!),也有提供免费调用 api 的限额。

另外可能会发布一个打包好的 release,可以让小白用户直接在 windows 上打开就能跑。或者重新写一个纯前端的页面,内置新的接口地址。(已经写出来了!)

本项目永远不会以任何形式盈利或接受捐赠。

免责声明:仅供学术研究使用。对于违反相关法律、造成危害的滥用行为,开发者不负任何责任。

Licensed under CC BY-NC-SA 4.0