MENU

利用Cookie机制鉴别Tor Browser和爬虫

August 7, 2019 • Read: 439 • 代码,安全

大概从8月6号中午开始,「暗网交易市场」的爬虫就开始疯狂报「登录失败」的错误,下午抽空修复了一下,发现deepmix的站长利用了一个Cookie机制配合Tor Browser的特性很巧妙地区分出正常访问和爬虫,记录一下浪费在这上面的两个小时。

定位问题

deepmix的登录页面需要从入口跳转多次进入,这几次跳转均正常,只有在登录POST请求发送之后,又跳转回入口页进入死循环,可以确定问题位于登录POST请求处。

一开始判断是网站做了什么反爬措施识别了非浏览器的请求,准备用Chrome配合Burp抓包看看有什么区别,但是Chrome也出现了同样的问题,无限跳转入口页。

Tor Browser是一个把Tor和Firefox打包在一起魔改后的浏览器,按理说和正常浏览器是没什么区别的,不应该出现Chrome也被识别出来问题,只能重点抓Tor Browser的包来看,但Tor Browser的代理必须配置到Tor的监听端口上,不能配到Burp里,只好在调试工具里看。

Chrome登录抓包

Tor Browser

非常明显,Chrome登录时POST请求只带了3个cookie,而Tor Browser登录时会带走6个cookie。

Tor Browser登录

网站可以根据POST请求中的Cookies轻易鉴别出Tor Browser和其余请求。

原理

为什么Chrome请求的时候会少3个cookie呢?这就要注意少的那3个cookie的特殊之处了,缺少的phpbb3_nspa_kphpbb3_nspa_sidphpbb3_nspa_u都有一个secure属性。

标记为 Secure 的Cookie只应通过被HTTPS协议加密过的请求发送给服务端。但即便设置了 Secure 标记,敏感信息也不应该通过Cookie传输,因为Cookie有其固有的不安全性,Secure 标记也无法提供确实的安全保障。从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)无法使用Cookie的 Secure 标记。

因为Chrome访问时判断请求地址是HTTP协议,带有secure标记的cookie不传送,导致登录失败,而爬虫的session机制一般都是遵循标准,也同样不带有这3个cookie而失效。

Tor Browser修改了浏览器的安全判断,当通过Tor网络访问时,均认为是安全链接。deepmix借用了Tor Browser的这一特性,在入口页跳转的过程中塞进去3个secure的cookie,达到在注册、登录等关键页面上拦截爬虫的效果。

Tor Browser Secure Connection

修复

修复这个问题也很简单,只需要重置所有cookie的secure属性即可。

for c in session.cookies:
    c.secure = False

参考链接

Archives QR Code
QR Code for this page
Tipping QR Code