/ParrotSecCN_Community_QQbot

ParrotSec中文社区qq机器人,实现Discourse动态推送QQ群和常用漏洞端口扫描功能

Primary LanguagePythonGNU General Public License v2.0GPL-2.0

ParrotSecCN_Community_QQbot

Python 3.5+ License Parrot-CN AresX Hexman Gray.Ad

1.安装docker

安装Docker

wget -qO- https://get.docker.com/ | sh

下载Docker coolq

docker pull richardchien/cqhttp:latest

创建coolq文件夹

mkdir coolq

2.配置 服务器 和 coolq

相关外部访问的端口记得在服务器的控制面板开启

  • 酷Q Air for docker

    # docker部署coolq,所有操作都要sudo权限
    
    docker run -ti --rm --name cqhttp-test -v $(pwd)/coolq:/home/user/coolq -e VNC_PASSWD=12345678 -p 9000:9000 -p 127.0.0.1:5700:5700 -e COOLQ_ACCOUNT=212521306 -e CQHTTP_POST_URL=http://127.0.0.1:9002/ -e CQHTTP_SERVE_DATA_FILES=no richardchien/cqhttp:latest
    
    # 参数说明
    -v $(pwd)/coolq:/home/user/coolq \  # 将宿主目录挂载到容器内用于持久化酷Q的程序文件
    
    -p 9000:9000 \  # noVNC端口(这端口意思类似端口转发,docker指定9000端口,如果要更改的话,可以改为7878:9000,意思是把docker的9000端口转发到服务器的7878端口),用于从浏览器登陆服务器,控制酷Q
    
    -p 5700:5700 \  # HTTP API 插件开放的端口(用于监听QQ群消息,HTTP API指定端口)
    
    -e COOLQ_ACCOUNT=212521306 \ # 要登录的 QQ 账号,可选但建议填
    
    -e CQHTTP_POST_URL=http://127.0.0.1:9002/ \  # 相当于request api,把群里的信息上报(访问)到地址,如果提示端口占用,那么就相应得修改此参数的端口值
    
    -e CQHTTP_SERVE_DATA_FILES=no \  # 不允许通过 HTTP 接口访问酷 Q 数据文件
    
  • 相关注意事项

    • 嘤嘤机器人的flask后台,用于监听qq数据的api接口是http://127.0.0.1:9002/msg

    • 详见代码 qqbot/run_qqbot.py93行

    • 所以你启动docker的时候CQHTTP_POST_URL要改为下面的内容(或者docker启动后再修改coolq/app/io.github.richardchien.coolqhttpapi/config里面的ini文件或json文件)

    • CQHTTP_POST_URL=http://127.0.0.1:9002/msg

  • 我的相关config配置文件 (ini文件会自动生成,再自行创建一个json配置文件)

    • 你的QQ号.ini

      [你的QQ号]
      host=0.0.0.0
      port=5700
      use_http=yes
      post_url=http://内网ip:9002/msg
      post_message_format=string
      
    • 你的QQ号.json

      {
          "host": "0.0.0.0",
          "port": 5700,
          "use_http": true,
          "ws_host": "0.0.0.0",
          "ws_port": 6700,
          "use_ws": false,
          "post_url": "http://127.0.0.1:9002/msg",
          "ws_reverse_url": "",
          "ws_reverse_api_url": "",
          "ws_reverse_event_url": "",
          "ws_reverse_reconnect_interval": 3000,
          "ws_reverse_reconnect_on_code_1000": true,
          "use_ws_reverse": false,
          "post_url": "",
          "access_token": "",
          "secret": "",
          "post_message_format": "string",
          "serve_data_files": false,
          "update_source": "github",
          "update_channel": "stable",
          "auto_check_update": false,
          "auto_perform_update": false,
          "show_log_console": false,
          "log_level": "info"
      }
      

