这种 512 状态反爬虫怎么绕过?

2017-10-30 13:28:58 +08:00
 0xvincebye

如图因为一些原因需要爬取 http://www.cnvd.org.cn/漏洞信息 然而请求返回状态为 521,并返回一串代码


<script>var x="return@Oct@window@for@https@false@reverse@setTimeout@while@f@firstChild@h@_phantom@addEventListener@17@substr@if@DOMContentLoaded@innerHTML@e@length@a@i@1509340839@4@catch@995@challenge@__phantomas@cookie@Path@Expires@var@Mon@replace@r@toLowerCase@div@0@cd@2@String@l@eval@document@20@join@30@fromCharCode@createElement@__jsl_clearance@try@location@function@charAt@39@href@match@06@GMT@captcha@1500@x@dc@else@attachEvent@onreadystatechange".replace(/@*$/,"").split("@"),y="11 1b=1m(){9(3.d||3.t){};11 18,20='1j=o.r|17|';11 a=[1m(1v){1 1c('1a.1h('+1v+')')},(1m(){11 c=1d.1i('16');c.j='<m 1p="\\'/\\'">1v</m>';c=c.b.1p;11 14=c.1q(/5?:\\/\\//)[17];c=c.g(14.l).15();1 1m(1v){4(11 n=17;n<1v.l;n++){1v[n]=c.1n(1v[n])};1 1v.1f('')}})()];18=[[(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+((-~[]|19)+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[~~{}],([19]*((19^-~[]))+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[~~{}],[-~[]]+[~~{}]+([19]*((19^-~[]))+[])],[([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[]),([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[])],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+([19]*((19^-~[]))+[]),[-~[]]+[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]]),(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[-~[]]],[[-~[]]+[~~{}]],[[-~[]]+[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]]),(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[p],(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+((-~{}<<-~{})+[]+[[]][~~[]]),([(-~[]|-~(+!+{}))]*((-~[]|-~(+!+{})))+[]+[])+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]])+[~~{}],[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],[-~[]]+((-~{}<<-~{})+[]+[[]][~~[]])+[~~{}],(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),[-~[]]+[~~{}]+([19]*((19^-~[]))+[])],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]],[[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[]),[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))]+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])+(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[]),((-~[]|19)+[]+[])+[(+!+{})-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))],(([(-~{}<<-~{})]+~~[]>>(-~{}<<-~{}))+[]+[])+[-~[]],([19]*((19^-~[]))+[])+(-~[]-~[]-~![]+(-~{}<<-~{})+(-~[]|(-~{}<<-~{}))+[]+[])]];4(11 n=17;n<18.l;n++){18[n]=a.7()[[-~[]]](18[n])};18=18.1f('');20+=18;8('1l.1p=1l.1p.13(/[\\?|&]1t-s/,\\'\\')',1u);1d.u=(20+';10=12, 1g-2-f 1r:1e:1o 1s;v=/;');};h((1m(){1k{1 !!3.e;}q(k){1 6;}})()){1d.e('i',1b,6);}21{1d.22('23',1b);}",z=0,f=function(x,y){var a=0,b=0,c=0;x=x.split("");y=y||99;while((a=x.shift())&&(b=a.charCodeAt(0)-77.5))c=(Math.abs(b)<13?(b+48.5):parseInt(a,36))+y*c;return c},g=y.match(/\b\w+\b/g).sort(function(x,y){return f(x)-f(y)}).pop();while(f(g,++z)-x.length){};eval(y.replace(/\b\w+\b/g, function(y){return x[f(y,z)-1]}));</script>

正常访问没问题,curl,requests 请求就返回 521
考虑到效率问题和环境问题,暂时没打算用 phtomjs 等
请问这种反爬虫是根据什么判断的,或者说该怎么绕过呢?

9680 次点击
所在节点    Python
23 条回复
jlsk
2017-10-30 13:33:05 +08:00
你连***ra***t 都不知道还做什么爬虫啊?
pynix
2017-10-30 13:44:12 +08:00
这代码有点像 brainfuck
Event
2017-10-30 13:55:58 +08:00
直接模拟运行这段取 cookies 试试看
402124773
2017-10-30 14:00:51 +08:00
0xvincebye
2017-10-30 14:02:15 +08:00
@jlsk ??什么
@pynix 不知道呀
@Event 模拟运行这段是什么意思,请求的时候加了 cookie 和 headers
0xvincebye
2017-10-30 14:03:35 +08:00
@402124773 谢谢,感觉情况一样,我试试
vtwoextb
2017-10-30 14:07:53 +08:00
重启一下路由用爬虫再爬 有问题么?
Event
2017-10-30 14:09:51 +08:00
@0xvincebye 这似乎是一段 javascript 模拟运行后拿运行 js 后的 cookie 加上去
shiduu
2017-10-30 14:21:36 +08:00
网上搜索了下,这是知道创宇云安全上的反爬功能。
402124773
2017-10-30 14:32:23 +08:00
一段 javascript 混淆后的代码,主要两个作用,
1.屏蔽一些不能执行 js 的爬虫,屏蔽模拟浏览器的爬虫。
2.设置特定的 cookies。下次发送请求的时候,返回就正常了。
0xvincebye
2017-10-30 14:54:54 +08:00
@vtwoextb
@Event
@shiduu
@402124773
这是知道创宇加速乐的一个反爬虫机制,看到上面文章里的分析文章,加上了__jsl_clearance 和__jsluid 值还是返回 521
shiduu
2017-10-30 15:35:10 +08:00
难道升级了策略。。。
gaojin
2017-10-30 15:39:34 +08:00
第一次请求会 set-cookies,
把 cookie 带上再请求一次就可以了。

第一次请求


第二次请求
afeicool
2017-10-30 15:44:31 +08:00
curl 'http://www.cnvd.org.cn/flaw/list.htm' -H 'Host: www.cnvd.org.cn' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: http://www.cnvd.org.cn/' -H 'Cookie: __jsluid=f669604ddecafb6c40a2a3829f39742f; __jsl_clearance=1509349167.145|0|wMTYJSR%2Fl5astzWDPI574Q%2FYYOc%3D; JSESSIONID=522CF658C2D3044420A6B1FFC1EE004E; bdshare_firstime=1509349155230' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Cache-Control: max-age=0'
afeicool
2017-10-30 15:45:02 +08:00
把头带全就行了,这网站把你作宝搞
dreammes
2017-10-30 16:01:33 +08:00
楼上都说了方法了
0xvincebye
2017-10-30 16:43:52 +08:00
@shiduu 这个不太清楚,可能是我姿势不对
@gaojin 我自己加了__jsl_clearance 和__jsluid 还是 521
@afeicool 你试过成功了吗?我没成功,还是 521
@dreammes 这个确实没成功
lqf96
2017-10-30 17:04:08 +08:00
额,就不能 puppetter+headless chrome 直接爬么
headless browser 省力的多
afeicool
2017-10-30 19:01:37 +08:00
试了一下,确实有点麻烦,不太清楚他的机制,不过用 puppetter 是一定可以的。我觉得非常规站就用非常规的爬法。
gaojin
2017-10-31 11:49:26 +08:00
@0xvincebye 看代码,全部 copy headers 是可以的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/401908

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX