吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5609|回复: 22
收起左侧

[Web逆向] superlib某咨询联盟登录之我知道你很急,但你先别急

  [复制链接]
T4DNA 发表于 2023-12-20 23:13

声明

本文仅作为技术探讨,如不妥可联系,将第一时间删除本文

本贴为新手向,写的非常详细

分析过程

即某某图书馆参考咨询联盟

点击登录,弹出一个简陋的滑块。
1.png
2.png

看看逻辑是什么

6.png

第一个接口,获取图片地址和TOKEN

关键参数

captchaId:
captchaKey:
token:

全局搜索captchaId的value,captchaId来自于login.action

7.png

正则匹配即可

captchaId = re.search(r"captchaId: '(.*?)',", html).group(1)

其余几个value未搜索到,那么搜key
8.png

captchaKey、token都有,进入下个断点,可以看到

9.png

captchaKey生成方法

_0x4471c4 = _0x1b4779(_0x353d93 + (function() {
    var _0x4887fd = _0x1dda;
    for (var _0xa5adc8 = [], _0x5cdcca = '0123456789abcdef', _0xccd6e7 = 0x0; _0xccd6e7 < 0x24; _0xccd6e7++)
        _0xa5adc8[_0xccd6e7] = _0x5cdcca[_0x4887fd(0xce)](Math[_0x4887fd(0xec)](0x10 * Math[_0x4887fd(0x185)]()), 0x1);
    return _0xa5adc8[0xe] = '4',
    _0xa5adc8[0x13] = _0x5cdcca[_0x4887fd(0xce)](0x3 & _0xa5adc8[0x13] | 0x8, 0x1),
    _0xa5adc8[0x8] = _0xa5adc8[0xd] = _0xa5adc8[0x12] = _0xa5adc8[0x17] = '-',
    _0xa5adc8[_0x4887fd(0xba)]('');
}()))

后面一部分是个nonce,还原一下算法(虽然可能没有必要)

10.png

里面有一些简单的混淆,解一下,也不会ast,所以苯方法,主要是_0x4887fd这个函数的问题,也就是_0x1dda,进入它

11.png

在这儿打个断点,然后copy(_0xd6aec5),复制到js里,相当于获取到了解密函数

12.png

解混淆后

(function() {
    for (var eList = [], ostring = '0123456789abcdef', index = 0; index < 36; index++)
        eList[index] = ostring.substr(Math.floor(16 * Math.random()), 1);
    return eList[14] = '4',
    eList[19] = ostring.substr(3 & eList[19] | 8, 1),
    eList[8] = eList[13] = eList[18] = eList[23] = '-',
    eList.join('');
}())

eList[14]、eList[19]可能是检测位置
还原成python代码

def getNonce():
    eList = []
    ostring = '0123456789abcdef'
    for i in range(36):
        eList.append(ostring[random.randint(0, 15)])
    eList[14] = '4'
    eList[19] = ostring[(int(eList[19], 16) & 3) | 8]
    eList[8] = eList[13] = eList[18] = eList[23] = '-'
    return "".join(eList)

接下来是token,稍微要复杂一些

13.png

关键在于_0x1b4779这个函数,和_0x353d93 + _0x15764b + _0x32b96e + _0x4471c4中其他几个参数,往前打两个断点可以看到就是一个13位时间戳

14.png

_0x1b4779看到调用了好几回函数啊,不过看着这32位的返回值

怎么那么像md5呢

我们可以验证一下

16.png

那么一句话就结束了

def getMd5(n:str):
    return hashlib.md5(n.encode()).hexdigest()

timestap = '1703058076634'
nonce = getNonce()
captchaKey = getMd5(timestap + nonce)

17.png

token就是
时间戳+captchaId+'slide'+captchaKey取md5然后+':'+时间戳+过期时间(300000)

token = getMd5(timestap + captchaId + 'slide' + captchaKey) + f':{int(timestap)+300000}'

