zabbix内网安装部署_推荐一个内网渗透扫描神器

80b5a9963059060dcfb26975509c0872.png

Perun是一款主要适用于乙方安服、渗透测试人员和甲方RedTeam红队人员的网络资产漏洞扫描器/扫描框架,它主要适用于内网环境,加载漏洞检测Vuln模块后能够快速发现安全问题,并根据需要生成报表,以方便安全人员对授权项目完成测试工作。

Perun由Python2.7和Python标准库开发,所有功能(端口扫描,漏洞检测,控制台输出,生成Html报告)兼容Windows系统和*nix系统,Html报告采用Vue+Element,支持对扫描结果的排序、搜索、分页。

在内网环境中只需上传Perun的启动器文件(未安装Python的主机环境下可以使用Pyinstaller打包生成的单个控制台exe二进制启动器文件,大小在3-5M),其余文件可以部署在云端,也可以部署在目标内网中,既可用作普通的端口扫描器,又可用作漏洞扫描器,方便安全人员在内网环境中进行工作。

快照预览

  • 控制台快照

e1fa2a166fabb401510ce73fec4140df.png

78314b1ded8fc1262d02ee35ceea411c.png

  • 报告快照

06800adb75dcd9695432aebf07e52768.png

1ab821dc1aef3b62947537a01259bca0.png

995eb8fe5127e6b5ad3701c0352a92d6.png

工作流程

  • 加载-l参数指定路径下的项目代码

  • 解析-t参数指定的目标

  • 进行ping扫描活跃主机(使用--skip-ping参数将跳过ping扫描阶段)

  • 根据默认扫描端口或-p参数对指定端口进行端口扫描,默认扫描178个端口,详见Perun/conf/globallistconf.py

  • 解析--vuln和--search(包括--filter和--exclude)参数指定的漏洞检测Vuln模块

  • 根据各Vuln模块默认扫描端口或--set-port指定各Vuln模块扫描端口,匹配目标主机开放端口,生成待扫描目标列表

  • 加载各漏洞扫描Vuln模块Payload,进行漏洞扫描

  • 生成报告(使用--skip-report参数将跳过生成报告)

启动和加载

Perun由Perun.py(或是由Perun.py打包生成的二进制文件)启动,有两种方式加载,远程加载和本地加载,通过-l/--load-file-path参数指定本地文件路径或者远程地址url后,Perun.py将会加载其他代码和漏洞检测Vuln模块并执行。

这样可以在保证项目开发目录结构清晰的同时,只需要一个启动器文件在内网环境中即可工作,其余文件可部署在公网云端或内网环境本地,单个启动器文件方便打包成更小的exe二进制文件,且更新插件不需要重新打包(如导入新的Python库则需要重新打包),一劳永逸。

使用参数

usage: Perun     [-h] [-t TARGET [TARGET ...]] [-p PORT [PORT ...]]
                [--timeout TIMEOUT] [--thread THREAD] [-l LOAD_FILE_PATH]
                [--vuln VULN [VULN ...]] [--all-list] [--selected-vuln]
                [--search SEARCH [SEARCH ...]] [--filter FILTER [FILTER ...]]
                [--exclude EXCLUDE [EXCLUDE ...]]
                [--set-port SET_PORT [SET_PORT ...]] [--search-list]
                [--user-path USER_PATH] [--pass-path PASS_PATH]
                [--add-web-path ADD_WEB_PATH] [--skip-ping] [--report REPORT]
                [--skip-report]

Perun

optional arguments:
 -h, --help            显示帮助
 -t TARGET [TARGET ...], --target TARGET [TARGET ...]
                       设置目标或目标文件,支持URL/IP/IPa-IPb段/CIDR,以及前述类型的混杂输入,多个目标使用空格分隔
 -p PORT [PORT ...], --port PORT [PORT ...]
                       设置端口,支持单个端口和端口段(PortA-PortB),以及前述类型的混杂输入,多个端口使用空格分隔
 --timeout TIMEOUT     设置超时时间
 --thread THREAD       设置线程数量
 -l LOAD_FILE_PATH, --load-file-path LOAD_FILE_PATH
                       设置加载路径,本地文件路径或者远程URL地址
 --vuln VULN [VULN ...]
                       选择Vuln模块,多个Vuln模块名使用空格分隔,默认会针对各模块内默认端口进行扫描,扫描指定端口
                       可以使用activemq.activemq_weakpwd=8161这样的形式输入,'='后指定的端口也支持单个端口和
                       端口段的形式,多个端口使用','分隔
 --all-list            显示所有支持的Vuln模块
 --selected-vuln       显示已选择的Vuln模块(包括vuln指定/search搜索/filter筛选/exclude排除操作后的结果)和Vuln模
                       块信息,设置此参数是为了方便使用者确定需要运行的模块是否符合预期
 --search SEARCH [SEARCH ...]
                       设置关键词,用于搜索匹配的Vuln模块(或关系),多个关键词使用空格分隔
 --filter FILTER [FILTER ...]
                       设置关键词,用于搜索匹配的Vuln模块(和关系),多个关键词使用空格分隔
 --exclude EXCLUDE [EXCLUDE ...]
                       排除运行指定的Vuln模块,多个Vuln模块名使用空格分隔
 --set-port SET_PORT [SET_PORT ...]
                       设置搜索匹配的Vuln模块的端口,支持单个端口和端口段的形式,多个端口使用','分隔
 --search-list         显示搜索后的Vuln模块结果(仅包含search搜索/filter筛选操作的结果),设置此参数是为了便于使用
                       者查看搜索结果是否符合预期
 --user-path USER_PATH
                       设置用于爆破一些弱口令的username字典文件路径(各模块已内置精简字典)
 --pass-path PASS_PATH
                       设置用于爆破一些弱口令的password字典文件路径(各模块已内置精简字典)
 --add-web-path ADD_WEB_PATH
                       追加web扫描时的web路径,此参数用于解决如phpMyAdmin未处于web根目录等情况
 --skip-ping           忽略ping扫描
 --report REPORT       设置生成报告名,默认以时间戳命名
 --skip-report         忽略报告生成操作

