前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >推荐一个内网渗透扫描神器

推荐一个内网渗透扫描神器

作者头像
HACK学习
发布2019-08-06 11:26:23
2.9K0
发布2019-08-06 11:26:23
举报
文章被收录于专栏:HACK学习HACK学习

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

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

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

快照预览

  • 控制台快照
  • 报告快照

工作流程

  • 加载-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库则需要重新打包),一劳永逸。

使用参数

代码语言:javascript
复制
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         忽略报告生成操作

使用举例

代码语言:javascript
复制
本地加载同目录下项目文件, 扫描192.168.0.1/24、192.168.1.10-192.168.1.30、https://www.google.com、192.168.2.100的默认端口

Perun -l . -t 192.168.0.1/24 192.168.1.10-192.168.1.30 https://www.google.com 192.168.2.100

远程加载http://Perun.comWeb上的项目文件,扫描192.168.0.0/24的80、443、8000-9000、81-90端口

Perun -l http://Perun.com -t 192.168.0.0/24 -p 80 443 8000-9000 81-90

本地加载扫描192.168.0.0/24的默认端口,并检测是否存在javarmi.javarmi_rce和weblogic.rce_cve201710271漏洞,其中javarmi.javarmi_rce模块扫描该Vuln模块默认端口,weblogic.rce_cve201710271扫描80、90、8000-9000端口

Perun -l . -t 192.168.0.0/24 --vuln javarmi.javarmi_rce weblogic.rce_cve201710271=80,90,8000-9000

本地加载并列出所有支持Vuln模块

Perun -l . --all-list

本地加载并指定关键词为smb/rce进行搜索,并列出搜索结果,不进行扫描,Perun将列出所有关键词为smb和rce的Vuln模块和Vuln模块信息

Perun -l . --search smb rce --search-list

Perun -l . -t 192.168.0.0/24 --search smb rce --search-list

本地加载并指定关键词为innet/rce进行搜索,从搜索结果中筛选出所有dangers关键词Vuln模块,不进行扫描,Perun将列出所有同时具有innet&dangers、rce&dangers的Vuln模块和Vuln模块信息

Perun -l . --search innet rce --filter rce --search-list

本地加载并针对target.txt文件内的目标,忽略ping扫描和Html报告生成操作,进行默认端口扫描,然后加载所有内网Vuln模块(关键词为innet)进行扫描,所有Vuln模块仅扫描各模块默认端口

Perun -l . -t target.txt --search innet --skip-ping --skip-report

本地加载,指定选择Vuln模块nexus_repository.nexus_weakpwd,搜索所有innet关键词Vuln模块,从选择和搜索的结果中排除Vuln模块tomcat.tomcat_put和zabbix.zabbix_weakpwd,列出已选择的Vuln模块(包括vuln指定/search搜索/filter筛选/exclude排除操作后的结果)和Vuln模块信息,不进行扫描

Perun -l . -t 192.168.0.0/24 --vuln nexus_repository.nexus_weakpwd --search innet --exclude tomcat.tomcat_put zabbix.zabbix_weakpwd --selected-vuln

本地加载扫描192.168.0.0/24的默认端口,加载所有关键词有rce的Vuln模块,各Vuln模块不扫描其默认端口,改为扫描80、1000-8000端口,其中需要访问Web服务的Vuln模块设置Web路径为http://target.com/wwwtest/

Perun -l . -t 192.168.0.0/24 --search rce --set-port 80,1000-8000 --add-web-path wwwtest

本地加载扫描192.168.0.0/24的默认端口,加载MySQL的弱口令扫描Vuln模块,针对该模块默认端口(3306)进行弱口令扫描,弃用该模块内置精简密码字典,改为使用password.txt密码字典进行爆破,不生成报告

Perun -l . -t 192.168.0.0/24 --search mysql --filter weakpassword --pass-path password.txt --skip-report

注意:

关于-l/--load-file-path参数

-l/--load-file-path参数用于指定Perun启动器加载其余文件的路径,可以为远程路径,也可以是本地指定路径,上述示例中分别以指定当前同目录路径和指定http://Perun.com远程路径为示例

关于三个显示参数

--all-list是显示所有支持的Vuln模块,--search-list是显示搜索后结果的Vuln模块(仅包含search搜索/filter筛选操作的结果),--selected-vuln是显示所有已选择的Vuln模块(包括vuln指定/search搜索/filter筛选/exclude排除操作后的结果),这三个参数都是为了使用者方便选择Vuln模块而设置,使用这三个参数中任一参数,Perun都将只列出符合要求的Vuln模块,不进行扫描

关键词同义词

关键词不区分大小写,且部分关键词支持同义词,具体参见MakeSearchByfilter类_replace_synonym()方法,如weakpass、weakpassword、weakpwd、weakpass、pwd、pass、password将指向weak_password关键词,CVE-2017-7504、Cve_2017-7504等都将指向cve_2017_7504关键词

支持的Vuln模块

Perun目前支持52个Vuln模块

代码语言:javascript
复制
Perun目前支持52个Vuln模块