构造获取请求所有参数,并且这个滑块也无需生成轨迹,ddddocr秒了,成功获得validate

    def getVerification(self):
        callback = "jQuery19008360078251283902_"+self.timestap
        _ = int(time.time()*1000) + 3000
        url = "http://脱敏/captcha/get/verification/image"
        nonce = getNonce()
        captchaKey = getMd5(self.timestap + nonce)
        token = getMd5(self.timestap + self.captchaId + 'slide' + captchaKey) + f':{int(self.timestap)+300000}'
        params = {
            "callback": callback,
            "captchaId": self.captchaId,
            "type": "slide",
            "version": "1.1.14",
            "captchaKey": captchaKey,
            "token": token,
            "referer": "http://脱敏/login/login.action",
            "_": str(_+1),
        }
        response = self.s.get(
            url,
            headers=self.headers,
            params=params
        ).text
        response = json.loads(response.replace(callback+'(', '')[:-1])
        token = response['token']
        cutoutImage = response['imageVerificationVo']['cutoutImage']
        shadeImage = response['imageVerificationVo']['shadeImage']
        target_bytes = self.s.get(cutoutImage, headers=self.headers).content
        background_bytes = self.s.get(shadeImage, headers=self.headers).content
        textClickArr = "[{\"x\":"+ str(generate_distance(target_bytes, background_bytes))+"}]"
        url = "http://脱敏/captcha/check/verification/result"
        params = {
            "callback": callback,
            "captchaId": self.captchaId,
            "type": "slide",
            "token": token,
            "textClickArr": textClickArr,
            "coordinate": "[]",
            "runEnv": "10",
            "version": "1.1.14",
            "_": str(_+2),
        }
        self.headers['Referer'] = 'http://脱敏/'
        response = json.loads(requests.get(url, headers=self.headers, params=params).text.replace(callback+'(', '')[:-1])
        print(response)
        if  response['result']:
            return response['extraData'].replace('{"validate":"', '').replace('"}', '')
        else:
            return self.getVerification()

def generate_distance(target_bytes, background_bytes):
    det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
    res = det.slide_match(target_bytes, background_bytes)
    return res.get('target')[0]

大无语时刻(虚晃一枪)

哦天啊,你们知道它的验证密码是否正确的请求不仅仅是明文,而且还不带验证码,(怪不得xxxxxxxx,只能说某些事情发生也不是没有原因的)天啊我前面为什么要分析那么多,这验证码就是个摆设啊,登陆的时候(无cookie,无headers,无validate)完全不用管,白写这么多字。(也就是这个验证码既不起防止机器人登陆的功能,也不起防止密码爆破的作用)

21.png

此帖终结

总结

这个故事告诉我们,先盘流程再逆向!不然最后会很急。

免费评分

参与人数 18威望 +2 吾爱币 +119 热心值 +18 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
kuiba + 1 + 1 谢谢@Thanks!
一家之言 + 1 + 1 谢谢@Thanks!
dxiaolong + 1 + 1 热心回复!
allspark + 1 + 1 用心讨论,共获提升!
know1234 + 1 + 1 我很赞同!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Reer + 1 + 1 我很赞同!
yyy0101 + 1 + 1 谢谢@Thanks!
涛之雨 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hot1828958 + 1 + 1 谢谢@Thanks!
janken + 1 + 1 热心回复!
lock3r + 1 + 1 我很赞同!
Voccoo + 1 + 1 我很赞同!
simpletree2023 + 1 + 1 我很赞同!
coder9527 + 1 + 1 热心回复!
carnelian + 1 + 1 热心回复!
Eqwer + 2 + 1 哈哈哈,笑死!

查看全部评分

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

carnelian 发表于 2023-12-21 00:00
一整个惊住,最后的一刻,如此赤裸裸吗/捂脸。
题外话,请教下大佬:弹窗提示长时间未修改密码,需要修改验证,可有其他办法跳过验证吗?(因为原注册号码已经注销,而修改密码又需要原手机号的验证码。对于这样的情况,该怎么办,求解惑!感谢!!)
 楼主| T4DNA 发表于 2023-12-21 00:03
carnelian 发表于 2023-12-21 00:00
一整个惊住,最后的一刻,如此赤裸裸吗/捂脸。
题外话,请教下大佬:弹窗提示长时间未修改密码,需要修改 ...

这个要具体情况具体分析,如果他只是一个验证,那你可以修改response,类似于我主页的那个mitmproxy,就过去了,如果它是和cookie啥相关的,那基本不可能过去
carnelian 发表于 2023-12-21 00:23
T4DNA 发表于 2023-12-21 00:03
这个要具体情况具体分析,如果他只是一个验证,那你可以修改response,类似于我主页的那个mitmproxy,就 ...

感谢楼主大大回复解答
alanfish 发表于 2023-12-21 08:08
感谢楼主大大
格桑花海i 发表于 2023-12-21 08:53
感谢楼主大大
retsyo 发表于 2023-12-21 09:16
感谢分享。以后用到时再仔细看
caidige 发表于 2023-12-21 09:18
感谢楼主
baoqingzxc 发表于 2023-12-21 09:24
从头到尾全部看完,深有启发,膜拜大佬,谢谢分享!
nitian0963 发表于 2023-12-21 09:41
感谢楼主大大
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-21 20:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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