吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15501|回复: 238
上一主题 下一主题
收起左侧

[Web逆向] 网盘秒传功能的利用

    [复制链接]
跳转到指定楼层
楼主
iaoedsz2018 发表于 2024-12-13 01:24 回帖奖励
本帖最后由 iaoedsz2018 于 2024-12-13 17:13 编辑

网盘秒传功能的利用

最近由某些原因,需要下载上古时代的文件,结果找出来的链接要么失效、要么龟速。

然后就想到了用网盘的秒传功能来帮我找文件。

其实这方法在阿里云盘上线的早期已经试过,是可以正常用的,不过后来接口加了密,就没继续跟进了。

这次玩的是天翼云盘,毕竟这个是真的不限速!

话不多说,直接开干。

打开F12,找一个可以被秒传的文件,上传

很容易观察到秒传调用接口分两步:

https://upload.cloud.189.cn/person/initMultiUpload
https://upload.cloud.189.cn/person/commitMultiUploadFile

根据后来结论得出:initMultiUpload主要是向后台申请空间(因为可能空间不足,也可能每日上传数据量超过上限),申请成功后,会返回一个uploadid,然后再调用commitMultiUploadFile填上这个uploadid来上传。

可以看到GET请求的参数不可读,已经被加密,所以需要定位加解密算法。

XHR断点勾上,上传。

直接断下来了,代码逻辑非常清晰,就是涉及的算法有点多

其中s = n("xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx")相当于一个GUID生成器

其中c = n("xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx").slice(0, 16 + 16 * Math.random() | 0)就是个随机串生成器,这里生成出来的c值将会被当作AES的key来使用,后面RSA算法加密的就是这个c

其中i.default.AES.encrypt就是AES(PKCS7填充模式)

其中b.encrypt就是RSA加密再套一层base64

接下来实现这些算法,由于我只会C艹,所以这里用C艹来实现了。

毫秒时间戳:

#ifdef _WIN32

#include <sys/timeb.h>

static uint64_t
__timestamp()
{
    struct timeb rawtime;
    ftime(&rawtime);
    return rawtime.time * 1000 + rawtime.millitm;
}

#else

#include <sys/time.h>

static uint64_t
__timestamp()
{
    struct timeval now = {0};
    gettimeofday(&now, NULL);
    unsigned long long u = now.tv_sec;
    u *= 1000;
    u += now.tv_usec / 1000;
    return u;
}

#endif

AES(调用openssl),注意这里要用PKCS7填充:

static std::vector<uint8_t>
__aes(const char* in, const char* userKey)
{
    std::vector<uint8_t> bytes;
    uint8_t padding = 0x10 - (strlen(in) % 0x10); // PKCS7填充
    bytes.resize(strlen(in) + padding, padding);
    memcpy(bytes.data(), in, strlen(in));

    AES_KEY enc;
    AES_set_encrypt_key((const unsigned char*)userKey, 128, &enc);

    for (size_t i = 0; i < bytes.size(); i += 0x10) {
        AES_ecb_encrypt(bytes.data() + i, bytes.data() + i, &enc, 1);
    }

    return bytes;
}

HMACSHA1:

static std::vector<uint8_t>
__hmacsha1(const char* in, const char* userKey)
{
    std::vector<uint8_t> bytes;
    bytes.resize(0x14);

    unsigned int outputlength = 0;

    HMAC_CTX* ctx = HMAC_CTX_new();
    HMAC_Init_ex(ctx, userKey, strlen(userKey), EVP_sha1(), NULL);
    HMAC_Update(ctx, (const unsigned char*)in, strlen(in));
    HMAC_Final(ctx, bytes.data(), &outputlength);
    HMAC_CTX_free(ctx);

    return bytes;
}

RSA:

static std::vector<uint8_t>
__rsa(const char* in, const char* userKey)
{
    std::vector<uint8_t> bytes;
        // ...自行手搓,hahahahaha~
    return bytes;
}

Base64:

static std::string
__base64(const uint8_t* in, size_t len)
{
    std::vector<uint8_t> bytes;
    // ...自行手搓
    return std::string((const char*)bytes.data(), bytes.size());
}

