为什么要写这样的工具
在平时挖洞渗透的过程中,我发现,前端往往会暴露很多敏感信息,但是如果我们手动去一个个的筛选,就会很浪费时间。而且涉及到深度较深的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
设置跨文件全局变量。