使用举例

192.168.

支持的Vuln模块

Perun目前支持52个Vuln模块

Perun目前支持

自定义Vuln模块

自定义Vuln模块
Vuln模块目录在Perun/vuln下

自定义Vuln模块非常简单,只需要按以下格式编写即可

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class VulnChecker(VulnCheck):
   def __init__(self, ip_and_port_list):
       self._name = 'vuln_name'                                          # Vuln模块名,应当和文件名相同(不包括文件后缀)
       self.info = "Vuln info"                                           # Vuln说明信息
       self.keyword = ['all', 'morekeyword', ...]                        # Vuln的关键词,用于搜索使用
       self.default_ports_list = ['default_portA', 'default_portB', ...] # Vuln的默认端口,指定为Web端口使用WEB_PORTS_LIST
       VulnCheck.__init__(self, ip_and_port_list)

   def _check(self, ip, port):
       ...                                                               # 检测代码        
       if True:                                                          # 设置判断条件
           self._output(ip, port)                                        # 满足判断条件,输出结果,并保存到结果列表中

globals()['VulnChecker'] = VulnChecker
编写测试完成后,在Perun/conf/globallistconf.py文件VULN_CHECK_LIST列表中添加该模块,如需要新导入Python库,在Perun/conf/loadmoduleconf.py文件中导入并注册为全局变量即可

自定义Vuln模块举例:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

class VulnChecker(VulnCheck):
   def __init__(self, ip_and_port_list):
       self._name = 'git_or_svn_disclosure'
       self.info = "Scan the Git or SVN Disclosure"
       self.keyword = ['all', 'web', 'disclosure', 'leak', 'leakage', 'info', 'git', 'svn', 'scan']
       self.default_ports_list = WEB_PORTS_LIST
       VulnCheck.__init__(self, ip_and_port_list)

   def _check(self, ip, port):
       PAYLOADS = ['/.svn/entries', '/.svn/all-wcprops', '/.git/config']
       url1 = 'http://%s:%s'%(ip, port) if add_web_path == "" else 'http://%s:%s/%s'%(ip, port, add_web_path)
       url2 = 'https://%s:%s'%(ip, port) if add_web_path == "" else 'https://%s:%s/%s'%(ip, port, add_web_path)
       for payload in PAYLOADS:
           try:
               req = Requester(url1+payload)
               if req.code == 200 and check_200_or_404(url1):
                   self._output(ip, port, 'Git or SVN Disclosure: %s'%(url1+payload))
                   return
           except RequesterOpenError:
               try:
                   req = Requester(url2+payload)
                   if req.code == 200 and check_200_or_404(url2):
                       self._output(ip, port, 'Git or SVN Disclosure: %s'%(url1+payload))
                       return
               except:
                   pass
           except:
               pass

globals()['VulnChecker'] = VulnChecker

欢迎编写并提交更多自定义Vuln模块,直接pr或者发到邮箱wyatu[@]foxmail.com

如何打包

直接打包:
Perun可以直接使用pyinstaller打包,操作非常简单

pip安装pyinstaller

pip install pyinstaller

进入Perun/doc/package2exe目录

cd Perun/doc/package2exe

根据.spec文件直接打包

pyinstaller Perun.spec

成功打包二进制控制台单文件Perun/doc/package2exe/dist/Perun.exe,大小应该在4.5M左右

打包到更小
通过UPX压缩,Perun打成后生成文件应该不会超过3.5M

下载UPX(存放到Perun/doc/package2exe目录下,该目录下已经准备好了upx-3.95-win64版本)

https://github.com/upx/upx/releases

pip安装pyinstaller

pip install pyinstaller

进入Perun/doc/package2exe目录

cd Perun/doc/package2exe

根据.spec文件直接打包,并通过upx压缩

pyinstaller Perun.spec --upx-dir=upx-3.95-win64

成功打包二进制控制台单文件Perun/doc/package2exe/dist/Perun.exe,大小应该在3.5M左右

测试打包环境:
Python 2.7.15

PyInstaller 3.4

Windows 10

致谢

  • liyuan大哥的报告前端代码支持

  • xunfeng、Scanver等开源项目和其他开源脚本/项目,很多Vuln模块参考或取自这些优秀的开源项目

在此表示感谢。

abcba0a78c05714f6a18330deb99ddbd.png

Github地址

喜欢记得点一个star哦

https://github.com/WyAtu/Perun

2a3c567aad5e8691d75e5445c77496cc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值