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

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

https://www.biovision.com/ 爲例在這裏插入圖片描述

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


首先訪問網站,抓包分析。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

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


接下來就是找第二個鏈接裏面的params參數了,不難發現,前面三個參數都是直接在第一次訪問網站時返回的靜態html裏面,用正則取出來即可,所以我們重點關注的是第四個參數jschl_answer,因爲我們在源碼裏面沒有發現他。

在這裏插入圖片描述

_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。

在這裏插入圖片描述
在這裏插入圖片描述

我們可以看到 這個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去瀏覽器運行,因爲這個是固定值,所以我直接替換了,如下圖:

在這裏插入圖片描述

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

在這裏插入圖片描述

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

OK 大功告成

Ending

Github傳送門

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章