Code Monkey home page Code Monkey logo

watchvuln's Introduction

WatchVuln 高价值漏洞采集与推送

众所周知,CVE 漏洞库中 99% 以上的漏洞只是无现实意义的编号。我想集中精力看下当下需要关注的高价值漏洞有哪些,而不是被各类 RSS 和公众号的 威胁情报 淹没。 于是写了这个小项目来抓取部分高质量的漏洞信息源然后做推送。 WatchVuln意为监测 漏洞更新,同时也表示这些漏洞需要注意

当前抓取了这几个站点的数据:

名称 地址 推送策略
阿里云漏洞库 https://avd.aliyun.com/high-risk/list 等级为高危或严重
OSCS开源安全情报预警 https://www.oscs1024.com/cm 等级为高危或严重并且包含 预警 标签
奇安信威胁情报中心 https://ti.qianxin.com/ 等级为高危严重并且包含 奇安信CERT验证 POC公开 技术细节公布标签之一
微步在线研究响应中心(公众号) https://x.threatbook.com/v5/vulIntelligence 等级为高危或严重
知道创宇Seebug漏洞库 https://www.seebug.org/ 等级为高危或严重
CISA KEV https://www.cisa.gov/known-exploited-vulnerabilities-catalog 全部推送
Struts2 Security Bulletins Struts2 Security Bulletins 等级为高危或严重

所有信息来自网站公开页面, 如果有侵权,请提交 issue, 我会删除相关源。

如果有更好的信息源也可以反馈给我,需要能够响应及时 & 有办法过滤出有价值的漏洞

具体来说,消息的推送有两种情况, 两种情况有内置去重,不会重复推送:

  • 新建的漏洞符合推送策略,直接推送,
  • 新建的漏洞不符合推送策略,但漏洞信息被更新后符合了推送策略,也会被推送

app

快速使用

支持下列推送方式:

使用 Docker

Docker 方式推荐使用环境变量来配置服务参数

环境变量名 说明 默认值
DB_CONN 数据库链接字符串,详情见 数据库连接 sqlite3://vuln_v3.sqlite3
DINGDING_ACCESS_TOKEN 钉钉机器人 url 的 access_token 部分
DINGDING_SECRET 钉钉机器人的加签值 (仅支持加签方式)
LARK_ACCESS_TOKEN 飞书机器人 url 的 /open-apis/bot/v2/hook/ 后的部分, 也支持直接指定完整的 url 来访问私有部署的飞书
LARK_SECRET 飞书机器人的加签值 (仅支持加签方式)
WECHATWORK_KEY 微信机器人 url 的 key 部分
SERVERCHAN_KEY Server酱的 SCKEY
WEBHOOK_URL 自定义 webhook 服务的完整 url
BARK_URL Bark 服务的完整 url, 路径需要包含 DeviceKey
PUSHPLUS_KEY PushPlus的token
LANXIN_DOMAIN 蓝信webhook机器人的域名
LANXIN_TOKEN 蓝信webhook机器人的hook token
LANXIN_SECRET 蓝信webhook机器人的签名
TELEGRAM_BOT_TOKEN Telegram Bot Token
TELEGRAM_CHAT_IDS Telegram Bot 需要发送给的 chat 列表,使用 , 分割
SOURCES 启用哪些漏洞信息源,逗号分隔, 可选 avd, ti, oscs, seebug,threatbook,struts2 avd,ti,oscs,threatbook,seebug,struts2
INTERVAL 检查周期,支持秒 60s, 分钟 10m, 小时 1h, 最低 1m 30m
ENABLE_CVE_FILTER 启用 CVE 过滤,开启后多个数据源的统一 CVE 将只推送一次 true
NO_FILTER 禁用上述推送过滤策略,所有新发现的漏洞都会被推送 false
NO_START_MESSAGE 禁用服务启动的提示信息 false
WHITELIST_FILE 指定推送漏洞的白名单列表文件, 详情见 推送内容筛选
BLACKLIST_FILE 指定推送漏洞的黑名单列表文件, 详情见 推送内容筛选
DIFF 跳过初始化阶段,转而直接检查漏洞更新并推送
HTTPS_PROXY 给所有请求配置代理, 详情见 配置代理

