天天看點

網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門

Cloudflare是國外的一家安全防護公司,最近在很多網站上也看到了他的身影,比較明顯的特征就是讓你等待5秒鐘以驗證你是否是真實的浏覽器。

以 https://www.biovision.com/ 為例
網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門

另一個明顯的特征就是它的cookie裡面會包含__cfduid, cf_clearance 這個兩個字段。 如果你發現你通路的網站裡有這些特征,那麼毫無疑問他就是采用了 Cloudflare的安全防護了,我們這裡講他的初級防護,也就是等待5秒的js逆向分析。

首先通路網站,抓包分析。

網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門
網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門
網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門

可以很清晰地看到,第一次請求通路該網站會503,然後給你一個__cfduid的cookie,帶着這個cookie以及某幾個參數(後面會講到)去通路第二個url,會傳回給你cf_clearance這個cookie,最後帶着這倆cookie再次通路該網站即可正常拿到資料了。

接下來就是找第二個連結裡面的params參數了,不難發現,前面三個參數都是直接在第一次通路網站時傳回的靜态html裡面,用正則取出來即可,是以我們重點關注的是第四個參數jschl_answer,因為我們在源碼裡面沒有發現他。

網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門
_s = re.findall('name="s" value="(.*?)"', r.text)[0]
_jschl_vc = re.findall('name="jschl_vc" value="(.*?)"', r.text)[0]
_pass = re.findall('name="pass" value="(.*?)"', r.text)[0]
           

然後我們看第一次通路網站時傳回給我們的html,可以發現裡面有一大段很奇怪的js。

網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門
網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門

我們可以看到 這個a其實就是我們要的東西,a.value實際上就是我們需要找到的加密參數。接下來隻需要用execjs把這段js運作出來,拿到a.value的值即可。

r = s.get('https://www.biovision.com/', headers=headers)
print(r.text)

pattern = re.compile('setTimeout\(function\(\)\{(.*?)f.action \+= location.hash;', re.S)
code = pattern.findall(r.text)
code = re.sub('\s+(t = document.*?);\s+;', '', code[0], flags=re.S)
code = re.sub('a.value', 'value', code)
code = re.sub('t.length', '17', code)
code = 'function test(){' + code.strip() + ';return value;}'
s1 = execjs.compile(code)
t = s1.call('test')
print(t)
           
這裡講解一下t.length替換為17是怎麼來的,以免有些同學一頭霧水。直接拿源碼中的js去浏覽器運作,因為這個是固定值,是以我直接替換了,如下圖:
網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門

然後我們可以拿fiddler抓包拿到的這段js去運作,看看生成的結果是否和抓包裡的jschl_answer一緻。

網絡爬蟲-cloudflare五秒等待驗證逆向破解EndingGithub傳送門

可以看到完全一緻,至此逆向分析結束。

OK 大功告成

Ending

Github傳送門

持續更新ing (歡迎各種star與fork)

聯系方式: 442891187(QQ)

如有權益問題可以發私信聯系我删除

繼續閱讀