*声明:*请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外。
一.总体概述
最近在制作自己的组件库和指纹库,爬完goby的想要爬fofa的,但发现fofa官方的要难爬很多
难点:
1.前端sign值绕过 2.json格式的存储 3.反爬虫机制绕过
最终效果如下
二.fofa爬取过程
首先通过curl构造了几个基本的request请求
可以看到有sign标识,当params里面的参数值进行改变时,便会出现响应
本来觉得fofa这样的网站js文件肯定会进行混淆处理,懒得浪费时间,打算采用selenium,但又不甘心的翻了翻js文件
找到了RSA的私钥,并且看到了之前我们所请求的app_id
但还是不清楚具体过程,debug一下
找到具体sortfun函数
t("sortFun", (function(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "" , o = {} , n = {}; for (var a in e) String(e[a]) && (o[a] = e[a]); Object.keys(o).sort().map((function(e) { n[e] = o[e] } )); var i = ""; Object.keys(n).map((function(e) { i += "".concat(e).concat(n[e]) } )); var r = ia.createSign("RSA-SHA256"); return r.update(i), r.sign(t, "base64") } ));
接受两个参数,e,t
根据之前的具体加密函数
e.params.sign = i.$sortFun(t, p || "xxxx") || "",
p这里无定义,那就传入rsa私钥
清晰明了了,函数接受传参的变量e是传入的t,p则是rsa私钥
写个对应python函数看看
这里捣鼓了一个多小时
我这里给出的加密结果居然跟js生成的不一样
匪夷所思
两周分界线
忙完学校项目,时隔两周再来看看,发现居然有前置条件,value为空就不进行concat了,破防了,go写到一半了,懒得改了,直接继续冲刺
逻辑如下
绕过sign后,接下来逻辑就比较简单了
校验、求总页数、翻页
整个发送包其实比较简单,我这里去除了authorization参数,只通过sign参数校验以及cookie
最后效果
会出现这两个问题
一旦每天爬取超过上限或者是page超过100,就会出现相应两个问题
有需要的可以关注作者或者私聊作者,涉及到商业机密,无法吐露太多,见谅