比如使用钉钉机器人

docker run --restart always -d \
  -e DINGDING_ACCESS_TOKEN=xxxx \
  -e DINGDING_SECRET=xxxx \
  -e INTERVAL=30m \
  -e ENABLE_CVE_FILTER=true \
  zemal/watchvuln:latest

当然,你可以仓靠使用本仓库的 docker-compose.yaml 文件,使用 docker-compose 来启动容器。

每次更新记得重新拉镜像:

docker pull zemal/watchvuln:latest
使用飞书机器人
docker run --restart always -d \
  -e LARK_ACCESS_TOKEN=xxxx \
  -e LARK_SECRET=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用企业微信机器人
docker run --restart always -d \
  -e WECHATWORK_KEY=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用PushPlus
docker run --restart always -d \
  -e PUSHPLUS_KEY=xxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用蓝信Webhook机器人
docker run --restart always -d \
  -e LANXIN_DOMAIN=xxx \
  -e LANXIN_TOKEN=xxx \
  -e LANXIN_SECRET=xxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用Telegram 机器人
docker run --restart always -d \
  -e TELEGRAM_BOT_TOKEN=xxx \
  -e TELEGRAM_CHAT_IDS=1111,2222 \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用自定义 Bark 服务
docker run --restart always -d \
  -e BARK_URL=http://xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用自定义 Webhook 服务

通过自定义一个 webhook server,可以方便的接入其他服务, 实现方式可以参考: example

docker run --restart always -d \
  -e WEBHOOK_URL=http://xxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用server酱机器人
docker run --restart always -d \
  -e SERVERCHAN_KEY=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用多种服务

如果配置了多种服务的密钥,那么每个服务都会生效, 比如使用钉钉和企业微信:

docker run --restart always -d \
  -e DINGDING_ACCESS_TOKEN=xxxx \
  -e DINGDING_SECRET=xxxx \
  -e WECHATWORK_KEY=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest

初次运行会在本地建立全量数据库,大约需要 1 分钟,可以使用 docker logs -f [containerId] 来查看进度, 完成后会在群内收到一个提示消息,表示服务已经在正常运行了。

使用二进制

前往 Release 下载对应平台的二进制,然后在命令行执行。命令行参数请参考 Docker 环境变量部分的说明,可以一一对应。

USAGE:
   watchvuln [global options] command [command options] [arguments...]

GLOBAL OPTIONS:
   [Push Options]

   --bark-url value, --bark value             your bark server url, ex: http://127.0.0.1:1111/DeviceKey
   --dingding-access-token value, --dt value  webhook access token of dingding bot
   --dingding-sign-secret value, --ds value   sign secret of dingding bot
   --lanxin-domain value, --lxd value         your lanxin server url, ex: https://apigw-example.domain
   --lanxin-hook-token value, --lxt value     lanxin hook token
   --lanxin-sign-secret value, --lxs value    sign secret of lanxin
   --lark-access-token value, --lt value      webhook access token/url of lark
   --lark-sign-secret value, --ls value       sign secret of lark
   --pushplus-key value, --pk value           send key for push plus
   --serverchan-key value, --sk value         send key for server chan
   --telegram-bot-token value, --tgtk value   telegram bot token, ex: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
   --telegram-chat-ids value, --tgids value   chat ids want to send on telegram, ex: 123456,4312341,123123
   --webhook-url value, --webhook value       your webhook server url, ex: http://127.0.0.1:1111/webhook
   --wechatwork-key value, --wk value         webhook key of wechat work

   [Launch Options]

   --db-conn value, --db value  database connection string (default: "sqlite3://vuln_v3.sqlite3")
   --enable-cve-filter          enable a filter that vulns from multiple sources with same cve id will be sent only once (default: true)
   --interval value, -i value   checking every [interval], supported format like 30s, 30m, 1h (default: "30m")
   --no-filter, --nf            ignore the valuable filter and push all discovered vulns (default: false)
   --no-github-search, --ng     don't search github repos and pull requests for every cve vuln (default: false)
   --no-start-message, --nm     disable the hello message when server starts (default: false)
   --proxy value, -x value      set request proxy, support socks5://xxx or http(s)://
   --sources value, -s value    set vuln sources (default: "avd,nox,oscs,threatbook,seebug,struts2")

   [Other Options]

   --debug, -d    set log level to debug, print more details (default: false)
   --help, -h     show help (default: false)
   --version, -v  print the version (default: false)

