点击上方蓝字关注我吧!
1.前言
JSFinder是一款优秀的github开源工具,这款工具功能就是查找隐藏在js文件中的api接口和敏感目录,以及一些子域名。
github链接:https://github.com/Threezh1/JSFinder
用于提取的正则表达式参考了LinkFinder
SFinder获取URL和子域名的方式:
一些简单的使用方式:
简单爬取
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上面看使用说明。
因为我经常使用这款工具,我发现了很多不足之处,比如说,如果爬取一个大型一点的,会发现很多url,接口,但是大多数都是404,没有用处的,就是通过人工去筛选就得费好长一段时间,我有一次爬下来了1200多条,密密麻麻............................
所有我的设想是可以增加一个验证模块,进行简单的验证,扔掉那些不存在的url链接,减少人工的筛选。
改源码一定要找到关键点改,我这里直接在它进行数据处理的时候加入我想要的东西:
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返回的内容(这就是我当时的想法吧)
因为原工具是有把输出结果输出到一个文件的功能,但是我感觉不够直观,所以我把输出结果转换成了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"))
我把源码改成了一个类的形式,有利于以后的加入到大项目中,积小成多!
在没有加验证参数的情况下:
开启验证的情况下:
3.总结
本来还想加一个爬虫模块进去的,但是作者有自己的爬虫模块,就算了,如果可以的话,也可以把一些优秀的开源爬虫加进去,就真的很nice了,我以后再加把,先这样吧,运行有什么问题可以及时联系我,越改越实用。
挺香的!真香,找个机会把源码放到github上面去:
exe程序百度云链接:
链接:https://pan.baidu.com/s/17WIa94fr5EAHgfo4UI6Eyw
提取码:qq0c
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V3的分享
END
看完记得点赞,关注哟,爱您!
【往期推荐】
【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】
【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现
【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现
【奇淫巧技】如何成为一个合格的“FOFA”工程师
走过路过的大佬们留个关注再走呗
往期文章有彩蛋哦
本文始发于微信公众号(渗透Xiao白帽):【附工具链接】真香系列-JSFinder实用改造
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论