【附工具链接】真香系列-JSFinder实用改造

admin 2021年5月13日20:47:56评论224 views字数 4167阅读13分53秒阅读模式
【附工具链接】真香系列-JSFinder实用改造

点击上方蓝字关注我吧!


【附工具链接】真香系列-JSFinder实用改造

1.前言

JSFinder是一款优秀的github开源工具,这款工具功能就是查找隐藏在js文件中的api接口和敏感目录,以及一些子域名。

github链接:https://github.com/Threezh1/JSFinder

用于提取的正则表达式参考了LinkFinder

SFinder获取URL和子域名的方式:

【附工具链接】真香系列-JSFinder实用改造

一些简单的使用方式:

简单爬取

python JSFinder.py -u http://www.mi.com
#这个命令会爬取 http://www.mi.com 这单个页面的所有的js链接,并在其中发现url和子域名

深度爬取

python JSFinder.py -u http://www.mi.com -d
#深入一层页面爬取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上面看使用说明。



【附工具链接】真香系列-JSFinder实用改造
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-----------------!nnn")      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()
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 效果预览

在没有加验证参数的情况下:

【附工具链接】真香系列-JSFinder实用改造

【附工具链接】真香系列-JSFinder实用改造

开启验证的情况下:

【附工具链接】真香系列-JSFinder实用改造

【附工具链接】真香系列-JSFinder实用改造


           3.总结

本来还想加一个爬虫模块进去的,但是作者有自己的爬虫模块,就算了,如果可以的话,也可以把一些优秀的开源爬虫加进去,就真的很nice了,我以后再加把,先这样吧,运行有什么问题可以及时联系我,越改越实用。

挺香的!真香,找个机会把源码放到github上面去:

【附工具链接】真香系列-JSFinder实用改造

exe程序百度云链接:

链接:https://pan.baidu.com/s/17WIa94fr5EAHgfo4UI6Eyw 提取码:qq0c 复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V3的分享





【附工具链接】真香系列-JSFinder实用改造

END

【附工具链接】真香系列-JSFinder实用改造


【附工具链接】真香系列-JSFinder实用改造


看完记得点赞,关注哟,爱您!

请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!

【往期推荐】

未授权访问漏洞汇总

【内网渗透】内网信息收集命令汇总

【内网渗透】域内信息收集命令汇总

记一次HW实战笔记 | 艰难的提权爬坑

【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】

【超详细】Fastjson1.2.24反序列化漏洞复现

【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现

【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现

【奇淫巧技】如何成为一个合格的“FOFA”工程师

走过路过的大佬们留个关注再走呗【附工具链接】真香系列-JSFinder实用改造

往期文章有彩蛋哦【附工具链接】真香系列-JSFinder实用改造

【附工具链接】真香系列-JSFinder实用改造

本文始发于微信公众号(渗透Xiao白帽):【附工具链接】真香系列-JSFinder实用改造

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月13日20:47:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【附工具链接】真香系列-JSFinder实用改造http://cn-sec.com/archives/255969.html

发表评论

匿名网友 填写信息