Vuln模块名  Vuln模块说明信息
activemq.activemq_weakpwd  检测ActiveMQ弱口令
activemq.activemq_upload  检测ActiveMQ任意文件上传漏洞(CVE-2016-3088)
axis2.axis2_file_read  检测Axis2任意文件读取漏洞
cerio.cerio_auth_rce  检测CERIO路由器认证后的RCE漏洞(CVE-2018-18852)
docker.docker_unauth  检测Docker未授权访问漏洞
elasticsearch.rce_cve20143120  检测Elasticsearch远程代码执行漏洞(CVE-2014-3120)
elasticsearch.rce_cve20151427  检测Elasticsearch远程代码执行漏洞(CVE-2015-1427)
elasticsearch.read_cve20153337  检测Elasticsearch任意文件读取漏洞(CVE-2015-3337)
elasticsearch.read_cve20155531  检测Elasticsearch任意文件读取漏洞(CVE-2015-5531)
ftp.ftp_weakpwd  检测FTP弱口令
glassfish.glassfish_file_read  检测Glassfish任意文件读取漏洞
glassfish.glassfish_weakpwd  检测Glassfis弱口令
grafana.grafana_weakpwd  检测Grafana弱口令
iis.iis_webdav_put  检测IIS WebDav PUT任意文件上传漏洞
iis.iis_webdav_rce  检测IIS WebDav远程命令执行漏洞(CVE-2017-7269)
iis.short_filename  检测IIS短文件名漏洞
javarmi.javarmi_rce  检测Java RMI远程命令执行漏洞
jboss.jboss_readonly  检测是否存在JBoss路径/invoker/readonly,路径存在即可能存在漏洞CVE-2017-12149
jboss.jboss_jmxconsole  检测是否存在JBoss路径/jmx-console/HtmlAdaptor,路径存在即可能存在漏洞CVE-2006-5750/CVE-2007-1036/CVE-2010-0738
jboss.jboss_webconsole  检测是否存在JBoss路径/web-console/Invoker,路径存在即可能存在漏洞CVE-2013-4810
jboss.jboss_adminconsole  检测是否存在JBoss路径/admin-console/,路径存在即可能存在漏洞CVE-2010-1871
jboss.jboss_jbossmq_httpil  检测是否存在JBoss路径/jbossmq-httpil/HTTPServerILServlet,路径存在即可能存在漏洞CVE-2017-7504
jboss.jboss_EJBInvokerServlet  检测是否存在JBoss路径/invoker/EJBInvokerServlet,路径存在即可能存在漏洞CVE-2012-0874/CVE-2013-4810
jboss.jboss_JMXInvokerServlet  检测是否存在JBoss路径/invoker/JMXInvokerServlet,路径存在即可能存在漏洞CVE-2007-1036/CVE-2012-0874/CVE-2013-4810/CVE-2017-7501
jenkins.user_enumeration  检测Jenkins用户名枚举漏洞
memcache.memcache_unauth  检测Memcache未授权访问漏洞
mikrotik.winbox_cve_2018_14847  检测MikroTik RouterOS Winbox未经身份验证的任意文件读/写漏洞(CVE-2018-14847)
mongodb.mongodb_unauth  检测MongoDB未授权访问漏洞
mysql.mysql_weakpwd  检测MySQL弱口令
mssql.mssql_weakpwd  检测MSSQL弱口令
nexus_repository.nexus_weakpwd  检测Sonatype Nexus Repository Manager弱口令
nginx.nginx_httproxy  检测Nginx配置不当导致正向代理
tomcat.tomcat_put  检测Tomcat PUT远程命令执行漏洞(CVE-2017-12615)
phpmyadmin.phpmyadmin_weakpwd  检测phpMyAdmin漏洞
phpmyadmin.phpmyadmin_setup_rce  检测phpMyAdmin Scripts/setup.php远程命令执行漏洞
postgresql.postgresql_weakpwd  检测PostgresSQL弱口令
redis.redis_weakpwd_unauth  检测Redis弱口令和未授权访问漏洞
rsync.rsync_weakpwd_unauth  检测Rsync弱口令和未授权访问漏洞
smb_netbios.computer_info  获取主机信息,如主机名/域名/操作系统信息,类似于nbtscan
smb_netbios.ms17_010  检测MS17-010远程命令执行漏洞
thinkphp.thinkphp5_rce  检测ThinkPHP 5.* 远程代码执行漏洞
thinkphp.thinkphp5010_rce  检测ThinkPHP 5.0.*(低于5.0.10) 远程代码执行漏洞
thinkphp.thinkphp5023_rce  检测ThinkPHP 5.0.*(低于5.0.23) 远程代码执行漏洞
thinkphp.thinkphp5152_rce  检测ThinkPHP 5.1.*/5.2.*(5.1.x - 5.1.31, 5.2.0beta1) 远程代码执行漏洞
web.directory_listing  扫描列目录漏洞
web.git_or_svn_disclosure  扫描Git和SVN源码泄露漏洞
web.web_sensitive  扫描敏感文件和目录
weblogic.rce_cve201710271  检测WebLogic WLS远程命令执行漏洞(CVE-2017-10271)
weblogic.rce_cve20182628  检测WebLogic WLS远程命令执行漏洞(CVE-2018-2628)
weblogic.ssrf_cve20144210  检测WebLogic SSRF漏洞(CVE-2014-4210)
zabbix.zabbix_weakpwd  检测Zabbix弱口令
zookeeper.zookeeper_unauth  检测Zookeeper未授权访问

自定义Vuln模块

代码语言:javascript
复制
自定义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

如何打包

代码语言:javascript
复制
直接打包:
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模块参考或取自这些优秀的开源项目

在此表示感谢。

Github地址

喜欢记得点一个star哦

https://github.com/WyAtu/Perun

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HACK学习呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 快照预览
  • 工作流程
  • 启动和加载
  • 使用参数
  • 使用举例
  • 支持的Vuln模块
  • 自定义Vuln模块
  • 如何打包
  • 致谢
相关产品与服务
漏洞扫描服务
漏洞扫描服务(Vulnerability Scan Service,VSS) 是一款自动探测企业网络资产并识别其风险的产品。依托腾讯二十年累积的安全能力,漏洞扫描服务能够对企业的网络设备及应用服务的可用性、安全性与合规性等进行定期的安全扫描、持续性风险预警和漏洞检测,并且为企业提供专业的修复建议,降低企业安全风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档