3.配置flask

  • 填好你的机器人QQ号,以及QQ群号码

    atMe, group = '[CQ:at,qq=212521306]', 160958474 # run_qqbot.py 19行

  • 配置flask端口,端口是你docker启动后CQHTTP_POST_URL的端口

    • CQHTTP_POST_URL配置的端口不是占用此端口,而是数据请求此端口

    • 比如我docker配置的CQHTTP_POST_URL端口是9002,那么我flask的启动端口就是9002

4.外部导入相关密码,验证Key

Secrets文件做了处理,逻辑做了修改,不添加Key也没问题

from Secrets import SECRETS

5.启动机器人

  • 鉴于很多新手在用,目前改写成了shell脚本启动方式

  • 给shell脚本添加可执行权限

    chmod +x run_service.sh

  • 安装Linux相关包

    ./run_service.sh install

  • 安装pip环境

    ./run_service.sh pip

  • 安装完pip环境之后,会提示手动应用Python环境,和安装环境

    输入并执行给出的代码,应用以及安装Python环境

  • 启动机器人

    ./run_service.sh start

  • 关闭机器人

    ./run_service.sh stop

6.已有功能

  • 搜索论坛:@机器人 search-forum keyword

    Demo: @机器人 search-forum 学习资料

  • 显示所有Poc:@机器人 show-poc info(cms;hardware;industrial;system;information)

    Demo: @机器人 show-poc system

    Demo: @机器人 show-poc cms

  • TCP端口扫描:@机器人 nmap host

    Demo: @机器人 nmap 111.200.232.222

  • CMS识别:@机器人 what-cms host

    Demo: @机器人 what-cms club8s8f.host

  • CMS漏洞扫描:@机器人 cms host

  • 信息搜集:@机器人 information host

  • 系统漏洞扫描:@机器人 system host

  • 物联网设备安全检测:@机器人 hardware host

  • 工控安全检测:@机器人 industrial host

  • 搜索POC:@机器人 search-poc keywords

  • 搜索并使用POC进行安全检测:@机器人 poc-search-url keywords host

  • 共享SSR服务器:@机器人 py

  • 共享SS服务器:@机器人 all-py email-num

    Demo: @机器人 all-py 212521306@qq.com

  • 查询Vulners数据库已知关键字漏洞:@机器人 vulners db_search keyword

    Demo: @机器人 vulners db_search keyword 返回链接

  • Weblogic扫描:@机器人 web-logic-scan ip port

    Demo: @机器人 web-logic-scan 111.200.232.78 3389

  • phpstudy后门扫描:@机器人 phpstudy-scan host

    Demo: @机器人 phpstudy-scan https://www.baidu.com/

  • Struts2漏洞扫描(UTF-8编码): @机器人 struts2-scan host

    Demo: @机器人 struts2-scan https://www.exploit-db.com:8899/index.action

  • Struts2漏洞使用代理扫描(UTF-8编码): @我 struts2-scan host proxy_ip

    Demo: @机器人 struts2-scan https://www.exploit-db.com:8899/index.action http://8.8.8.8:8899

  • 默认子网工控设备扫描:@机器人 protocols-default subnet pge_num --> 默认扫描子网 /24 返回第一页查询

    Demo: @机器人 protocols-default 111.200.232.0 1

  • 扫描子网工控设备:@机器人 protocols-subnet subnet 24 pge_num --> 扫描子网 /24 返回第二页查询

    Demo: @机器人 protocols-subnet 111.200.232.0 24 2

  • 扫描子网工控设备:@机器人 protocols-subnet subnet 16 pge_num --> 扫描子网段 /16 返回第一页查询

    Demo: @机器人 protocols-subnet 111.200.232.0 16 1

  • 扫描网段内工控设备:@机器人 protocols-vlan subnet TO subnet pge_num --> 扫描网段 返回第一页查询

    Demo: @机器人 protocols-vlan 111.200.232.77 TO 111.200.234.222 1

  • IP地址定位:@机器人 ip ip_address

    Demo: @机器人 ip 111.200.232.77

  • 查询天气: @机器人 天气 ??

    Demo: @机器人 天气 北京

    Demo: @机器人 天气 朝阳

  • 使用方法: @机器人 食用

