# 为什么要写这样的工具
在平时挖洞渗透的过程中,我发现,前端往往会暴露很多敏感信息,但是如果我们手动去一个个的筛选,就会很浪费时间。而且涉及到深度较深的 js 还可能无法看到或者忽略。网上现有的工具如 jsfinder,hae 等工具也都有一些缺陷。因此这里博百家之长,自己重新实现了一个爬虫,并针对一些敏感数据进行正则匹配,从而帮助我们发现前端中泄露的各种信息让我们更方便的挖洞。
# PupilSearch
https://github.com/ruyueattention/PupilSearch
PupilSearch 本质上就是一个爬虫,能够自动帮我们查询搜索 web 前端中泄露的信息。包括 api 接口、url、各种敏感信息(JWT TOKEN、IP、Email、Phone、身份证、AccessKey、SecretKey、APPID、UserName、Password、SSHKey、RSAKey)。
该爬虫已应用于 Kunyu ,感谢风起 (我小儿)。
https://github.com/knownsec/Kunyu
其工作流程大致如下:
# 功能特点
- 递归回溯,根据输入参数设定追溯深度,自动递归回溯获取到的资源,再从中匹配敏感信息。
- 文件各模块功能清晰,简介易改。
- 保存有访问历史,根据访问历史自动去除追溯队列中的重复请求。
- 初次访问会调用 chromium 进行渲染页面,防止部分数据是由 js 动态渲染添加的,导致识别不到的问题。
- 按域名去重复保存结果
- 判断当前 js 是否为 webpack 打包的 js,对于疑是 webpack 打包的 js,尝试获取 map。
- 多线程,不值一提。
- 根据正则匹配大量敏感信息(可自行修改正则),目前支撑匹配 JWT TOKEN、IP、Email、Phone、身份证、AccessKey、SecretKey、APPID、UserName、Password、SSHKey、RSAKey 等等。
# 使用方法
# 环境准备
pip install -r requirement.txt |
# 快速使用
# 输入目标
python3 PupilMain.py -u http://target.com |
其他参数不设置的话,就默认追溯深度为 2、线程为 5、不对接口进行追溯、不对非当前 host 的 url 进行追溯。
如果要设置请参考各个参数的功能,合理设置。
# 自定义参数
当前支持参数有 -t 线程 -d 追溯深度 -a 对所有抓取到的 url 进行追溯 -f 对获取到的接口进行追溯
特别说明:
-u 目标:该有的 / 不能少,比如目标域名是 aaa.com/sso/ ,不能偷懒为 aaa.com/sso 。并且 url 中不能存在 #。
-d 追溯深度:0 则代表只针对当前 url 搜索,不追溯其他 url,1 则代表对当前 url 得出的 js 等结果进行追溯,2 则是对它的结果的结果进行追溯。一般的网站追溯到 3 就没数据了。
-a:默认情况下是不会对抓取到的所有 url 都进行追溯的,只会追溯当前 host 的 url。开启后,则追溯全部的 url,所以该参数慎用。在开启这个功能的情况下,推荐追溯深度调小。
-f:默认情况下不对获取到的接口进行追溯。
--proxy : 代理设置。
python3 PupilMain.py -u http://target.com -d 3 -a True -f True --proxy=http://127.0.0.1:8080 |
# 输出结果
结果会 print 在控制台,同时也会保存在 result 目录下。
# 已知缺陷
数据是经正则进行匹配的,可能会导致部分数据匹配不成功或者匹配到脏数据。尤其是 ip 和 password 和 username 等信息。
可根据自己的具体使用进行正则修改,在 SearhData.py 中。
2. 部分页面在渲染页面的时候会有一些小 bug,这里在遇到 bug 的时候会逃过渲染,这可能导致结果不准确。
# 各个文件的作用
PupilMain.py
入口文件,初始化各种参数,同时对一些参数进行简单的处理。
TrackUrl.py
追溯文件,主要是发送 requests 请求。
SearchData.py
数据获取文件,将 requests 获取到的数据在这里进行匹配处理。
在这里可以修改各种正则匹配式,匹配自己想要的数据。
ExportHandler.py
数据的输出,主要是对数据做一些简单的去重处理。
这里可以修改数据的返回形式。
GlobalVariable.py
设置跨文件全局变量。