本人的很多用词可能不太专业,希望大家多多包涵~
了解加速乐原理:准备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