7.目录说明

.
├─ LICENSE
├─ README.md
├─ cron
│    └─ spider.cron  # 定时SSR服务器爬虫 (已作废)
├─ qqbot
│    ├─ config
│    │    ├─ __init__.py
│    │    ├─ bot_config.yaml  # yaml配置
│    │    ├─ config.py  # flask配置
│    ├─ utils
│    │    ├─ __init__.py
│    │    ├─ callback_function.py  # 字典映射
│    │    ├─ function_hooks.py  # 字典映射的函数实现
│    ├─ api
│    │    ├─ __init__.py
│    │    ├─ cmslist1.json
│    │    ├─ hack_api.py
│    │    ├─ other_api.py
│    │    ├─ qq_group_api.py
│    │    ├─ send_email_function.py
│    │    ├─ scan_api.py
│    │    ├─ weblogicscan_api.py  # Weblogic扫描函数
│    │    ├─ poc  # Poc相关
│    │    │    ├─ __init__.py
│    │    │    ├─ Console.py
│    │    │    ├─ CVE_2014_4210.py
│    │    │    ├─ CVE_2016_0638.py
│    │    │    ├─ CVE_2016_3510.py
│    │    │    ├─ CVE_2017_10271.py
│    │    │    ├─ CVE_2017_3248.py
│    │    │    ├─ CVE_2017_3506.py
│    │    │    ├─ CVE_2018_2628.py
│    │    │    ├─ CVE_2018_2893.py
│    │    │    ├─ CVE_2018_2894.py
│    │    │    ├─ CVE_2019_2725.py
│    │    │    ├─ CVE_2019_2729.py
│    │    │    └─ phpstudy_poc.py  # phpstudy后门扫描
│    │    ├─ vulners_api.py  # Vulners扫描函数
│    │    ├─ iplocation.py  # IP定位函数
│    │    ├─ Struts2scan_api.py  # Struts2扫描函数
│    │    └─ Struts2环境
│    │         ├─ 其他环境.txt
│    │         ├─ S2-001.war
│    │         ├─ S2-003.war
│    │         ├─ S2-005.war
│    │         ├─ S2-005_2.war
│    │         ├─ S2-007.war
│    │         ├─ S2-008.war
│    │         ├─ S2-009.war
│    │         ├─ S2-012.war
│    │         ├─ S2-013.war
│    │         ├─ S2-015.war
│    │         ├─ S2-016.war
│    │         ├─ S2-019.war
│    │         ├─ S2-032.war
│    │         ├─ S2-037.war
│    │         └─ S2-045.war
│    ├─ Secrets.py  # 相关密钥文件导入
│    └─ run_qqbot.py  # 启动机器人
├─ requirements.txt # 依赖项
├─ run_service.sh # Shell一键启动脚本
└─ spider (当前SSR爬取用了函数,此文件夹作废)
       ├─ doub.spider.py
       ├─ free-ss_spider.py
       ├─ share-shadowsocks.py
       ├─ ss_pythonic_spider.py
       └─ ss_ssr.txt  # share-shadowsocks的ss/ssr链接写入

8.相关迭代...

9.注意事项

如要使用Struts2漏洞扫描,请把 Struts2全漏洞扫描利用工具 里面的 Struts2环境 文件夹复制到机器人项目下的 api/ 目录里面

10.调试方法

修改 run_qqbot.py 19行 为你的QQ和QQ群

修改 run_qqbot.py 最后一行 开放监听和端口
app.run(host="0.0.0.0", port=9002)

屏蔽 qqbot/api/__init__.py 第一行代码

启动
python run_qqbot.py

根据打印的错误log进行调试

11.添加功能

函数脚本放在qqbot/api文件夹里面,然后在qqbot/api/__init__.py添加from .xxxx import xxxx

函数调用逻辑写在qqbot/utils/function_hooks.py

字典映射写在qqbot/utils/callback_function.py,一一对应

最后修改qqbot/config/bot_config.yaml,在function_keyword里面添加字典映射的功能