在参数中指定相关 Token 即可, 比如使用钉钉机器人

$ ./watchvuln --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET -i 30m
使用飞书机器人
$ ./watchvuln --lt LARK_ACCESS_TOKEN --ls LARK_SECRET -i 30m
使用企业微信机器人
$ ./watchvuln --wk WECHATWORK_KEY -i 30m
使用server酱机器人
$ ./watchvuln --sk xxxx -i 30m
使用PushPlus
$ ./watchvuln --pk xxxx -i 30m
使用蓝信Webhook机器人
$ ./watchvuln --lxd xxxx --lxt xxx --lxs xxx -i 30m
使用Telegram 机器人
$ ./watchvuln --tgtk xxxx --tgids 1111,2222 -i 30m
使用自定义 Bark 服务
$ ./watchvuln --bark http://xxxx -i 30m
使用自定义 Webhook 服务

通过自定义一个 webhook server,可以方便的接入其他服务, 实现方式可以参考: example

$ ./watchvuln --webhook http://xxxx -i 30m
使用多种服务

如果配置了多种服务的密钥,那么每个服务都会生效, 比如使用钉钉和企业微信:

$ ./watchvuln --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET --wk WECHATWORK_KEY -i 30m

数据库连接

默认使用 sqlite3 作为数据库,数据库文件为 vuln_v3.sqlite3,如果需要使用其他数据库,可以通过 --db 参数或是环境变量 DB_CONN 指定连接字符串,当前支持的数据库有:

  • sqlite3://filename
  • mysql://user:pass@host:port/dbname
  • postgres://user:pass@host:port/dbname

注意:该项目不做数据向后兼容保证,版本升级可能存在数据不兼容的情况,如果报错需要删库重来。

配置代理

watchvuln 支持配置上游代理来绕过网络限制,支持两种方式:

  • 环境变量 HTTPS_PROXY
  • 命令行参数 --proxy/-x

支持 socks5://xxxx 或者 http(s)://xxkx 两种代理形式。

推送内容筛选

如果你只想推送某些产品的漏洞,可以通过配置白名单或者黑名单来实现。这两个参数传入的都是一个文件,文件格式为每行一个产品名,比如:

Apache
泛微

温馨提示:如果你使用 Docker 来运行,可以通过挂载目录的方式将文件映射到容器内,比如:

echo "Apache" > whitelist.txt

docker run -v $(pwd):/config \
  -e WHITELIST_FILE=/config/whitelist.txt \
  -e xxxx=xxxxx
  zemal/watchvuln:latest

白名单过滤

通过命令行参数 -wf 或者环境变量 WHITELIST_FILE 来指定白名单文件。在发现新漏洞时,将检查漏洞的 标题描述 是否包含白名单的任意一行,全都不在的将不推送漏洞。

黑名单过滤

通过命令行参数 -bf 或者环境变量 BLACKLIST_FILE 来指定黑名单文件。在发现新漏洞时,将检查漏洞的 标题 是否包含黑名单的任意一行, 包含的将不推送漏洞。为了避免非预期的漏掉推送,黑名单不会检查漏洞的 描述 是否匹配。

常见问题

  1. 服务重启后支持增量更新吗

    支持,每次检查会按照一定的策略去增量抓取

  2. Docker 拉取镜像提示 not found

    你使用的 Docker 版本太老了,不支持新的镜像格式,需要升级一下 Docker 版本,参考 #16

其他