噢对了,还有两个重要的值:

RSA公钥来源:

https://cloud.189.cn/api/security/generateRsaKey.action

sessionKey来源:

https://cloud.189.cn/api/portal/v2/getUserBriefInfo.action

这俩值随便抓一下,能用几个小时。

/person/initMultiUpload

__aes("parentFolderId=-15&fileName=en_win_xp_pro_x64_vl.iso&fileSize=614166528&sliceSize=10485760&lazyCheck=1", c)

parentFolderId=-15这是个固定的文件夹"我的文档"的ID,每个用户都有且无法删除。想用自建的文件夹就稍微麻烦点。

c就是上面随机生成的c值,是个字符串,直接传进去就行

加密结果转成16进制字符串后就是GET参数中的params

HTTP头中的X-Request-ID

随机生成一个GUID填入即可

HTTP头中的X-Request-Date

毫秒级时间戳

HTTP头中的PkId

PkId与RSA公钥是在同一个接口里拿到的,一定要配套使用才行

HTTP头中的Signature

__hmacsha1("SessionKey=...&Operate=GET&RequestURI=/person/initMultiUpload&Date=...¶ms=...", c);

SessionKey来自/api/portal/v2/getUserBriefInfo.action接口

Date毫秒级时间戳,保持与X-Request-Date相同

params就是GET参数中的params

c就是上面随机生成的c

结果转换成16进制字符串后填写到Signature就行

HTTP头中的EncryptionText

__base64(__rsa(c, /*RSA公钥*/));

注意外层有个base64

/person/commitMultiUploadFile

加密算法同上,不再赘述

测试

成功!仅通过文件的MD5+filesize完整了文件的秒传。

这里也提醒大家,保护好自己的文件信息,可能一张截图就会导致了你的文件不小心被泄露!

免费评分

参与人数 70威望 +1 吾爱币 +79 热心值 +57 收起 理由
djkzhengjun + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Alfie430 + 1 + 1 我很赞同!
policewang + 1 + 1 有没有完整的代码啊
uujolin + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
夢裡二三事。 + 1 + 1 用心讨论,共获提升!
1MajorTom1 + 1 热心回复!
babylovewlc + 1 热心回复!
K6K + 1 + 1 鼓励转贴优秀软件安全工具和文档!
FUMO + 1 谢谢@Thanks!
52zhanghao + 1 我很赞同!
IE1 + 1 我很赞同!
jaffa + 1 + 1 谢谢@Thanks!
Tonyha7 + 2 + 1 谢谢@Thanks!
jsyczxyh + 1 我很赞同!
koubiqishi + 1 + 1 我很赞同!
sfsj + 1 谢谢@Thanks!
yuriki2009 + 1 + 1 谢谢@Thanks!
ag129 + 1 + 1 谢谢@Thanks!
75506164 + 1 热心回复!
黄金体验 + 1 + 1 谢谢@Thanks!
theStyx + 2 + 1 用心讨论,共获提升!
freesoft + 1 + 1 厉害了我的朋友 。
lyslxx + 1 + 1 我很赞同!
gml857 + 1 + 1 用心讨论,共获提升!
HiFiona + 1 谢谢@Thanks!
ailiagt + 1 谢谢@Thanks!
bingshen + 1 + 1 谢谢@Thanks!
18696358796 + 1 用心讨论,共获提升!
fax77 + 1 我很赞同!
xiehonglian + 1 我很赞同!
ind + 1 + 1 谢谢@Thanks!
Barrrrrry + 1 谢谢@Thanks!
rset + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
kelina + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mk98007 + 1 + 1 谢谢@Thanks!
mhaitao + 1 + 1 我很赞同!
弑者 + 1 + 1 热心回复!
wangyongdesign + 1 + 1 谢谢@Thanks!
weidechan + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Camus2021 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Hameel + 1 谢谢@Thanks!
JerryGod + 1 谢谢@Thanks!
yimarong + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
荷鹤赫 + 1 用心讨论,共获提升!
idaoshan + 1 + 1 我很赞同!
AHC71 + 1 + 1 用心讨论,共获提升!
underush + 1 + 1 我很赞同!
jiangsongyi + 1 + 1 我很赞同!
pdcba + 1 + 1 谢谢@Thanks!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Jaxxhh886 + 1 + 1 挺厉害
tianxiangyu + 1 + 1 我很赞同!
Akasiki + 1 + 1 谢谢@Thanks!
xhal + 1 + 1 我很赞同!
thatji + 1 我很赞同!
kpc + 1 + 1 非常好,666
qjlfl + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
LQ789 + 1 + 1 热心回复!
moye12325 + 1 用心讨论,共获提升!
潇未然 + 1 + 1 太牛了
Courser + 1 + 1 用心讨论,共获提升!
jasonA + 1 + 1 鼓励转贴优秀软件安全工具和文档!
koukoncd + 1 + 1 用心讨论,共获提升!
wuge21 + 1 + 1 谢谢@Thanks!
xiiye + 1 我很赞同!
为之奈何? + 1 + 1 我很赞同!
kimiman + 1 用心讨论,共获提升!
qinni8513 + 1 + 1 谢谢@Thanks!
BTCQAQ + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
l劉l 发表于 2024-12-13 14:15
iaoedsz2018 发表于 2024-12-13 02:04
这我知道,问题是得考虑极端情况,如果人家骗你上传到你自己的网盘上,然后又让你截个包含哈希的图之类的 ...

