这个项目其实是我自己写的一个测绘平台的其中的一个小模块 先开放出来给大家试用一下 前端太难写了
KOKO-MONI
https://github.com/burpheart/koko-moni/
介绍
本项目是一个网络空间搜索引擎监控平台,本项目聚合了 Fofa、Hunter、Quake、Zoomeye 和 Threatbook 的数据源,并对获取到的数据进行去重与清洗。
该项目可以用于蓝方监控自身资产公网暴露以及 SRC 项目新增资产进行监控。
功能
- 聚合 Fofa、Hunter、Quake、Zoomeye 和 Threatbook 的数据源,快速查询相关资产信息。
- 自动化监控,可定时进行资产信息爬取,及时发现新增资产。
- 支持钉钉,推送加消息提醒,让您能够及时发现异常情况。
- 提供 Web 检索界面,使得查询操作更加方便。
安装
解压安装包
按照config.demo.yaml 内的注释填写配置项 保存为config.yaml
示例配置
global: hunter_key: "" zoomeye_key: "" quake_cookies: "" threatbook_cookies: "" fofa_email: "" fofa_key: "" save_path: "./data" ip: "127.0.0.1" port: "12347" secret_key: "123456" plus_push_key: "" ding_push_key: "" scan_on_start: true
jobs: - name: "one-ip" schedule: "@daily" hunter_query: "ip=\"1.1.1.1/24\"" hunter_page: 10 quake_query: "ip: \"1.1.1.1/24\"" quake_page: 50 threatbook_query: "ip=1.1.1.1/24" threatbook_page: 50 zoomeye_query: "1.1.1.1/24" zoomeye_page: 10 fofa_query: "ip=\"1.1.1.1/24\"" fofa_page: 10 - name: "哔哩哔哩-域名" schedule: "@daily" hunter_query: "domain=\"bilibili.com\"" hunter_page: 10 quake_query: "domain: \"bilibili.com\"" quake_page: 50 threatbook_query: "root_domain=bilibili.com" threatbook_page: 50 zoomeye_query: "site:bilibili.com" zoomeye_page: 10 fofa_query: "domain=\"bilibili.com\"" fofa_page: 10
|
启动 ./koko-moni
UI
注: web无登陆界面 直接访问 /?key=secret_key
鉴权 secret_key不正确时被RST连接为正常现象 key不正确触发反测绘
搜索语法
本项目使用了 ZED 作为结构化数据搜索引擎
可参考zed官方文档
字段见输出文件
简单运算
int tlen >= 0
时间 timestamp >= 2023-01-08T05:55:22.200Z
字符串 title=="404"
|
如果带有特殊符号(中文)的键 根下可以使用 this[""]
引用
this["status-code"] >10 this["content-length"]==158 非根 abc["测试"]=="123456"
多层复杂json结构 {"a":{"b":{"c":"123"}}} this["a"].b.c=="123" {"a":{"b":["123","456"]}} this["a"].b[0]=="123"
|
强制类型转换
cast(数据,<类型>)
字符串日期转time
cast("2022-09-19T18:11:05.545961703+08:00",<time>)
字符串ip转ip
cast("1.1.1.1",<ip>)
也可以简写成
time("2022-09-19T18:11:05.545961703+08:00") ip("1.1.1.1")
用例
cidr_match(1.1.0.0/16,ip(host)) //匹配ip是否在cidr内
time(timestamp) >= 2022-01-08T05:55:22.200Z
|
常用操作
排序
升序排序
sort dns_names
降序排序
sort -r dns_names
in
判断某个值是否在数组内
{"test":[301,200]} 200 in test
|
聚合查询
统计计数
count() by key
输出 key,count()
与sort组合使用
count() by title|sort -r count
TOOD
已知问题
- 示例配置文件 fofa_key: “”后少一个空格
- hunter web banner 异常 api返回到的不是对应host的返回(hunter的问题)
API
全局参数
鉴权url参数 key
在配置文件中设置(secret_key)
测试推送
请求方式: GET
请求URL: /api/testpush
请求参数: 无
聚合查询
请求方式: GET
请求URL: /api/aggregate
请求参数:
参数名 |
必选 |
类型 |
说明 |
query |
是 |
string |
ZQ查询语句 |
响应格式: JSON
响应示例:
{ "data": { "count": 92, "elapsed": 226, "finger": [ { "finger": "Fofa", "count": 75 }, { "finger": "Hunter", "count": 17 }, { "finger": "Nginx", "count": 7 }, { "finger": "Lua", "count": 7 } ], "ipcount": 77, "port": [ { "port": "443", "count": 57 }, { "port": "80", "count": 26 } ], "title": [ { "count": 29 }, { "title": "301 Moved Permanently", "count": 16 }, { "title": "302 Found", "count": 11 } ] }, "message": "ok", "success": true }
|
搜索
请求方式: GET
请求URL: /api/search
请求参数:
参数名 |
必选 |
类型 |
说明 |
current |
是 |
int |
当前页数 |
pageSize |
是 |
int |
每页数据量 |
query |
是 |
string |
ZQ查询语句 |
响应格式: JSON
响应示例:
{ "data": [{ "banner": "HTTP/1.1 403 Forbidden\r\nConnection: close\r\nContent-Length: 9\r\nContent-Type: application/octet-stream\r\nDate: Thu, 16 Feb 2023 17:11:21 GMT\r\nServer: Tengine\r\n\r\n\r\n", "body_length": 9, "commonname": "", "date": "2023-03-13 21:59:41", "dnsnames": "", "fingerprint": ["Fofa"], "host": "1.1.com", "ip": "1.1.1.1", "loc": "[中国 上海 上海]", "organization": "Huawei Cloud Service data center", "port": "443", "status_code": 403, "title": "", "tls": "Version: v3\nSerial Number: 123456546\nSignature Algorithm: SHA256-RSA", "url": "https://1.1.com:443/" }], "message": "ok", "success": true, "total": 92 }
|
版权声明:本文首发于
白帽酱的博客,转载请注明出处!