为了减少内卷,该工具在 00:00 到 07:00 间会去 sleep 不会运行, 请确保你的服务器是正确的时间!

扫码加我拉进讨论群,请备注申请理由为:问题反馈与讨论,否则不通过

wechat

watchvuln's People

Contributors

center-sun avatar freeahao avatar hi-unc1e avatar lzskyline avatar moond4rk avatar rayepeng avatar testwill avatar zema1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

watchvuln's Issues

最新版本推送问题

0.9版本更新到了最新版本1.2.1,发现推送的不是最新的漏洞,18年的还在推送,而且有些是之前0.9版本推送过的;比如:
截屏2023-11-09 10 29 51

v0.6.0版本的qax数据源存在bug

logs:

[WARN] 2023/04/12 00:06 [qianxin-ti]: invalid total size 0
[WARN] 2023/04/12 00:06 retrying as %!s(<nil>)
[WARN] 2023/04/12 00:06 [qianxin-ti]: invalid total size 0
[WARN] 2023/04/12 00:06 retrying as %!s(<nil>)
[INFO] 2023/04/12 00:06 [qianxin-ti]: parsing page 1

v0.4.0能正常获取, 但是会报错退出, 更新到v0.6.0后似乎qax的数据源获取失败

image

漏洞过滤

可不可以过滤漏洞信息?如只有OA系统,那么我只需要接受OA的漏洞预警。

飞书推送疑似失效?

watchvuln-windows-amd64.exe --lark-access-token aaaa
[FTAL] 2023/11/14 13:36 [main]:
you must setup a pusher, eg:
use dingding: watchvuln-windows-amd64.exe --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET
use wechat: watchvuln-windows-amd64.exe --wk WECHATWORK_KEY
use API: watchvuln-windows-amd64.exe --webhook WEBHOOK_URL

数据库密码中包含特殊字符会出错

比如密码中有&%等会出错
是否能加一个编码转换的
类似于:password先用url进行编码,然后代码在连接时再进行解码。
decodedDB, err := url.QueryUnescape(password)

期待你的回复

情报源推荐

关于漏洞推送建议

在推送新漏洞时,是否可以自动化在github中以CVE的ID号进行搜索,如果匹配到结果,并且结果中的代码为python、go、java等是否可以在推送通知中增加,github中疑似存在POC并附上github连接?

容器频繁重启:奇安信:访问次数达到上限

在容器启动中,容器频繁重启,每隔15s左右,
日志中提示,奇安信获取 接口失败,之后服务停止

2023-09-03T12:30:44.044087871Z [WARN] 2023/09/03 20:30 [qianxin-nox]: failed to get page count, msg: 访问次数达到上限!, retrying
2023-09-03T12:30:49.186349301Z [FTAL] 2023/09/03 20:30 [main]: failed to run app: init data: qianxin-nox: invalid size 0 10

issue

请问微信机器人 url 的 key 部分 这个是企业微信机器人的webhook key那一部分嘛

[FR] 支持一下Bark推送

Bark

curl -X "POST" "http://localhost:8080/push" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d $'{
  "body": "祝您生日快乐🌹🍰",
  "device_key": "这里就是用户的设备的key",
  "title": "这是标题",
  "badge": 1,
  "category": "category",
  "sound": "minuet.caf,这是用户收到推送消息后,手机发出的响声",
  "icon": "https://这里是图片的地址g/pic1.0dcc7dab.png",
  "group": "test",
  "url": "http://www.这是用户点击推送的消息后,跳转的地址"
}'

错误起不来

新起的docker一直在重启,起不来

启动方式:docker-compose up -d

version: '3'
services:
  watchvuln:
    restart: always
    image: zemal/watchvuln:latest
    environment:
      DINGDING_ACCESS_TOKEN: 1
      DINGDING_SECRET: 1
      DB_CONN: postgres://watchvuln:watchvuln@postgres:5432/watchvuln
      INTERVAL: 30m
    depends_on:
      - postgres

  postgres:
    restart: always
    image: postgres:14.4-alpine
    environment:
      POSTGRES_DB: watchvuln
      POSTGRES_USER: watchvuln
      POSTGRES_PASSWORD: watchvuln
    volumes:
      - "./data/postgresql:/var/lib/postgresql/data"

