加速乐三次交流cookies的暴力破解(小白版)

本人的很多用词可能不太专业,希望大家多多包涵~

了解加速乐原理:准备burpsuite或者fiddler(可以搜到许多篇博客用的fiddler,其实都一样的),读了很多博客,我画了一个大致的三次交流的图。

        三次的burpsuite的截图如下:(勉强算隐去url)

了解了大概的原理之后,就来到本篇文章的主要狙击点:如何解决jsl_clearance_s中的两位字符的真值问题。(至于为什么只需要解决两位字符,请看这位大大的文章【JavaScript 逆向】521 加速乐多层响应 Cookie 逆向_加速乐反爬-CSDN博客)苦于我入门CTF的时间太短,实在读不懂OB混淆到底要怎么解决,又加上我曾经是ACM选手,so暴力的想法跃然纸上,接下来讲讲如何做这个暴力。

first:可以看到下图Set-Cookie: __jsluid_s=091982519561ad0b0126dd1969a70b0e,那么我们已经从response中获取了正确的__jsluid_s。

        同时获得类似下图的一段JavaScript:

        在浏览器中运行得到:jsl_clearance_s=1706163840.833|-1|X4Y8mzD74W1uyRxEUbBNsXwTLLY%3D,但通过几次burpsuite捕获的合法cookies比较,我们会发现这个jsl_clearance_s中间是-1是非法的。

second:第二次交流的response中有这么一段混淆的JavaScript:

        看起来很乱,没关系,让我们拉到最下面:

        (图文不符,因为我一下子没找到合适的排版,从以前的图里找了一个美观的,没关系看下面这段文字)通过比较这个bts的赋值:

        go({

                "bts":["1706163841.337|0|7qP","jadywnSKBFHuXx7%2BumcjgU%3D"],

                "chars":"bCcoaytSkZOManTOFdgWIX"

        ……

        和第三次捕获的合法的__jsl_clearance_s=1706163841.337|0|7qPckjadywnSKBFHuXx7%2BumcjgU%3D,发现只少了“ck”这两个字母,而“ck”的来源正是chars字符集。那么让我们掐指一算,chars大概在20个字符左右,也就是400的时间复杂度,那岂不是双重for循环轻轻松松爆破。因为时间复杂度实在是太低了,我甚至加了随机时间延长,以免被ban。

接下来放一小部分暴力的代码。

    
def extract_chars(string):
    pattern = r'"chars":"([^"]*)"'
    match = re.search(pattern, string)

    if match:  
        return match.group(1)
    else:
        return None

def extract_bts_strings(string):
    pattern = r'"bts":(\[[^\]]*\])'
    match = re.search(pattern, string)

    if match:
        bts_strings = match.group(1)
        try:
            bts_list = json.loads(bts_strings)
            return bts_list
        except json.JSONDecodeError:
            return None
    else:
        return None

chars = extract_chars(request)
bts = extract_bts_strings(request)
chars = set(list(chars)) #写一个chars去重
chars = ''.join(chars)
l = len(chars)

url = "" #自己写
for i in range(l):
    for j in range(l):
        headers = {
            'Cookie': '__jsluid_s=' + resp_first.cookies['__jsluid_s'] + '; __jsl_clearance_s=' + bts[0] + chars[i] + chars[j] + bts[1],
            'User-Agent': '', #自己写
        }
        print(chars[i]+chars[j])
        sleep(random.randint(1,1000)*1.0/1000) #防止被ban
        response = requests.get(url, headers=headers)
        response.encoding = 'utf-8'
        if response.status_code == 200:
             print("ok")
             return headers

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值