甲:你先把文件上传云盘,分享链接等我给你结账后再给我。哦对了,你把文件MD5发给我,我文件损坏。
乙:好的,MD5:xxxxxxxxxx。
甲:拜拜了您嘞~
推荐
grayad 发表于 2024-12-13 01:42
推荐
爱飞的猫 发表于 2024-12-13 02:51
如果这个文件信息是别人的私有文件呢?


猜中的概率太小了。
推荐
 楼主| iaoedsz2018 发表于 2024-12-13 02:04 |楼主
三笙三世 发表于 2024-12-13 02:00
1:文件的 MD5 通常不会公开,除非是共享文件或流行资源(如热门视频、开源软件、镜像文件等),不过文件大 ...

这我知道,问题是得考虑极端情况,如果人家骗你上传到你自己的网盘上,然后又让你截个包含哈希的图之类的,一切看起来好像都很安全,却悄无声息的拿走了别人的文件
推荐
三笙三世 发表于 2024-12-13 02:09
iaoedsz2018 发表于 2024-12-13 02:06
我要找的是微软的20年前发布的文件,显然这些文件的信息到处都是,但是就没有有效的链接

那你找一找你说的这个文件的文件名和md5,套用你这个方法,试试,实在不行,你发帖问问
推荐
三笙三世 发表于 2024-12-13 02:00
1:文件的 MD5 通常不会公开,除非是共享文件或流行资源(如热门视频、开源软件、镜像文件等),不过文件大小你不一定直到,即使知道了,也还是只能获取这些热门的资源文件。
2:如果这两者都不知道,那就是....
推荐
 楼主| iaoedsz2018 发表于 2024-12-13 02:10 |楼主
三笙三世 发表于 2024-12-13 02:09
那你找一找你说的这个文件的文件名和md5,套用你这个方法,试试,实在不行,你发帖问问

。。。我这不是已经找完了才发的帖嘛
推荐
guanmfei 发表于 2024-12-13 01:37
估计过不了多久接口就没了
推荐
1002217709 发表于 2024-12-13 01:39
如果你要找的是一个链接已经失效的文件,你怎么提前知道他的MD5+filesize呢?细思极恐,这很难拿到吧
推荐
 楼主| iaoedsz2018 发表于 2024-12-13 02:06 |楼主
1002217709 发表于 2024-12-13 01:39
如果你要找的是一个链接已经失效的文件,你怎么提前知道他的MD5+filesize呢?细思极恐,这很难拿到吧

我要找的是微软的20年前发布的文件,显然这些文件的信息到处都是,但是就没有有效的链接
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-25 23:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表