错误日志

[INFO] 2024/01/29 05:48 [aliyun-avd]: parsing page https://avd.aliyun.com/high-risk/list?page=1
[ERRO] 2024/01/29 05:48 [oscs]: failed to parse https://www.oscs1024.com/hd/MPS-ao1v-ghp4, Post "https://www.oscs1024.com/oscs/v1/vdb/info": context canceled
[FTAL] 2024/01/29 05:48 [main]: initial collect: invalid character '<' looking for beginning of value
[INFO] 2024/01/29 05:48 [main]: local database has 2775 vulns
[INFO] 2024/01/29 05:48 [main]: local data is outdated, init database
[INFO] 2024/01/29 05:48 [main]: oscs total page: 14

报错了 不推送数据了

[INFO] 2023/04/11 13:15 [oscs]: parsing page 1
[INFO] 2023/04/11 13:15 [oscs]: page 1 contains 10 vulns
[INFO] 2023/04/11 13:15 [aliyun-avd]: parsing page https://avd.aliyun.com/high-risk/list?page=1
panic: runtime error: integer divide by zero

goroutine 1220 [running]:
github.com/zema1/watchvuln/grab.(*TiCrawler).GetPageCount(0xc0002d5060, {0x10f9358?, 0xc00007ed40}, 0xa)
github.com/zema1/watchvuln/grab/ti.go:53 +0x3be
main.collectUpdate.func1()
github.com/zema1/watchvuln/main.go:302 +0xa4
golang.org/x/sync/errgroup.(*Group).Go.func1()
golang.org/x/[email protected]/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
golang.org/x/[email protected]/errgroup/errgroup.go:72 +0xa5
已经不推送数据了,重新运行软件也不行

启用多个情报源过滤设置为ture

启用多个情报源过滤设置为ture,会出现推动多个重复的cve漏洞的情况(目前是启用三个情报源,后期使用更多情报源,这个问题会影响比较大)师傅是否可以增减环境变量的过滤

“非监听”模式讨论,调用之后触发一次事件,不进入等待并立刻退出

因为如果整合 WebHook 的话,非 Docker Compose 环境的后端在对接 watchvuln 的时候还需要守护 watchvuln 的进程,同时如果 webhook 调用失败会直接退出。如果由后端调用 exec 执行一次 WebHook,或者仅在需要更新的时候调用更新一次库,可以大幅减少爬取的频率,同时也可以避免后端偶尔挂起导致 watchvuln 的反复异常退出。

demand suggestion

  1. 希望能过通过加载配置文件设定接受推送全部或者部分漏洞提醒。
  2. 要是能加个公众号推送就更好了!

lz NB!

建议增加钉钉机器人的测试数据

建议增加钉钉机器人的测试数据demo。我完成了系统的docker搭建,无法通过日志来准确判断是否搭建成功。当前漏洞库接口中没有最新的漏洞信息,我的机器人没有给我发送相关消息。我只能保证机器人的token和secret正确。

最新版本企业微信不推送漏洞情报

情况:
启动后能正常弹出以下信息:
数据初始化完成,当前版本 v1.3.0, 本地漏洞数量: 137, 检查周期: 30m0s
启用的数据源:

  • 阿里云漏洞库
  • 奇安信威胁情报中心
  • OSCS开源安全情报预警
  • 微步在线研究响应中心-漏洞通告

结束后也弹出了:
注意: WatchVuln 进程退出

但是没有推送任何漏洞情报,使用--dubug参数查看,也未提示异常告警,是否可以增加一个--dubug-check 类似参数,发送一条测试数据,看看哪里出了问题?谢谢

request error in latest docker

curl any url was work well.
docker version

/app # ./main -v
watchvuln version v1.1.0

error logs

