能否通过文件特征码欺骗百度云客户端来达到分享文件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
strikehht
V2EX    问与答

能否通过文件特征码欺骗百度云客户端来达到分享文件?

  •  
  •   strikehht 2014-09-12 11:37:17 +08:00 via iPad 10354 次点击
    这是一个创建于 4049 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT,百度云客户端在上传文件时应该是先校验文件特征码,看云端是否有匹配,若有则“极速妙传”,若没有则上传新文件。能否在这一步做手脚,直接给百度云自己需要的文件的特征码来获得该文件的“所有权”?这样,不管分享链接如何也可以保证能够下载到资源?个人感觉理论上肯定是可行的。实际如何操作有可能吗?
    37 条回复    2015-07-27 10:26:20 +08:00
    imn1
        1
    imn1  
       2014-09-12 12:10:29 +08:00
    不太明白
    上传可以提交特征码,但下载时特征码应该是服务器端从数据库提取的,不涉及客户端提交的问题
    takato
        2
    takato  
       2014-09-12 12:16:08 +08:00
    从设计上讲,这个接口肯定放在应用内部,除非你能知道他们内部通信的协议来模拟,否则不太可能。
    sandotsan
        3
    sandotsan  
       2014-09-12 12:22:13 +08:00
    理论上可行,不过万一百度做特征码时加盐了,就没搞了,不可能你能搞到你想要的文件+盐后的特征码撒。
    sandotsan
        4
    sandotsan  
       2014-09-12 12:30:34 +08:00
    又想到,如果百度仅仅是做文件特征码的对比,那么协议破解的话,可以穷举文件
    如果baidu除开文件特征码,还对比了文件的前3个字节或者前5个字节,那基本就没搞了,
    nybux
        5
    nybux  
       2014-09-12 12:47:12 +08:00
    这个思路非常不错
    lvye
        6
    lvye  
       2014-09-12 12:51:40 +08:00
    通过md5修改器我觉得应该可以,http://www.97world.com/archives/701
    ksc010
        8
    ksc010  
       2014-09-12 12:56:38 +08:00
    即时不用找这种欺骗的方式
    你和别人分享“同一份文件”的链接应该也不是一样的啊
    oott123
        9
    oott123  
       2014-09-12 13:12:35 +08:00 via Android
    用百度网盘的 API 吧,有秒传接口。
    你需要知道这个文件的哈希值,好像还要知道大小和前512字节。
    秒传上传之后,就能下载了…
    csx163
        10
    csx163  
       2014-09-12 14:07:44 +08:00
    记得qq邮箱被此人搞出个秒传,可以去请教下 hloli.net
    strikehht
        11
    strikehht  
    OP
       2014-09-12 14:08:21 +08:00 via iPad
    「流程应该是:

    客户端扫描要上传的文件生成特征码把特征码传递给百度云服务器服务器对比已有特征码获得文件所有权

    如果是这样的话,只要能截取生成的特征码并且修改成一个已知的特征码。就能分享一个文件,而不用生成一个分享的链接,也就不怕被和谐了...』


    恩,我想的就是这样,可惜只知道理论完全不会实践,不知道有没哪个高人可以验证一下。。
    anheiyouxia
        12
    anheiyouxia  
       2014-09-12 14:31:14 +08:00 via Android
    @oott123 百度api有返回这个哈希值给你的,你用api上传后,会返回一个文件大小和哈希值给你
    akfish
        13
    akfish  
       2014-09-12 15:00:24 +08:00
    简单的分析下概率就知道可行性有多低了。
    文件的特征码本质上就是hash,hash空间是相当稀疏的。
    以git用40位sha1编码文件对象为例,不考虑碰撞的话,整个hash空间能编码16^40=1.46*10^48个文件。
    全球人口不过才7*10^9,就算每人上传一个hash完全不同的文件,也还连hash空间的零头都占不到。

    想用hash碰撞到任意一个文件?除非你恰好有一份一模一样的文件,否则别想了。不过你都有一样的文件了,还碰撞神马。
    dorentus
        14
    dorentus  
       2014-09-12 16:04:54 +08:00   1
    @akfish 楼主想做的似乎不是去碰撞试。而是这样(假如我想分享一个文件给别人):

    1. 我先通过某些方式获得百度云内部使用的、该文件的特征数据(文件大小、哈希值之类)
    2. 我把这个文件的特征数据给你
    3. 你拿到这个文件的特征数据之后,通过某些方式欺骗百度的客户端,把这个文件添加到自己的账号下

    如果像上面说的百度是直接提供了那些接口的话,倒是可以简单实现……
    strikehht
        15
    strikehht  
    OP
       2014-09-12 16:22:37 +08:00 via iPad
    @dorentus 正解
    ayang23
        16
    ayang23  
       2014-09-12 17:08:39 +08:00
    @dorentus
    @strikehht 逆向一下客户端不就有了
    zmj1316
        17
    zmj1316  
       2014-09-12 17:16:00 +08:00
    当初115封分享的时候大家不就是这么干的么
    ZzFoo
        18
    ZzFoo  
       2014-09-12 17:42:12 +08:00
    这是我用百度云上传时抓取到的request。
    POST /api/rapidupload?clienttype=8&devuid=BDIMXV2%2DO%5F328CCC7C9BAE4DC8B3C1D118284819FE%2DC%5F0%2DD%5F101118PBN406X7GJGSJL%2DM%5F60EB69B81D44%2DV%5F10E697A0&channel=00000000000000000000000000000000&version=4.5.0.7&logid=JwAxADQAMQAwADUAMQAyADAAMgAxACwAMQA5ADIALgAxADYAOAAuADEALgAzACwANQA2ADUA%0AJwA%3D HTTP/1.1..Host: pan.baidu.com..Accept: */*..Cookie:BDUSS=TZ5SHd0TEhQSjlyRVZhWklyYkstdk1HbWpmQmlrQVQ2ci1vSkJXLTRlSGxQVHBVQVFBQUFBJCQAAAAAAAAAAAEAAADP5xAXxcLR9LnitcTDqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOWwElTlsB..User-Agent: netdisk;4.5.0.7;PC;PC-Windows;6.1.7601;WindowsBaiduYunGuanJia..Content-Length: 187..Content-Type: application/x-www-form-urlencoded....path=/Friends.S01E01.UNCUT.DVDRip.XviD-SAiNTS.avi&content-length=245096448&content-md5=f50c85023b19adca96996d77ac640ba8&slice-md5=53aff60319468c7fcdd1f166073ab92e&content-crc32=3088105606

    所以每次只要把除了cookie之外的request告诉别人是不是就行了..
    ZzFoo
        19
    ZzFoo  
       2014-09-12 17:45:48 +08:00
    有没有比较简单的方法模拟一个post请求呢。。。。
    ZzFoo
        20
    ZzFoo  
       2014-09-12 18:29:39 +08:00
    上传成功了。。
    regmach
        21
    regmach  
       2014-09-12 18:53:07 +08:00
    @ZzFoo 然后?
    uuhp2009
        22
    uuhp2009  
       2014-09-12 19:22:11 +08:00
    @ZzFoo
    @strikehht
    然后你们俩想干啥啊 有什么用
    ZzFoo
        23
    ZzFoo  
       2014-09-12 19:23:46 +08:00
    @regmach 然后就可以不需要通过分享链接来分享文件了
    regmach
        24
    regmach  
       2014-09-12 19:27:28 +08:00
    @ZzFoo nice....
    ZzFoo
        25
    ZzFoo  
       2014-09-12 19:28:56 +08:00
    @uuhp2009 已经说的很清楚了吧..
    Automan
        26
    Automan  
       2014-09-12 20:27:50 +08:00
    @akfish MD5的文件哈希还是很容易碰撞的,现成的工具很多
    akfish
        27
    akfish  
       2014-09-12 20:34:25 +08:00
    @Automan 那不同,前提是你已知要碰撞的文件,然后找个hash一样的文件,而不是随便猜一个已经被用到的hash。
    Anyway,之前也没理解请lz的意思。
    takato
        28
    takato  
       2014-09-12 20:42:02 +08:00
    @ZzFoo 研究的方向是不是应该反一下?因为上传的文件的MD5我们随时都可以算出来,你应该研究一下下载API里面都需要些什么,我把Parameter都抓下来了:

    xcode:3d15375f303751525d53953779032e191f4f5f9bc8fd50d6837047dfb5e85c39
    fid:369186934-250528-648359378707291
    time:1410525386
    sign:FDTAXER-DCb740ccc5511e5e8fedcff06b081203-YN48O3OWZ2ZsZvN/nI9rLTvtdqQ=
    to:cb
    fm:Nin,B,T,t
    sta_dx:25
    sta_cs:20
    sta_ft:dmg
    sta_ct:1
    newver:1
    newfm:1
    flow_ver:3
    expires:8h
    rt:sh
    r:346770198
    mlogid:4234836019
    vuk:-
    vbdid:3385041692
    fn:Lyn153.dmg
    wshc_tag:0
    wsts_tag:5412e8ca
    wsid_tag:da5197fd
    wsiphost:ipdbm

    看起来似乎可行的可能性不大。。。
    takato
        29
    takato  
       2014-09-12 20:44:28 +08:00
    @ZzFoo Post请求分分钟就能造出来,比如chrome下的插件Postman,但是问题在于这些参数你弄不懂是啥意思。。。甚至有些参数你很难伪造。

    试想一下,如果伪造很容易,百度不就会被直接盗链么?
    akfish
        30
    akfish  
       2014-09-12 20:58:59 +08:00
    @ZzFoo
    @takato

    从这个请求里看参数的含义很显而易见吧,并没什么防护措施。
    URL query string里就是正常的客户端版本信息、设备id和登陆信息
    Post payload里都是文件的信息:
    * path 网盘上的存储路径
    * content-length 文件长度
    * content-md5 整个文件的md5
    * slice-md5 文件里某块的md5
    * content-crc32 文件的crc32

    所以基本上就是伪造下客户端的登陆请求,只有payload里后4个参数是需要分享的。
    takato
        31
    takato  
       2014-09-12 21:35:12 +08:00
    @akfish 请注意,我们要的是调用下载,那么要调用我的那个API,而不是上传API,那么我问你,那个sign你如何确定?显然这里是个签名信息。还有一些其他字段的含义呢?
    akfish
        32
    akfish  
       2014-09-12 21:38:48 +08:00
    @takato 你显然没搞清楚这个漏洞的利用途径,我伪造一次上传,在我的网盘里就会有那个文件,然后我正常的从我的网盘上把那个文件拖下来就行了。
    strikehht
        33
    strikehht  
    OP
       2014-09-12 23:00:31 +08:00 via iPhone
    感谢楼上各位达人~
    该方法还是不要过于广泛传播为妙。
    此帖应尽快沉没,以防不测
    ProfFan
        34
    ProfFan  
       2014-09-13 02:54:42 +08:00
    看起来很不错啊。。。可惜magnet用的是sha-1。。。
    uuhp2009
        35
    uuhp2009  
       2014-09-13 10:00:14 +08:00
    @strikehht lz 为啥要沉没啊。自己想做个网站独吞。其实我早就想到了没有做的。让给你算了
    lentrody
        36
    lentrody  
       2015-07-27 10:14:05 +08:00
    刚看到个类似115提取式的东西
    C2A2BAFCF86548AC5758916B3E2955C6#D220DCCA4EC34E7E9A413B7391740A85#463584555#COMIC Shingeki 2015-07.rar
    前部分有两段HASH,第一段是整个文件的MD5,感觉像是用在百度盘之类的地方,但找不到有相关工具,有没有人知道详情?
    lentrody
        37
    lentrody  
       2015-07-27 10:26:20 +08:00
    哈找到了,http://jixun.org/p/3232 也就跟楼主所说的东西一样了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5481 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 07:49 PVG 15:49 LAX 00:49 JFK 03:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86