
郑重声明:本文仅限于技术讨论,严禁用于其他用途。
本文将介绍由埃森哲安全实验室Yiu开发的一款针对中国职场社交应用的开源信息自动化收集和测试工具——(下载)。基于该应用平台,可以进行开源情报(OSINT)操作,收集应用注册用户的信息并进一步分类。它可以收集中国各大公司在申请平台上注册的员工的姓名和可能的电子邮件地址,并最终收集结果。将以 HTML 和 CSV 报告格式呈现。在这篇文章中,作者讲述了自己开发的一些相关流程和扩展用途。
看不到吗?点击这里
发展原因
目前,中国职场社交平台上似乎还没有一个有用的工具来收集公司员工信息。在美国、英国等国家,安全研究人员或恶意攻击者可以利用它来收集公司员工信息,类似的 OSINT 工具也是可用的。有很多,像这个就是其中之一。早期仅供开发者内部小规模使用,直到2017年才正式开源下载。可以使用公司名称和公司域名后缀收集特定公司的员工姓名和电子邮件信息。这种类似的工具可以方便攻击者对某些公司员工发起有针对性的网络钓鱼欺骗、撞库、密码暴力破解等恶意攻击。攻击。
在2017年12月举行的京东安全大会上,我发现由于种种原因很难找到中国企业员工的准确信息。虽然它在中国没有被禁止,但它似乎并不是主流社交应用。在一次和朋友的交流中,他告诉我,在中国,有一个职场社交应用可能比它更活跃。
开始开发
基于上述很难找到中国企业员工准确信息的问题,我开发了它。开发过程中有几个地方需要克服,特别是对汉字的URL转码问题不太了解。下面简单介绍其他问题,也可以激发感兴趣的研究人员开发其他 OSINT 工具。
从了解应用程序的iOS APP开始
我从App Store下载了这个应用程序的iOS APP,然后我用自己的手机号码注册了一个帐户。在本APP中,手机号码可以代替用户名。因此,在开发之初,您需要使用您的个人手机号码和应用程序的登录验证密码。之后,完成相关注册和登录后,您就可以收集特定组织的员工信息。
接下来,是时候观察 Burp 中的网络流量行为了。在此步骤中,需要进行一些设置更改。首先,您需要更改计算机上的无线设置,并将手动代理更改为HTTP模式。并且需要确保接入的无线网络没有主机隔离限制。之后,设置你的代理IP,并确保手机防火墙关闭,以便手机可以连接到你的代理。
通过网络流量抓包分析,我可以看到应用程序的API接口和各种可用的HTTP方法。我发现使用 GET、POST 和参数方法,我可以轻松创建简单的 GET 请求并接收 JSON。数据格式响应。
以下是执行请求的示例:
GET /search/contacts?query=%E9%A5%BF%E4%BA%86%E4%B9%88&dist=3&searchTokens=%5B%22%E9%A5%BF%E4%BA%86%E4%B9%88%22%5D&me=1&highlight=true&frm=webview%23%2Fsearch%2Fcontacts&appid=4&vc=11.2.1&push_permit=1&version=4.18.8&channel=AppStore&net=wifi&jsononly=1&imei=&open=icon&density=2&u=&device=iPhone10%2C4&access_token=&ts=HTTP/1.1
Host: maimai.cn
Accept: */*
Cookie: access_token=; channel=AppStore; u=; version=4.18.8; session=; session.sig=
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C153/{iPhone10,4} [iOS 11.2.1]/MaiMai 4.18.8(4.18.8.9)
Accept-Language: en-GB;q=1, zh-Hant-GB;q=0.9, zh-Hans-GB;q=0.8
Accept-Encoding: gzip, deflate
Connection: close
正如您在上面的请求中看到的,有几个区域领域值得挖掘。在身份验证部分的身份验证请求过程中,所需要的只是身份验证访问令牌和用户 ID,这将在下面更详细地介绍。
另一个有趣的部分是查询和参数。我使用在线工具对涉及的值进行转码。其中,查询参数值%E9%A5%BF%E4%BA%86%E4%B9%88,转码后的信息就是我要采集的公司“饿了么”:

参数值%5B%22%E9%A5%BF%E4%BA%86%E4%B9%88%22%5D转码后为[“你饿了吗”],比之前的查询参数值多了。一对括号和引号:

最终请求的输出数据为JSON格式。您可以指定要收集的记录数,但不能超过25,000条,否则会崩溃并变得无响应。
自动验证
为了获得有效的访问身份验证令牌,我们需要执行身份验证步骤并从响应消息中获取访问身份验证令牌。因此,我退出应用程序并重新登录,并使用Burp捕获该进程的网络流量。与搜索功能类似,该应用的登录功能也可以通过GET、POST和参数交互运行,因此很容易在URL链接中添加各部分所需的请求参数。不幸的是,我没有通过网络代理运行该过程,这涉及一些 TLS 连接,并且登录帐户仅用于测试目的。
以下是POST请求网络数据包的内容:
POST /maimai/user/v3/login?account=&appid=4&vc=11.2.1&push_permit=1&version=4.18.8&channel=AppStore&net=wifi&imei=&open=icon&density=2&u=&device=iPhone10%2C4&access_token= HTTP/1.1
Host: open.taou.com
Content-Type: application/x-www-form-urlencoded
Connection: close
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C153/{iPhone10,4} [iOS 11.2.1]/MaiMai 4.18.8(4.18.8.9)
Accept-Language: en-GB;q=1, zh-Hant-GB;q=0.9, zh-Hans-GB;q=0.8
Accept-Encoding: gzip, deflate
Content-Length: 128
account=&appid=4&cnt=1&dev_type=4&dname=&new_fr=1&password=&stage=complete_uinfo
通过对URL链接中的参数进行移动和变换,可以将上面的POST数据包转换为类似如下的GET请求:
GET /maimai/user/v3/login?account=&appid=4&cnt=1&dev_type=4&dname=&new_fr=1&password=&stage=complete_uinfo account
Host: open.taou.com
Connection: close
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C153/{iPhone10,4} [iOS 11.2.1]/MaiMai 4.18.8(4.18.8.9)
Accept-Language: en-GB;q=1, zh-Hant-GB;q=0.9, zh-Hans-GB;q=0.8
Accept-Encoding: gzip, deflate
上述请求发出后,得到的响应内容如下:
HTTP/1.1 200 OK
Server: nginx
Date: Mon, 01 Jan 2018 09:38:33 GMT
Content-Type: application/json; charset="utf-8"
Connection: close
Vary: Accept-Encoding
Content-Length: 4223
{"has_weibo": 0, "token": "", "has_password": 1, "user": {"meeting_partake_count": 0,
<...snip for brevity...>
"education": [], "id": , "ht_city": null, "job_count": 0, "cshow_url": "[http](https://maimai.cn/show?webuid=TsJ6oBCd&srcu=TsJ6oBCd&profession=0&src=app®fr=cshow&abtype=0&turl=http%3A//taou.cn/d/7lnZp)
<...snip for brevity...>
在上面的响应内容中,我们获取了用于身份验证的令牌和用户帐户ID,也可以使用这些信息来发出搜索请求。
将中文转为URL编码
Stack 论坛中的以下帖子展示了如何插入中文字符并以 % 格式输出 URL 编码的字符。您可以点击这里查看。
在系统中设置中文输入
既然有办法将汉字转换成URL编码,剩下的问题就是需要在系统中设置中文输入。经过搜索,我发现只需要设置系统区域设置即可。从控制面板 - 区域 - 管理 - 更改系统区域设置,选择中文(简体、中国)。


设置好并重新启动系统后,就可以在输入框中添加拼音中文键盘输入了。
中文姓名VS邮箱格式
在西方,英文名字包括名字、名字和姓氏。 Last name就是我们所说的姓氏,通常是英文名中的最后一个字段。然而,中文名字与英文名字相反,姓氏是名字中的第一个字符。因此,从英文姓名到电子邮件格式的转换相对简单,但从中文姓名到电子邮件格式的转换则相反,有所不同。
例如,英文姓名到电子邮件地址的格式转换如下:
简·无名 ->
但中文是这样的:
王雪娇-> 王雪娇-> /
我们需要将中文转换为拼音字符,然后将它们组合成电子邮件格式。然而,由于中文同音字的存在,将真实的中文姓名准确转换为拼音字符是很困难的。比如ni的拼音输入法中,有很多同音字:you、ni、ni、ni、ni、ni、ni、ni、ni、ni...,输入法中ni的第一个选项代表“你”,第二个选项代表“你”。等等。但幸运的是,JSON 输出中有一个 py 属性,看起来像拼音。
加入邮箱发现神器功能
至此,我们已经熟悉了与中文语法相关的姓名和电子邮件结构格式。我们可以使用电子邮件发现工具来尝试查看一些通用的中文名称电子邮件地址。官网.io可以搜索一些相关结果。它可以通过公司网站域名来匹配互联网上的公共邮箱,最终将匹配的搜索邮箱分类为通用格式。此外,它还具有电子邮件有效性验证、批量导入域名获取电子邮件地址、批量查询、浏览器插件等实用功能,非常方便电子邮件发现和识别。以下为饿了么(ele.me)的.io邮箱标识:

.io 的邮箱识别主要模式是first.last,姓在前,名在后,但也有一些识别结果是名在前,姓在后(最后.第一个)。例如,可以发现其中一个具有姓名的拼音结构,电子邮件格式为Zhu@ele.me。真是太棒了,图像上还添加了它的识别功能。在我开发的过程中,如果用户不喜欢主要的识别模式,我会给出其他的选择模式。
项目
工程地址为,运行后显示界面为:
以下是 HTML 和 CSV 格式的报告结果示例:

扩展利用-密码喷涂-自动密码验证
密码喷射( ),在某种程度上也可以称为暴力登录,是通过入侵资产设备来渗透组织的常见方法之一。与国外不同,在中国,并没有常用的在线邮箱应用程序。腾讯QQ旗下的企业邮箱服务拥有较高的受众率。各大公司都可以购买并配置这个邮箱服务,成为自己的企业服务。
有了上面的数据采集应用,全面暴力登录就有点意思了。通过分析,我发现腾讯的企业邮箱服务并没有在登录界面部署即时多重身份验证机制(MFA),所以我首先想到的就是利用它进行抓包分析。后来我发现登录请求消息中并没有包含密码信息,而是p参数中存在一个十六进制编码的blob。
我查看了登录界面的源码,在提交位置发现了如下验证格式信息:
在这里,我们可以看到方法()被调用了。后来在登录界面的源码中找到了()方法的具体源码:
function checkInput() {
window.org_pass = S("pp").value;
if (!window.RSAKey) {
document.getElementById("downError").style.display = "block";
document.getElementById("returnMsg").style.display = "none";
return false;
}
if (!checkCookie()) {
return false;
}
var inputUin = document.form1.qquin.value.toLowerCase();
if (inputUin == "") {
showMsg("emptyUserName");
document.form1.qquin.focus();
return false;
}
var re = /^\d+$/;
if (inputUin.indexOf("[@qq](http://twitter.com/qq).com") > 0 || inputUin.indexOf("[@vip](http://twitter.com/vip).qq.com") > 0 || inputUin.indexOf("[@foxmail](http://twitter.com/foxmail).com") > 0) {
showMsg("errorLoginWithQQAccount");
return false;
} else if (inputUin.indexOf("@") > -1) {
showMsg("errorUserName");
return false;
} else {
document.form1.uin.value = document.form1.qquin.value + "[@mogujie](http://twitter.com/mogujie).com";
}
if (document.form1.pp.value == "") {
showMsg("emptyPassword");
document.form1.pp.focus();
return false;
}
if (document.form1.pp.value.length >= 100) {
showMsg("errorPassowrdTooLong");
document.form1.pp.focus();
return false;
}
if (S("VerifyArea").style.display != "none") {
if (document.form1.verifycode.value == "验证码") {
document.form1.verifycode.value = "";
}
if (document.form1.verifycode.value == "") {
showMsg("emptyVerifyCode");
document.form1.verifycode.focus();
return false;
}
} else {
document.form1.verifycode.value = "";
}
var PublicKey = "CF87D7B4C864F4842F1D337491A48FFF54B73A17300E8E42FA365420393AC0346AE55D8AFAD975DFA175FAF0106CBA81AF1DDE4ACEC284DAC6ED9A0D8FEB1CC070733C58213EFFED46529C54CEA06D774E3CC7E073346AEBD6C66FC973F299EB74738E400B22B1E7CDC54E71AED059D228DFEB5B29C530FF341502AE56DDCFE9";
var RSA = new RSAKey();
RSA.setPublic(PublicKey, "10001");
var PublicTs = "";
var Res = RSA.encrypt(document.form1.pp.value + '\n' + document.form1.ts.value + '\n');
if (Res) {
if (document.form1.chg.value == 1) {
document.form1.p.value = hex2b64(Res);
} else {
if (document.form1.ppp.value != "") {
document.form1.p.value = document.form1.ppp.value;
} else {
document.form1.p.value = hex2b64(Res);
}
}
}
var MaskValue = "";
for (var Loop = 0; Loop < document.form1.pp.value.length; Loop++, MaskValue += "0");
document.form1.pp.value = MaskValue;
setCookieAlias(document.form1.uin.value, document.form1.domain.value);
return true;
}
上面的脚本使用 S("pp").valu 获取 pp 的值并执行各种其他检查以确保 RSA 密钥和相应的用户存在。然后,它会验证电子邮件地址是否是有效的企业帐户,并且它是否是有效的企业帐户。登录密码的长度将被验证,不能超过100个字符。
当所有验证验证完成后,脚本会调用密码信息并附加一个随机生成的值,然后使用RSA公钥对密码进行加密,并将加密内容转换为编码的二进制大对象(blob),在 p 参数请求中使用。当应用程序的服务器收到这个编码的blob值时,它将在服务器端执行解码和验证操作。
这种加密机制是为了防止恶意攻击者通过抓包、分析流量来恢复用户密码。这是一个很好的用户信息保护机制。换句话说,如果模块中有RSA加密密码并且我不创建新插件,我就看不到实际的密码。为此,我在和朋友@交流的时候,他给我推荐了一篇题为《腾讯企业邮箱登录爆款》的文章。
从文章中可以看出,早在2017年2月,中国国内安全研究人员就已经编写了可以暴力登录腾讯企业邮箱的脚本。然而,由于中文和英文环境的密码复杂度和弱密码组成的差异,我的密码破解登录测试并不被认为是有效和成功的。但需要注意的是,很多大公司对于用户密码的构成都有一些很好的要求。在中国,经常使用数字、生日、手机号码等与个人相关的密码,因此在我的应用中,这种密码猜测比通常的密码猜测要难一点。
结论
感谢您的阅读,希望大家都能学到一些东西。我们可以看到,虽然各个地区的技术相似,但不同领域采用的方法不同,这可能会导致使用的工具和获取的开源信息存在差异。基于中国互联网行业的快速发展,中国拥有更多自己的应用生态系统,而其他地区如俄罗斯、中东等在自己的国家并没有相关的应用,更常用的应用也是如此工作场所社交应用。虽然它在中国没有被禁止,但似乎大多数中国专业人士更喜欢使用另一个APP。所以我希望你喜欢我的。最后,我想推荐一个电子邮件验证在线服务,它可以为开发类似的 OSINT 工具提供更多帮助。
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1