[INFO] 2023/07/16 19:03 [main]: config: INTERVAL=5m, NO_FILTER=false, NO_START_MESSAGE=false, NO_GITHUB_SEARCH=false, ENABLE_CVE_FILTER=true
[INFO] 2023/07/16 19:03 [ctrl]: initialize local database..
[WARN] 2023/07/16 19:03 retrying as Post "https://www.oscs1024.com/oscs/v1/intelligence/list": context deadline exceeded
[WARN] 2023/07/16 19:03 retrying as Post "https://nox.qianxin.com/api/web/portal/key_vuln/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/07/16 19:03 retrying as Get "https://avd.aliyun.com/high-risk/list": context deadline exceeded
[WARN] 2023/07/16 19:04 retrying as Post "https://www.oscs1024.com/oscs/v1/intelligence/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/07/16 19:04 retrying as Get "https://avd.aliyun.com/high-risk/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/07/16 19:04 retrying as Post "https://nox.qianxin.com/api/web/portal/key_vuln/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/07/16 19:04 retrying as Post "https://nox.qianxin.com/api/web/portal/key_vuln/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/07/16 19:04 retrying as Get "https://avd.aliyun.com/high-risk/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/07/16 19:04 retrying as Post "https://www.oscs1024.com/oscs/v1/intelligence/list": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

不支持lark的webhook

可以考虑支持下lark的webhook,格式如下

{
    "msg_type": "text",
    "content": {
        "text": "新更新提醒"
    }
}

师傅能否加一个重点关注列表

对于企业来说,使用的那些系统只有一部分是通用的,平时只需要关注一些在使用的系统是否有漏洞信息披露就够了,所以能否加一个配置列表用于匹配相关产品的名字,这样推送的时候可以过滤一些无用的信息,或者说匹配到之后在推送的时候加上一些关键字,如“【重点关注】”,这样看到推送的时候就会比较注意了。

来修bug了

[INFO] 2023/04/07 22:18 [oscs]: parsing page 1
[INFO] 2023/04/07 22:18 [oscs]: page 1 contains 10 vulns
panic: runtime error: integer divide by zero

goroutine 186503 [running]:
github.com/zema1/watchvuln/grab.(*TiCrawler).GetPageCount(0xc0002f7900, {0x11051d8?, 0xc000378000}, 0xa)
        github.com/zema1/watchvuln/grab/ti.go:53 +0x3be
main.collectUpdate.func1()                                                                                                                                                              github.com/zema1/watchvuln/main.go:394 +0xa4
golang.org/x/sync/errgroup.(*Group).Go.func1()
        golang.org/x/[email protected]/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
        golang.org/x/[email protected]/errgroup/errgroup.go:72 +0xa5

failed to send lark markdown

下载最新版的linux客户端,执行完后报错,内容如下:
环境:centos stream 8

