zoukankan      html  css  js  c++  java
  • 北京宽带通运营商劫持并插入广告分析

    先说一下解决方法吧,毕竟日子还是要过的

    1. 参考下面的分析,可以看出,劫持主要是通过tcp会话劫持搞定的。主要特征是,tcp包的flag是PSH+ACK。包中含有302 Found的字符串
    2. 我们可以写一条iptables规则
      18.png
    iptables -N check_for_9011
    iptables -I INPUT -p tcp -m tcp --sport 80 --tcp-flags FIN,SYN,RST,PSH,ACK,URG PSH,ACK -m string --string  "302 Found" --algo bm --from 45 --to 80 -j check_for_9011
    iptables -I check_for_9011 -m string --string "劫持包中其他特征" --algo bm --from 70 –to 180  -j DROP
    

    以上iptables 规则检查源端口为80,且tcp-flags 为PSH,ACK的包,如果返回包中包含:”302 Found”,然后丢给check_for_9011 chain ,这个chain 会有另外一个规则额外处理,会匹配是否含有" 劫持包中其他特征"的字样,如果发现丢弃该包。

    0x01 症状表现

    访问小米论坛,底部出现您有一条未读消息,侧面有领红包的标志。眉头一紧,发现这事蹊跷哇。于是乎抓包分析一下,权当技术积累,还望同志们一起去举报这帮逼养的。
    1.PNG
    2.PNG

    0x02 抓包分析

    首先在wireshark中查看html页面。xiaomi论坛的响应采用chunked+gzip编码。wireshark并不能自动解码。如图
    3.png

    解码方式如下:

    1. 显示与保存数据,选择原始数据
    2. save as 保存下来
    3. 使用010editor 将从开头到13fd那里的内容,都删除掉
    4. 使用gzip解压
    5. gzip会出错的,但是我们可以强行解压 gzip -dc 2.gz

    然后我们可以开始分析了,发现页面中并无不妥的地方。顿时陷入僵局。于是我们换一个角度分析,查看一下所有的http response。如图
    4.png

    发现一个很奇怪的地方,为什么我们访问一个application/javascript的东西,被302跳转了呢。于是我们follow tcp看一下,如图
    5.png

    我日,竟然有两个http响应头!!第一个给我返回302跳转到一个网站。而后面的http 200才是小米论坛服务器的真正响应。

    原理很简单,tcp劫持嘛。我们可以看一下
    6.png

    图中,277是恶意tcp响应,296是服务器正常响应。277恶意数据包伪造tcp的序列号,与我们建立正常连接。等到296正常响应到达的时候,发现tcp已经全乱了。于是被tcp out-of-order了。

    那我们该如何发现这种情况呢。可以对比一下两个ip包
    7-1.png

    7-2.png

    可以对比一下,正常ttl是35,但是被恶意劫持的ip包的ttl是35。一般ttl出现较大的变动,都是被恶意劫持了。

    0x03 网站分析

    首先回到上面那个302跳转的js,乍一看,这是小米论坛的文件哇。但是仔细一看,发现js文件底部被加了新东西。如图
    8.png

    9.png

    可以看出,被插入两个script,一个iframe。地址分别是https://p.chinadmp.cn/apia/s/1101/061afed5b9a6.js
    ,https://chencheng-js.xinterface.cn/x02_1808171813.jshttps://m.58futurism.cn/cnzzOp/zkl.html。底部还被插入一个img标签,地址是http://yumcs.xiaohuau.xyz:7002/api/v1/goELK/urlES.gif

    下面分析img标签,在wireshark中,我们可以看到,会访问http://yumcs.xiaohuau.xyz:7002/api/v1/goELK/urlES.gif?title=%E7%B1%B3%E5%85%942%EF%BC%8C%E5%B0%8F%E5%AF%BB%E5%84%BFs1%EF%BC%8CT1%E7%9A%84%E5%8C%BA%E5%88%AB%EF%BC%9F%20-%20%E5%B0%8F%E7%B1%B3%E7%A4%BE%E5%8C%BA%E5%AE%98%E6%96%B9%E8%AE%BA%E5%9D%9B&ua=TW96aWxsYSBBcHBsZVdlYktpdCBDcmlPUyBNb2JpbGUgU2FmYXJp&url=http%3A%2F%2Fbbs.xiaomi.cn%2Ft-14092153&uid=a4badb264f88这个地址。主要是上报我们访问的地址与网页的title,推测可能是方便统计。

    第一个script,访问https://p.chinadmp.cn/apia/s/1101/061afed5b9a6.js。
    分析如下:

    1. 判断被劫持的网站是否在列表中,如果在,就停止劫持。

      10.png

    可以看出,都是大站,如果劫持,则很容易被发现,导致被投诉。

    1. 执行一段eval(function (p, a, c, k, e, d)的加密js代码。解密方式如下

      1. 将eval改成console.log
      2. 将该段代码,复制带浏览器中运行一下,即可得到解密代码
      3. 解密后代码如下,很多函数

      11.png

    2. 执行功能代码,为了方便,我还是加注释

            var G = {},
                slotcode = "061afed5b9a6",
                cnzz_domain = "https://p.chinadmp.cn";
            if (win["yx" + slotcode]) {
                return
            }
            win["yx" + slotcode] = true;
            G.configP = {
                ast: 100,
                c_time: 10,
                is_cnzz_url: 1,
                pos: 3,
                s_count: 0,
                s_intvl: 0,
                s_rate: 100
            };
            I(); //设置G的ajax参数
            C(); //设置cookie参数
            D();//设置劫持的html参数等
            L();//劫持结果上报给服务器
            vertion = '2018-3-2 14:32:19'
        })(window, document, navigator)
    } catch (e) {
        var _a = document.createElement("script");如果劫持出错的话,则向服务器上报出错信息,方便随后定位
        _a.type = "text/javascript";
        _a.src = "//p.chinadmp.cn/apia/logstores/ad_req_error/track?APIVersion=0.6.0&error=" + (+new Date()) + "|" + "061afed5b9a6" + "|v3|" + window.location.href + "|" + e.message;
        _a.style.display = "none";
        document.body.appendChild(_a);
    

    第二个script,访问https://chencheng-js.xinterface.cn/x02_1808171813.js,分析如下

    1. 解密代码
      12.png
      将其格式化后,复制到浏览器运行即可。在这里我们可以看出,大部分代码都被混淆。这里只能硬刚去分析了。不过,主要行为,其实都是引用最开始的那串数组中的字符串。对字符串解码,可以看出大部分操作都在这里。这里主要是判断一下,针对微信的劫持。
    2. 加载两个script
      13.png
      1. 第一个script,访问http://chencheng-js.xinterface.cn/asi_1809131803.js
        14.png
        可以看出,原来是app下载推广链接。这里将控制手机,访问列表中的app下载地址。
      2. 第二个script 访问http://chencheng-js.xinterface.cn/x02hx_20180911627.js
        15.png
        主要是判断用户的浏览器,然后跳转到优酷!!然后弹出领红包!!!!!
        16.png
        至此,我们就分析完了。通过tcp劫持,并且只劫持小站页面。确实很难让人发现。

    0x04 防范

    1. 远离小宽带公司
    2. 使用openwrt过滤掉非正常TTL的IP数据包

    0x05 后记

    最开始的那个关于js文件的302跳转,原理是将原js地址,经过base64编码,放在参数中。可能会导致ssrf。
    17.png

  • 相关阅读:
    三层架构
    SQL数据库资料整理(2006年)
    SQL基础:常用SQL语句详解(转)
    什么是SOA?
    DOTNET中的SqlHelper类
    C#精髓(WMI完美秀出CPU编号厂商主频电压等全部信息)
    根据分类,每类随机抽取N个(N对每个分类都不一样,SQL问题)
    C#,你真的入门了吗
    .Net平台开发的技术规范与实践精华总结 (转)
    学习Java需要达到的30个目标
  • 原文地址:https://www.cnblogs.com/potatsoSec/p/12152831.html
Copyright © 2011-2022 走看看