Perun是一款主要适用于乙方安服、渗透测试人员和甲方RedTeam红队人员的网络资产漏洞扫描器/扫描框架,它主要适用于内网环境,加载漏洞检测Vuln模块后能够快速发现安全问题,并根据需要生成报表,以方便安全人员对授权项目完成测试工作。
Perun由Python2.7和Python标准库开发,所有功能(端口扫描,漏洞检测,控制台输出,生成Html报告)兼容Windows系统和*nix系统,Html报告采用Vue+Element,支持对扫描结果的排序、搜索、分页。
Perun工作流程如下:
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 忽略报告生成操作
全端口扫描命令
python Perun.py -l . -t 192.168.126.129 -p 1-65535 --skip-ping
全端口扫描并加载全部vuln模块检测
python Perun.py -l . -t 192.168.126.130 -p 1-65535 --skip-ping --search innet
弱口令爆破加载自定义字典
# 以mysql服务为例
python Perun.py -l . -t 192.168.0.0/24 --search mysql --filter weakpassword --pass-path password.txt --skip-report
本地加载同目录下项目文件, 扫描目标 192.168.126.129 的全部端口
python Perun.py -l . -t 192.168.126.129 -p 1-65535 --skip-ping
本地加载同目录下项目文件, 扫描192.168.0.1/24、192.168.1.10-192.168.1.30、https://www.google.com、192.168.2.100的默认端口
python Perun.py -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.com Web上的项目文件,扫描192.168.0.0/24的80、443、8000-9000、81-90端口
python Perun.py -l http://Perun.com -t 192.168.0.0/24 -p 80 443 8000-9000 81-90
本地加载并列出所有支持Vuln模块
python Perun.py -l . --all-list
本地加载扫描192.168.0.0/24的默认端口,并检测是否存在javarmi.javarmi_rce和weblogic.rce_cve201710271漏洞,其中javarmi.javarmi_rce模块扫描该Vuln模块默认端口,weblogic.rce_cve201710271扫描80、90、8000-9000端口
python Perun.py -l . -t 192.168.0.0/24 --vuln javarmi.javarmi_rce weblogic.rce_cve201710271=80,90,8000-9000
本地加载并指定关键词为smb/rce进行搜索,并列出搜索结果,不进行扫描,Perun将列出所有关键词为smb和rce的Vuln模块和Vuln模块信息
python Perun.py -l . --search smb rce --search-list
python Perun.py -l . -t 192.168.0.0/24 --search smb rce --search-list
本地加载并指定关键词为innet/rce进行搜索,从搜索结果中筛选出所有dangers关键词Vuln模块,不进行扫描,Perun将列出所有同时具有innet&dangers、rce&dangers的Vuln模块和Vuln模块信息
python Perun.py -l . --search innet rce --filter rce --search-list
本地加载并针对target.txt文件内的目标,忽略ping扫描和Html报告生成操作,进行默认端口扫描,然后加载所有内网Vuln模块(关键词为innet)进行扫描,所有Vuln模块仅扫描各模块默认端口
python Perun.py -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模块信息,不进行扫描
python Perun.py -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/
python Perun.py -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密码字典进行爆破,不生成报告
python Perun.py -l . -t 192.168.0.0/24 --search mysql --filter weakpassword --pass-path password.txt --skip-report
Perun目前支持57个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) |
confluence.confluence_ssti | 检测confluence SSTI(CVE-2019-3396) |
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.unauth2rce | 检测Jenkins pre-auth 远程命令执行漏洞 |
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远程命令执行漏洞 |
smb_netbios.new_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.rce_cnvdc201948814 | 检测WebLogic wls9-async RCE漏洞(CNVD-C-2019-48814) |
weblogic.ssrf_cve20144210 | 检测WebLogic SSRF漏洞(CVE-2014-4210) |
zabbix.zabbix_weakpwd | 检测Zabbix弱口令 |
zimbra.zimbra_xxe2rce | 检测Zimbra从XXE到RCE(CVE-2019-9670) |
zookeeper.zookeeper_unauth | 检测Zookeeper未授权访问 |