[INFO] 2023/06/21 16:21 [main]: config: INTERVAL=30m, NO_FILTER=false, NO_START_MESSAGE=false, ENABLE_CVE_FILTER=true
[INFO] 2023/06/21 16:21 [main]: initialize local database..
[INFO] 2023/06/21 16:21 [main]: start grab oscs, total page: 3
[INFO] 2023/06/21 16:21 [oscs]: parsing page 3
[INFO] 2023/06/21 16:21 [oscs]: parsing page 1
[INFO] 2023/06/21 16:21 [oscs]: parsing page 2
[INFO] 2023/06/21 16:21 [oscs]: page 3 contains 100 vulns
[INFO] 2023/06/21 16:21 [main]: start grab aliyun-avd, total page: 3
[INFO] 2023/06/21 16:21 [aliyun-avd]: parsing page https://avd.aliyun.com/high-risk/list?page=3
[INFO] 2023/06/21 16:21 [aliyun-avd]: parsing page https://avd.aliyun.com/high-risk/list?page=1
[INFO] 2023/06/21 16:21 [aliyun-avd]: parsing page https://avd.aliyun.com/high-risk/list?page=2
[INFO] 2023/06/21 16:21 [oscs]: page 2 contains 100 vulns
[INFO] 2023/06/21 16:21 [oscs]: page 1 contains 100 vulns
[INFO] 2023/06/21 16:21 [aliyun-avd]: page 3 contains 30 vulns
[INFO] 2023/06/21 16:21 [main]: start grab qianxin-ti, total page: 3
[INFO] 2023/06/21 16:21 [qianxin-ti]: parsing page 3
[INFO] 2023/06/21 16:21 [qianxin-ti]: parsing page 1
[INFO] 2023/06/21 16:21 [qianxin-ti]: parsing page 2
[INFO] 2023/06/21 16:21 [aliyun-avd]: page 1 contains 30 vulns
[INFO] 2023/06/21 16:21 [aliyun-avd]: page 2 contains 30 vulns
[INFO] 2023/06/21 16:21 [qianxin-ti]: page 3 contains 100 vulns
[INFO] 2023/06/21 16:21 [qianxin-ti]: page 2 contains 100 vulns
[WARN] 2023/06/21 16:21 retrying as Get "https://www.seebug.org/vuldb/vulnerabilities": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/06/21 16:21 retrying as Post "https://ti.qianxin.com/alpha-api/v2/nox/api/web/portal/key_vuln/list": net/http: request canceled (Client.Timeout exceeded while awaiting headers)
[WARN] 2023/06/21 16:21 [seebug]: computing cloud waf cookie
[INFO] 2023/06/21 16:21 [qianxin-ti]: page 1 contains 100 vulns
[INFO] 2023/06/21 16:21 [main]: start grab seebug, total page: 3
[INFO] 2023/06/21 16:21 [seebug]: parsing page https://www.seebug.org/vuldb/vulnerabilities?page=3
[INFO] 2023/06/21 16:21 [seebug]: page 3 contains 20 vulns
[INFO] 2023/06/21 16:21 [seebug]: parsing page https://www.seebug.org/vuldb/vulnerabilities?page=1
[INFO] 2023/06/21 16:21 [seebug]: page 1 contains 20 vulns
[INFO] 2023/06/21 16:21 [seebug]: parsing page https://www.seebug.org/vuldb/vulnerabilities?page=2
[INFO] 2023/06/21 16:21 [seebug]: page 2 contains 20 vulns
[INFO] 2023/06/21 16:21 [main]: grabber finished successfully
[INFO] 2023/06/21 16:21 [main]: system init finished, local database has 750 vulns
[INFO] 2023/06/21 16:21 [pusher-lark]: sending markdown WatchVuln 初始化完成
[FTAL] 2023/06/21 16:21 [main]: failed to send lark markdown, {
  Code: 19024,
  Msg: "Key Words Not Found"
}

大佬给个修复建议呗

grab/ti.go:53 panic问题

panic: runtime error: integer divide by zero

goroutine 72 [running]:
github.com/zema1/watchvuln/grab.(*TiCrawler).GetPageCount(0xc00038ee80, {0x110ae38?, 0xc0002d3f80}, 0x64)
github.com/zema1/watchvuln/grab/ti.go:53 +0x3be
main.initData({0x110ae38, 0xc0002d3f80}, 0xc0002d3780, {0x110b848, 0xc00038ee80})
github.com/zema1/watchvuln/main.go:386 +0xd5
main.Action.func1()
github.com/zema1/watchvuln/main.go:188 +0x2d
golang.org/x/sync/errgroup.(*Group).Go.func1()
golang.org/x/[email protected]/errgroup/errgroup.go:75 +0x64
created by golang.org/x/sync/errgroup.(*Group).Go
golang.org/x/[email protected]/errgroup/errgroup.go:72 +0xa5

Dockfile构建需要升级Docker版本,提供下centos的升级方式

卸载旧版本的docker

sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

安装社区版

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

安装

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动服务

sudo systemctl start docker

升级到最新版的docker就能构建Dockerfile了,另外个人更喜欢用 docker-compose.yml 的方式,提供一份

version: '3'
services:
  watchvuln:
    build: .
    environment:
      - DINGDING_ACCESS_TOKEN=""
      - DINGDING_SECRET=""
      - WECHATWORK_KEY=""

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.