js提取指定网站内容 真香系列-JSFinder实用改造
优采云 发布时间: 2022-06-27 19:27js提取指定网站内容 真香系列-JSFinder实用改造
点击上方蓝字关注我吧!
1.前言
JSFinder是一款优秀的github开源工具,这款工具功能就是查找隐藏在js文件中的api接口和敏感目录,以及一些子域名。
github链接:https://github.com/Threezh1/JSFinder
用于提取的正则表达式参考了LinkFinder
SFinder获取URL和子域名的方式:
一些简单的使用方式:
简单爬取
python JSFinder.py -u http://www.mi.com<br />#这个命令会爬取 http://www.mi.com 这单个页面的所有的js链接,并在其中发现url和子域名
深度爬取
python JSFinder.py -u http://www.mi.com -d<br />#深入一层页面爬取JS,时间会消耗的更长,建议使用-ou 和 -os来指定保存URL和子域名的文件名python JSFinder.py -u http://www.mi.com -d -ou mi_url.txt -os mi_subdomain.txt
批量指定URL/指定JS
指定URL:
python JSFinder.py -f text.txt
指定JS:
python JSFinder.py -f text.txt -j
可以用brupsuite爬取网站后提取出URL或者JS链接,保存到txt文件中,一行一个。
指定URL或JS就不需要加深度爬取,单个页面即可,等等,这可以去github上面看使用说明。
2.改造
2.1 为什么要改造这个东西?
因为我经常使用这款工具,我发现了很多不足之处,比如说,如果爬取一个大型一点的,会发现很多url,接口,但是大多数都是404,没有用处的,就是通过人工去筛选就得费好长一段时间,我有一次爬下来了1200多条,密密麻麻............................
所有我的设想是可以增加一个验证模块,进行简单的验证,扔掉那些不存在的url链接,减少人工的筛选。
2.2 找到源码一顿改(验证模块)
改源码一定要找到关键点改,我这里直接在它进行数据处理的时候加入我想要的东西:
thread_num = 0 info = '访问成功' lock = threading.Lock() if urls == None: return None find_url_all_num = len(urls) content_url = "" content_subdomain = "" if self.args.verify !=0: print("A total of Find " + str(len(urls)) + " URL:\n") print("-----------------------But further validation is needed-----------------!\n\n\n") domian_text = requests.get(domian,verify =False).text print("The length of the page currently visited =>"+str(len(domian_text))) result ={} for url in urls: thread_num += 1 self.therads_op(url, content_url, lock,thread_num,result) if thread_num == 100: time.sleep(1) find_url_success_num = 0 for length,url_list in result.items(): print("-----------------------The return packet length is :{len}------------------------".format(len =length)) for url in url_list: print(url+"\n") find_url_success_num += 1 content_url+=url+"\n"
关键的一些代码,这里因为使用了网络验证,所以写了个多线程:
def therads_op(self,url,content_url,lock,thread_num,result): threading.Thread(target=self.request(url,content_url,lock,result),args=(url,content_url,lock,result,)) if lock.acquire(): thread_num -= 1 lock.release()
验证模块:
def request(self,url,content_url,lock,result): headers = { "User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", } try: resp = requests.get(url,verify = False,timeout = 10,headers=headers) if resp.status_code != 404 and lock.acquire(): content_url += url + "\n" if result.get(str(len(resp.text)), 0) == 0: result[str(len(resp.text))] = [] result[str(len(resp.text))].append(url) else: result[str(len(resp.text))].append(url) lock.release()<br /> except Exception as e: pass finally: try: lock.release() except RuntimeError as e: pass
这里我是直接判断它返回值是不是404,当然你也可以加入你自己的判断条件,可以看到我的源码里,有计数返回包的长度,因为我发现很多包的返回包都是一样的,所以我这里判断长度,进行归类,有利于我们自己人工筛选,我们只需要得到任意长度的一个url返回包,就可以知道其他有着相同长度的url返回的内容(这就是我当时的想法吧)
2.3 找到源码一阵改(输出数据格式)
因为原工具是有把输出结果输出到一个文件的功能,但是我感觉不够直观,所以我把输出结果转换成了html文件,可以直接点击url,进行访问,方便了很多。
if self.args.output_html !=None: table_tr0 = '' html = html_Template() total_str = '共url: %s,访问成功:%s,失败 %s' % (find_url_all_num, find_url_success_num, find_url_all_num-find_url_success_num) if self.args.verify !=0: for length,url_list in result.items(): for url in url_list: url_a = "<a href={url}>点击</a>".format(url=url) table_td = html.TABLE_TMPL % dict(length=length, url=url, result=info, ask_url=url_a, ) table_tr0 += table_td else: for url in urls: url_a = "<a href={url}>点击</a>".format(url=url) table_td = html.TABLE_TMPL % dict(length="无法获取", url=url, result=info, ask_url=url_a, ) table_tr0 += table_td output = html.HTML_TMPL % dict(domain=self.args.url,value=total_str, table_tr=table_tr0, ) # 生成html报告 filename = '{date}_{url}.html'.format(date=time.strftime('%Y%m%d%H%M%S'),url = self.args.output_html) dir = str(os.getcwd()) filename = os.path.join(dir, filename) with open(filename, 'wb') as f: f.write(bytes(output, "utf-8"))
我把源码改成了一个类的形式,有利于以后的加入到大项目中,积小成多!
2.4 效果预览
在没有加验证参数的情况下:
开启验证的情况下:
3.总结
本来还想加一个爬虫模块进去的,但是作者有自己的爬虫模块,就算了,如果可以的话,也可以把一些优秀的开源爬虫加进去,就真的很nice了,我以后再加把,先这样吧,运行有什么问题可以及时联系我,越改越实用。
挺香的!真香,找个机会把源码放到github上面去:
exe程序百度云链接:
链接:https://pan.baidu.com/s/17WIa94fr5EAHgfo4UI6Eyw 提取码:qq0c 复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V3的分享
END
看完记得点赞,关注哟,爱您!
请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法*敏*感*词*的不归路,一切后果自付!