被动扫描系统项目,主要功能为通过fiddler插件保存数据包并入库,用户使用web管理界面自定义规则扫描漏洞,漏洞结果扫猫过程中实时展示,目前主要是检测越权和敏感信息检测等模块。
-
Fiddler插件:C#开发 VS2015编译 对应项目fiddler_log目录
-
网站前端:Nodejs Vue 2.9 vue-admin-template前端框架 对应项目client
-
后端:Flask网站接口,Python完成漏洞检测。 对应项目目录server
-
release: 编译好的文件
-
数据库: MySQL5.6
首页
2021.6.11——添加docker部署
-
宿主机MySQL配置,目前使用的宿主机MySQL保存数据
-
新建数据库fiddler_log
CREATE fiddler_log IF NOT EXISTS
-
导入SQL文件,生成表结构
导入项目根目录下fiddler_log_structure.sql文件
source ./fiddler_log_structure.sql
-
配置docker访问宿主机MySQL权限
-
iptables开启允许docker访问宿主机MySQL端口
172.17.0.2是docker容器默认IP,请根据实际情况修改
sudo iptables -I INPUT -s 172.17.0.2 -p tcp --dport 3306 -j ACCEPT
-
设置MySQL监听非本机
修改MySQL配置文件,Kali是在50-server.cnf文件
cd /etc/mysql/mariadb.conf.d
sudo vim 50-server.cnf
找到bind-address 127.0.0.1那行,最前面添加#注释
重启MySQL服务
sudo systemctl restart mysql.service
-
授予docker对Mysql数据库操作权限
sudo mysql -uroot -p
进入MySQL后,授权对应docker容器IP(172.17.0.2)访问fiddler_log数据库权限
GRANT ALL PRIVILEGES ON fiddler_log.* TO 'root'@'172.17.0.2' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
刷新权限
flush privileges;
重启MySQL服务
sudo systemctl restart mysql.service
-
-
-
拉取Docker镜像
sudo docker pull kalagin/fiddler_tools:latest
-
启动容器并修改后端接口
sudo docker run -ti -p 80:80 -e MYSQL_URI=mysql://root:PASSWORD@192.168.32.132:3306/fiddler_log -d kalagin/fiddler_tools:latest
其中PASSWORD对应数据库密码,IP对应宿主机IP
查看容器CONTAINER ID
sudo docker ps -a
进入容器
sudo docker exec -it CONTAINER_ID bash
cd /fiddler_tools/client/dist/
config.js是配置后端接口文件
修改app_api_url为自己ip地址+端口(前面宿主机非80端口 -p 8003:80,使用8003),VPS的话是外网IP,配置了域名的话直接用域名,注意后面带一个/api
-
重启容器
sudo docker restart CONTAINER_ID
访问 http://192.168.32.132 即可,VPS直接对应外网IP
- 下载项目源代码
sudo git clone https://github.com/wdsjxh/fiddler_tools.git
cd fiddler_tools
- 宿主机MySQL配置同上
- 修改后端ip接口
cd client/dist
sudo vim config.js
app_api_url改成自己的后端地址,##注意带上/api## 4. 切换到项目根目录,开始构建docker
sudo docker build -t fiddler_tools:test .
注意最后的".",tag名字可以自定义
- 开始运行项目
sudo docker run -ti -p 80:80 -e MYSQL_URI=mysql://root:PASSWORD@192.168.32.132:3306/fiddler_log -d kalagin/fiddler_tools:test
- 访问 http://192.168.32.132 即可,VPS直接对应外网IP,虚拟机安装对应虚拟机IP
插件编译
- 可参考fiddler插件开发环境,添加fiddler.exe到项目中。
- 添加Newtonsoft.Json.dll到项目引用
- 项目编译,release提供了编译好的插件fiddler_log.dll和Newtonsoft.Json.dll
后端安装
python3 -m pip install -r requirements.txt
- 新建数据库fiddler_log(utf8编码),导入数据库文件fiddler_log_structure.sql
- config/dbconfig.py中的mysqlhost数据库配置,数据库名fiddler_log
my_api填写域名或ip,my_api_path处填写前端打包文件夹dist中配置文件config.js的路径,和“前端打包”中的第二步相对应,docker部署下是/fiddler_tools/client/dist/config.js,自己源码安装以实际路径为准。 - flask_main.py 本地开发环境,flask_main_online.py 线上环境
- 运行
python3 flask_main.py
本地 运行python3 flask_main_online.py
线上环境 - 再运行监听扫描状态文件scan_main.py
python3 scan_main.py
开发数据库使用的MySQL5.6,导入数据库过程中可能会出现specified key too long 709 byte,自行修改数据库配置 线上部署推荐使用Flask+Nginx+Gunicorn+HTTPS,详细部署请参考其他教程
前端打包
-
安装依赖
npm install
-
修改接口地址
修改public/config.js中app_api_url为自己IP地址,注意带/api -
开发环境
npm run dev
上线打包npm run build:prod
-
打包好的dist文件夹放在后端根目录下,与flask文件中 static_folder="./dist/static",template_folder="./dist")对应
- 注册web后台账号,目前没有做限制
-
新建项目
项目名称作为标识用,默认会生成一个default项目。
-
下载安装fiddler被动扫描插件
-
安装好fiddler软件。
-
复制fiddler插件( fiddler_log.dll )到C:\Users\用户名\Documents\Fiddler2\Scripts目录下,该目录初次打开fiddler软件会自动生成。
手动编译或者直接使用release/fiddler_log.dll
-
复制插件所需要的json库( Newtonsoft.Json.dll )到fiddler安装目录下的Scripts目录下
使用release/Newtonsoft.Json.dll
-
-
复制web上的抓包token
-
fiddler被动扫描插件处启动并选择项目
- fiddler标签栏找到“fiddler_tools”插件
- 复制从网页端复制的token
-
选择项目
选择创建过的项目
-
配置好fiddler代理端口开始抓包,抓包结束
-
配置具体扫描规则
在网页端扫描规则配置处可新建、编辑具体规则,下面说明用的“默认规则”
- 配置名称,必填且不可修改,用作配置标识
- 越权检测主要分为替换cookie和替换uid两种类型,替换cookie主要是扫描不需要cookie就能成功越权和只是修改cookie就能越权的情况,替换uid是扫描修改数据中指定参数值便能越权情况,可以是天天基金uid、通行证passportid等。
- 替换cookie:填写替换当前的cookie
- 原始uid:待检测的字段值
- 启动敏感信息:检测手机号、身份证、银行卡
- 启动监控:检测返回包中包含的uid、phone等字段,后续可配置
-
开启扫描
Dashboard/项目配置/扫描任务启动配置,选择配置之后启动
备注:用户名、密码处已废弃,选择"越权排除列表"表示当前抓取公共页面或者访客用户登录,为了降低访问到新闻页、公开数据页导致的越权检测误报。
1、MySQL数据库报错Index column size too large. The maximum column size is 767 bytes.
MySQL5.6版本默认有索引长度限制,解决方案可参考:Index column size too large. The maximum column size is 767 bytes和https://stackoverflow.com/questions/30761867/mysql-error-the-maximum-column-size-is-767-bytes
容器var/log/supervisor目录下,保存所有输出日志和错误日志
- 整理扫描接口,加入pocsuite支持
- 扫描任务处websocket长链接处理,后台进行扫描操作,前台可以做其他任务
- 优化漏洞检测数据包越权处封装,考虑多重越权情形下越权,此处极难通过手工挖掘漏洞
- cookie处优化,目前市场上通过单一cookie作为用户权限比较少,空cookie和替换cookie越权检测导致误报会很高,考虑复杂情况方案:如token在header头、JWT认证、post数据包中自定义cookie字段等多种情况。
- 解决由于数据包放置时间太长,重放情况下原始会话失效问题,这一点其他扫描器也不好解决,可以暂时放置,比如AWVS,模拟手动登录都有会话cookie获取不到问题。
- 未考虑到扫描效率问题:多用户、多任务同时扫描下的任务调度及优化
- 分布式扫描实现
- 代理功能实现
- 抓包端优化方案,非依赖于fiddler软件,统一抓包端口,开启端口服务方式或者添加浏览器插件方式实现
- 整合其他安全设备和工具能力,制定统一接入接口,目前只需要请求包,返回包(可选),时间(可选),http/https,项目名,用户名几个字段就好。
本项目仅供技术交流,请勿用于商业及非法用途,如产生法律纠纷与本人无关