Repository: winezer0/APIFinderPlus Branch: main Commit: 55675f74f6b5 Files: 90 Total size: 1.4 MB Directory structure: gitextract_yt8fzlit/ ├── .gitattributes ├── .github/ │ └── workflows/ │ └── maven.yml ├── .gitignore ├── README-EN.MD ├── README.md ├── pom.xml ├── rule/ │ ├── finger-important-cn.json │ └── finger-important-en.json └── src/ └── main/ ├── java/ │ ├── EnumType/ │ │ ├── LocationType.java │ │ ├── MatchType.java │ │ └── RiskLevel.java │ ├── burp/ │ │ ├── AnalyseInfo.java │ │ ├── BurpExtender.java │ │ └── IProxyScanner.java │ ├── database/ │ │ ├── AnalyseHostResultTable.java │ │ ├── AnalyseUrlResultTable.java │ │ ├── DBService.java │ │ ├── PathTreeTable.java │ │ ├── RecordPathTable.java │ │ ├── RecordUrlTable.java │ │ ├── ReqDataTable.java │ │ ├── ReqMsgDataTable.java │ │ ├── TableLineDataModelBasicHostSQL.java │ │ └── TableLineDataModelBasicUrlSQL.java │ ├── model/ │ │ ├── AccessedUrlInfo.java │ │ ├── AnalyseHostResultModel.java │ │ ├── AnalyseUrlResultModel.java │ │ ├── BasicHostTableLineDataModel.java │ │ ├── BasicHostTableTabDataModel.java │ │ ├── BasicUrlTableLineDataModel.java │ │ ├── BasicUrlTableTabDataModel.java │ │ ├── FindPathModel.java │ │ ├── FingerPrintRule.java │ │ ├── FingerPrintRulesWrapper.java │ │ ├── HttpMsgInfo.java │ │ ├── HttpRespInfo.java │ │ ├── HttpUrlInfo.java │ │ ├── PathToUrlsModel.java │ │ ├── PathTreeModel.java │ │ ├── RecordHashMap.java │ │ ├── RecordPathDirsModel.java │ │ ├── RecordPathModel.java │ │ ├── ReqMsgDataModel.java │ │ ├── ReqUrlRespStatusModel.java │ │ ├── RespFieldsModel.java │ │ └── UnVisitedUrlsModel.java │ ├── sqlUtils/ │ │ ├── CommonDeleteLine.java │ │ ├── CommonFetchData.java │ │ ├── CommonUpdateStatus.java │ │ ├── Constants.java │ │ ├── UnionTableSql.java │ │ └── buildSQL.java │ ├── ui/ │ │ ├── BasicHostConfigPanel.java │ │ ├── BasicHostInfoPanel.java │ │ ├── BasicUrlConfigPanel.java │ │ ├── BasicUrlInfoPanel.java │ │ ├── FingerTabRender/ │ │ │ ├── ButtonEditor.java │ │ │ ├── ButtonRenderer.java │ │ │ ├── CenterRenderer.java │ │ │ ├── HeaderIconTypeRenderer.java │ │ │ └── LeftRenderer.java │ │ ├── MainTabRender/ │ │ │ ├── ColorInfoCellRenderer.java │ │ │ ├── HasImportantCellRenderer.java │ │ │ ├── RunStatusCellRenderer.java │ │ │ └── TableHeaderWithTips.java │ │ ├── RuleConfigPanel.java │ │ └── Tabs.java │ ├── utilbox/ │ │ ├── ByteArrayUtils.java │ │ ├── CharsetUtils.java │ │ ├── DomainUtils.java │ │ ├── HelperPlus.java │ │ ├── IPAddressUtils.java │ │ └── TextUtils.java │ └── utils/ │ ├── AnalyseInfoUtils.java │ ├── AnalyseUriFilter.java │ ├── BurpFileUtils.java │ ├── BurpHttpUtils.java │ ├── BurpPrintUtils.java │ ├── BurpSitemapUtils.java │ ├── CastUtils.java │ ├── ConfigUtils.java │ ├── ElementUtils.java │ ├── PathTreeUtils.java │ ├── RegularUtils.java │ ├── RespFieldCompareutils.java │ ├── RespHashUtils.java │ ├── RespTitleUtils.java │ ├── RespWebpackJsParser.java │ └── UiUtils.java └── resources/ └── conf/ └── finger-important.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitattributes ================================================ # Auto detect text files and perform LF normalization * text=auto ================================================ FILE: .github/workflows/maven.yml ================================================ name: Java CI with Maven on: workflow_dispatch: inputs: version: description: '发布版本号 (例如: 1.0.0)' required: true type: string releaseNotes: description: '发布说明' required: false default: '手动触发构建发布' # 添加权限配置 permissions: contents: write # 允许创建和修改发布、标签等内容 jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 8 uses: actions/setup-java@v3 with: java-version: '8' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B package --file pom.xml - name: Archive Jar file uses: actions/upload-artifact@v4 with: name: jar-with-dependencies path: ./target/*-jar-with-dependencies.jar - name: Get Jar filename id: get_jar_filename run: echo "JAR_FILENAME=$(ls ./target/*-jar-with-dependencies.jar | xargs -n 1 basename)" >> $GITHUB_ENV - name: Create and Upload to Release uses: softprops/action-gh-release@v1 with: tag_name: v${{ github.event.inputs.version }} name: Release v${{ github.event.inputs.version }} files: ./target/${{ env.JAR_FILENAME }} body: ${{ github.event.inputs.releaseNotes }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ================================================ FILE: .gitignore ================================================ # Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* replay_pid* .idea/ target/ *.db ================================================ FILE: README-EN.MD ================================================ # BurpAPIFinder-Refactor This plugin is a refactored development based on APIFinder UI [https://github.com/shuanx/BurpAPIFinder] ### Tips: Hover over the buttons to see their descriptions; currently, there is no documentation available. To ensure data integrity, all response body data is saved. If no whitelist is specified, it is recommended to clear the database for each new project to avoid occupying too much space. ### Download Link Visit https://github.com/winezer0/APIFinderPlus/actions ``` -> Latest workflow [Green indicates valid] -> Summary -> Download jar-with-dependencies at the bottom ``` ### Plugin Goals Create the most comprehensive API mining tool, Reduce manual path extraction and testing, Supplement operations that cannot be handled automatically, 1. Support extraction of sensitive information, URLs, and URI information from response data. 2. Support automatic calculation of actual URLs based on known path information. 3. Support automatic access to mined URL information for recursive information extraction. 4. Support simple format extraction and splicing of webpack's JS files (limited format but high accuracy). Combination format abcd.xxxx.js ![Simple webpack format. Character type](./doc/webpack简单格式.字符型.png) Combination format 1234.xxxx.js ![Simple webpack format. Numeric type](./doc/webpack简单格式.数字型.png) ### Notes 1. All data is stored and read using SQLite, which is slower than in-memory operations. 2. When there are too many targets, executing tasks like refreshing unvisited URLs or automatic recursive scanning may consume a significant amount of memory. 3. Due to the abundance of features, hover over text or buttons to view operation descriptions. ### Basic Workflow [Old Version] ![APIFinder Workflow](./doc/APIFinder运行流程.png) ### Main Tasks [Updated] ``` Scheduled Task Thread: - Query the ReqDataTable in the database - Check if there are any unanalyzed messages - Match and extract sensitive information, URLs, and PATHs from requests/responses based on rule configurations - Save analysis results to the AnalyseUrlResultTable in the database - Query the AnalyseUrlResultTable in the database - Categorize new results in the AnalyseUrlResultTable by RootUrl and insert them into the AnalyseHostResultTable - autoPathsToUrlsIsOpen: Enable automatic URL calculation based on paths (disabled by default, supports manual operation) - Query the RecordPathTable in the database - Check if there are valid request PATHs not yet added to the website path tree - Calculate/update the PathTree based on recorded URL paths - Save analysis results to the PathTree table - Query the database by combining PathTreeTable and AnalyseHostResultTable - Check if there are updated PathTrees that have not been recalculated for PATH URLs - Calculate possible prefixes for new PATHs based on the updated PathTree - Save analysis results to the PATH-calculated URL in the AnalyseHostResultTable - autoRecursiveIsOpen: Enable automatic access to unvisited URLs - Query the AnalyseHostResultTable in the database - Check if all URLs have been visited - Construct HTTP requests for unvisited URLs ``` ### Internal Rule Explanation ``` Note: Rules starting with CONF_ and located in "config" are internal rules and are not used for information matching. CONF_DEFAULT_PERFORMANCE: Default performance configuration "maxPatterChunkSizeDefault=1000000": Maximum response length for regex matching in one operation. Changes take effect immediately after saving. "maxStoreRespBodyLenDefault=1000000": Maximum size of response body saved in the database. Changes take effect immediately after saving. "monitorExecutorIntervalsDefault=4": Interval (in seconds) for executing extraction checks. Changes take effect immediately after saving. Other default UI button-related parameters take effect after saving and restarting the plugin. Custom automatic request scanning methods: 1. CONF_RECURSE_REQ_HTTP_METHODS: Customize supported HTTP request methods (one method per line). 2. CONF_RECURSE_REQ_HTTP_PARAMS: Configure keywords to prevent automatic scanning of URLs, such as [logout, del], to avoid accidental deletions. 3. CONF_BLACK_RECURSE_REQ_PATH_KEYS: Support custom request parameters (write one set of request parameters per line; multiple lines will be iterated). Note: The request headers for the current request are dynamically obtained from the current URL request body. Custom request header functionality will be added based on user needs. CONF_WHITE_ROOT_URL: Keywords for allowed RootUrls to scan. CONF_BLACK_ROOT_URL: Keywords for RootUrls prohibited from [monitoring scans | URL extraction | PATH extraction]. CONF_BLACK_URI_PATH_KEYS: Keywords for URI paths prohibited from [monitoring scans | URL extraction | PATH extraction]. CONF_BLACK_URI_EXT_EQUAL: File extensions prohibited from [monitoring scans | URL extraction | PATH extraction]. CONF_BLACK_AUTO_RECORD_PATH: Keywords for RootUrls prohibited from automatic PATH recording. CONF_BLACK_AUTO_RECURSE_SCAN: Keywords for RootUrls prohibited from automatic scanning of unvisited URLs. CONF_WHITE_RECORD_PATH_STATUS: Response status codes allowed for automatic PATH recording. CONF_BLACK_RECORD_PATH_TITLE: Response titles prohibited from automatic PATH recording. CONF_BLACK_EXTRACT_PATH_EQUAL: URI paths prohibited from extraction [equal to any element in this list]. CONF_BLACK_EXTRACT_INFO_KEYS: Sensitive information prohibited from extraction [containing any element in this list]. CONF_REGULAR_EXTRACT_URIS: Regular expressions for extracting response URIs/URLs. ``` ### Matching Rule Explanation ``` Matching Location ("location" field): locations = CONFIG("config"): Configuration rules, not involved in matching. PATH("path"): Request path. TITLE("title"): Response title (.*). BODY("body"): Response body. HEADER("header"): Response header. RESPONSE("response"): Entire response content. ICON_HASH("icon_hash"): Hash of the ico file, only obtained when the file is of ico type. Matching Method ("matchType" field): 1. Keyword Matching ANY_KEYWORDS("any_keywords"): Match any keyword rule (common). Supports || and && syntax. ALL_KEYWORDS("all_keywords"): Match all keyword rules (rare). Supports || and && syntax. 2. Regex Matching ANY_REGULAR("any_regular"): Match any regex rule (common). ALL_REGULAR("all_regular"): Match all regex rules (rare). Actual Matching Rules ("matchKeys": [] list): 1. Keyword Matching Rule Writing Each line is a keyword extraction matching rule. Each line's content supports multiple keywords joined together using the symbol 【|】. Example: "matchType": "any_keywords" + "matchKeys": ["fzhm1&&total1&&rows1", "fzhm2&&total2&&rows2"], Indicates that it requires fzhm1, total1, and rows1 keywords simultaneously or fzhm2, total2, and rows2 simultaneously. "matchType": "all_keywords" + "matchKeys": ["fzhm1||fzhm2","total1||total2"], Indicates that it requires at least one fzhm* and at least one total* keyword simultaneously. Note: 1. This rule differs from the original version. 2. Since it uses syntax symbols 【|| &&】, matching keywords cannot contain 【|| &&】. 2. Regex Matching Rule Writing Each line is a regex extraction matching rule. Other Keywords: "accuracy": Rule accuracy. "describe": Rule description. "isImportant": Whether the matching result is important. "isOpen": Whether the rule is enabled. "type": Rule category. ``` ================================================ FILE: README.md ================================================ # BurpAPIFinder-Refactor 本插件参考 APIFinder UI 进行重构开发 [https://github.com/shuanx/BurpAPIFinder] 但整体功能目标还是类似 APIFinder,主要是发现未授权/敏感信息/越权/登陆接口等,但实现思路上略有不同. 本插件更关注动态分析路径树,尽可能少的Fuzz无用路径, 避免被Ban. ## 免责声明 继续阅读文章或使用工具视为您已同意NOVASEC免责声明 [NOVASEC免责声明](https://mp.weixin.qq.com/s/iRWRVxkYu7Fx5unxA34I7g) # 程序功能 提取网站的URL链接和解析响应内容URL/URI/PATH 主动接口路径树分析动态拼接探测API接口路径 响应内容中的敏感信息匹配、指纹信息匹配 集成敏感信息识别指纹库、CMS识别指纹 ### 使用提示: 目前没有文档描述, 暂时没有时间进行详细文档编写, 希望用户可以提交初步使用文档,我将进行更新 按钮功能说明: 请将鼠标悬浮在按钮上,会进行提示 数据库占用大: 为了数据完整性基本保存了所有响应体数据 如果没有指定白名单的话,建议每个新项目都清理一次数据库,否则将会占用大量空间 自定义配置文件: 将自己的配置文件存放在插件所在目录即可. ### 下载地址 访问 https://github.com/winezer0/APIFinderPlus/actions ``` -> 最新工作流【绿色表示有效】 -> Summary -> 最下面下载 jar-with-dependencies ``` ### 插件目标 做最全面的API挖掘工具、 减少手动拼接path的提取测试、 补充无法自动处理的操作、 1、支持 响应 信息中的敏感信息、URL、URI信息提取. 2、支持 自动基于 已知路径信息 计算PATH 对应的实际URL. 3、支持 自动访问 挖掘出来的URL信息 进行递归式的信息提取. 4、支持 对webpack的js的简单格式的拼接提取 (限制格式,但准确度高) 组合形式 abcd.xxxx.js ![webpack简单格式.字符型](./doc/webpack简单格式.字符型.png) 组合形式 1234.xxxx.js ![webpack简单格式.数字型](./doc/webpack简单格式.数字型.png) ### 注意事项 1、所有数据都是存储sqlite进行读写、比内存操作慢一些. 2、当目标数量过多时、执行 刷新未访问URL、自动递归扫描 任务时,占用的内存应该是较大的。 3、因为功能过多,使用请将鼠标悬浮到文本或按钮上,查看操作描述 ### 基本流程 【旧版】 ![APIFinder运行流程](./doc/APIFinder运行流程.png) ### 主要任务 【更新】 ``` 定时任务线程: - 查询数据库 ReqDataTable 表 - 是否存在未分析的 消息 - 根据规则配置 匹配 提取 请求|响应中的敏感信息和URL、PATH - 分析结果存入数据库 AnalyseUrlResultTable 表 - 查询数据库AnalyseUrlResultTable 表 - 将 AnalyseUrlResultTable 表中的新结果按照RootUrl分类插入到 AnalyseHostResultTable 表 - autoPathsToUrlsIsOpen 开启自动基于路径计算URL功能 (默认关闭、支持手动) - 查询数据库 RecordPathTable - 检查是否存在没有加入到 网站路径树 的有效请求PATH - 根据已记录的URL路径计算/更新Pathree - 分析结果存入 PathTree 表 - 查询数据库 联合分析 PathTreeTable 和 AnalyseHostResultTable 表 - 检查是否存在已经更新的PathTree 但是还没有重新计算过PATH URL的数据 - 根据已更新的Pathree计算新的PATH可能的前缀 - 分析结果存入 AnalyseHostResultTable 的 PATH计算URL - autoRecursiveIsOpen 开启自动访问未访问的URL - 查询数据库 AnalyseHostResultTable 表 - 判断是否URL是否都已经被访问 - 对未访问URL构造HTTP请求 ``` ### 内部规则说明 ``` 注意:对于CONF_开头和location为config的规则,属于内部规则,不用于信息匹配。 CONF_DEFAULT_PERFORMANCE: 默认的性能配置 "maxPatterChunkSizeDefault=1000000", 正则匹配一次性处理的响应长度 修改保存后立即生效 "maxStoreRespBodyLenDefault=1000000", 数据库保存响应体的最大大小 修改保存后立即生效 "monitorExecutorIntervalsDefault=4", 几秒钟执行一次检查提取操作 修改保存后立即生效 其他默认UI按钮相关的参数,修改保存后,重启插件生效 自定义自动请求扫描的方法 1、CONF_RECURSE_REQ_HTTP_METHODS 自定义 任意 请求方法列表支持 【每行一种请求方法】 2、CONF_RECURSE_REQ_HTTP_PARAMS 配置禁止自动扫描的URL关键字 如【logout、del】等 防止误删除 3、CONF_BLACK_RECURSE_REQ_PATH_KEYS 支持自定义请求参数 【一次的请求参数写在一行即可,多行会遍历】 注意:当前请求的请求头是基于当前URL请求体中动态获取的,后续根据用户需求添加自定义请求头功能。 CONF_WHITE_ROOT_URL: 允许扫描的目标RootUrl关键字 CONF_BLACK_ROOT_URL: 禁止进行[监听扫描|URL提取|PATH提取]的 RootUrl关键字 CONF_BLACK_URI_PATH_KEYS: 禁止进行[监听扫描|URL提取|PATH提取]的 URI 路径关键字 CONF_BLACK_URI_EXT_EQUAL: 禁止进行[监听扫描|URL提取|PATH提取]的 URI 文件扩展名 CONF_BLACK_AUTO_RECORD_PATH: 禁止自动进行有效PATH记录的目标RootUrl关键字 CONF_BLACK_AUTO_RECURSE_SCAN: 禁止自动进行未访问URL扫描的目标RootUrl关键字 CONF_WHITE_RECORD_PATH_STATUS: 允许自动进行有效PATH记录的响应状态码 CONF_BLACK_RECORD_PATH_TITLE: 禁止自动进行有效PATH记录的响应标题 CONF_BLACK_EXTRACT_PATH_EQUAL: 禁止提取的URI路径[等于]此项任一元素 CONF_BLACK_EXTRACT_INFO_KEYS: 禁止提取的敏感信息[包含]此项任一元素 CONF_REGULAR_EXTRACT_URIS: 提取响应URI|URL的正则表达式 ``` ### 匹配规则说明 ``` 匹配位置("location" 字段): locations = CONFIG("config"), //配置规则、不参与匹配 PATH("path"), //请求路径 TITLE("title"), //响应标题 (.*) BODY("body"), //响应正文 HEADER("header"), //响应头部 RESPONSE("response"), //全部响应内容 ICON_HASH("icon_hash"); //ico文件hash 只有在文件是ico类型时才会获取 匹配方法("matchType"字段): 1、关键字匹配 ANY_KEYWORDS("any_keywords"), //匹配任意关键字规则 常见 支持|| &&语法 ALL_KEYWORDS("all_keywords"), //匹配所有关键字规则 少见 支持|| &&语法 2、正则匹配 ANY_REGULAR("any_regular"), //要求匹配任意正则 常见 ALL_REGULAR("all_regular"); //要求匹配所有正则 少见 实际匹配规则("matchKeys" : [] 列表): 1、关键字匹配规则编写 每行是一个关键字提取匹配规则、 每行的内容支持由多个关键字拼接组成,拼接符号是 【|】 举例: "matchType": "any_keywords" + "matchKeys": ["fzhm1&&total1&&rows1", "fzhm2&&total2&&rows2"], 表示要求 同时含有fzhm1、total1、rows1 关键字 或 同时完全含有fzhm2、total2、rows2 "matchType": "all_keywords" + "matchKeys": ["fzhm1||fzhm2","total1||total2"], 表示要求 同时含有 至少一个fzhm*、 至少一个total* 关键字 注意: 1、本规则和原版的有差异, 2、由于使用了语法符号 【|| && 】 ,因此不能让匹配关键字中包含【|| &&】 2、正则匹配规则编写 每行是一个正则提取匹配规则 其他关键字: "accuracy": 规则准确度 "describe": 规则描述 "isImportant": 匹配结果是否重要信 "isOpen": 是否启用规则 "type": 规则分类 ``` ## 联系方式 如需获取更多信息、技术支持或定制服务,请通过以下方式联系我们: NOVASEC微信公众号或通过社交信息联系开发者【酒零】 ![NOVASEC0](https://raw.githubusercontent.com/winezer0/mypics/refs/heads/main/NOVASEC0.jpg) ================================================ FILE: pom.xml ================================================ 4.0.0 org.example APIFinderPlus 1.1.8 8 8 net.portswigger.burp.extender burp-extender-api 2.3 com.alibaba.fastjson2 fastjson2 2.0.40 org.xerial sqlite-jdbc 3.45.3.0 org.slf4j slf4j-nop 1.6.1 compile commons-net commons-net 3.10.0 com.github.seancfoley ipaddress 5.3.3 com.google.guava guava 33.1.0-jre dnsjava dnsjava 2.1.9 commons-io commons-io 2.16.1 org.apache.commons commons-text 1.12.0 org.apache.maven.plugins maven-assembly-plugin package single jar-with-dependencies org.apache.maven.plugins maven-compiler-plugin 3.1 8 8 utf-8 ================================================ FILE: rule/finger-important-cn.json ================================================ { "fingerprint": [ { "describe": "性能相关配置", "isImportant": false, "isOpen": true, "matchKeys": [ "maxPatterChunkSizeDefault=20000", "maxStoreRespBodyLenDefault=1200000", "monitorExecutorIntervalsDefault=4", "dynamicPathFilterIsOpenDefault=false", "autoRecordPathIsOpenDefault=true", "autoPathsToUrlsIsOpenDefault=true", "autoRecursiveIsOpenDefault=false", "proxyListenIsOpenDefault=false", "autoRefreshUnvisitedIsOpenDefault=false", "autoRefreshUiIsOpenDefault=false", "forceDecodeUnicodeDefault=true", "addApiToUnvisitedUrlsDefault=true" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_DEFAULT_PERFORMANCE" }, { "describe": "允许[监听扫描]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_WHITE_ROOT_URL" }, { "describe": "禁止[监听扫描|提取URL]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [ ".activity.windows.com", ".adblockplus.org", ".alibaba.com", ".alicdn.com", ".alipayobjects.com", ".aliyun.com", ".amap.com", ".asp.net", ".baidu.com", ".bilibili.com", ".bing.com", ".cdn-go.cn", ".cdn.mozilla.net", ".dftoutiao.com", ".eastday.com", ".feishu.cn", ".feishu.com", ".feishucdn.com", ".firefox.com.cn", ".firefoxchina.cn", ".fofa.info", ".geetest.com", ".githubusercontent.com", ".google.com", ".googleapis.com", ".googletagmanager.com", ".gstatic.com.com", ".gtimg.com", ".gvt1.com", ".jsdelivr.net", ".live.com", ".microsoft.com", ".mozilla.com", ".mozilla.net", ".mozilla.org", ".msftconnecttest.com", ".msn.cn", ".msn.com", ".netease.com", ".npmjs.org", ".office.com", ".officeapps.live.com", ".qcloud.com", ".qnic.com", ".scorecardresearch.com", ".shodan.io", ".telemetry.mozilla.org", ".vuejs.org", ".vulbox.com", ".w3.org", ".windowsupdate.com", ".qq.com", ".wx.qq.com", ".xp.cn", ".yahoo.com", "github.com", "google.com", "lodash.com", "npms.io" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_ROOT_URL" }, { "describe": "禁止进行[监听扫描|URL提取|PATH提取]的URI路径关键字", "isImportant": false, "isOpen": true, "matchKeys": [ "/jquery/", "/echarts/", "/amazeui/", "/animation/", "/zh-cn.js", ":/usr/" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_URI_PATH_KEYS" }, { "describe": "禁止[提取PATH]等于此项", "isImportant": false, "isOpen": true, "matchKeys": [ "/", "/?", "image/x-icon", "image/png", "image/jpg", "application/x-www-form-urlencoded", "multipart/form-data", "MM/DD/YYYY", "YYYY/MM/DD", "text/javascript", "text/xml", "text/html", "text/csv", "text/css", "text/plain", "application/json", "ecdsa/rsa", "/.*/", "/.+/" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_EXTRACT_PATH_EQUAL" }, { "describe": "禁止进行[监听扫描|URL提取|PATH提取]的URI文件扩展名", "isImportant": false, "isOpen": true, "matchKeys": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "x", "y", "gif", "png", "jpg", "jpeg", "webp", "tif", "tiff", "bmp", "css", "woff", "woff2", "svg", "pdf", "docx", "doc", "xlsx", "xls", "pptx", "ppt", "ttf", "otf", "mp3", "wav", "aac", "ogg", "mp4", "avi", "mov", "wmv", "flv", "zip", "rar", "gz", "7z", "scss", "sass", "less", "eot", "swf", "vue" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_URI_EXT_EQUAL" }, { "describe": "禁止自动进行[有效PATH记录]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_AUTO_RECORD_PATH" }, { "describe": "禁止自动进行[未访问URL扫描]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [ "testphp.vulnweb.com" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_AUTO_RECURSE_SCAN" }, { "describe": "允许自动进行[有效PATH记录]的响应状态码", "isImportant": false, "isOpen": true, "matchKeys": [ "200", "403" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_WHITE_RECORD_PATH_STATUS" }, { "describe": "禁止自动进行[有效PATH记录]的响应标题", "isImportant": false, "isOpen": true, "matchKeys": [ "404 not Found" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_RECORD_PATH_TITLE" }, { "describe": "禁止[提取敏感信息]包含此项", "isImportant": false, "isOpen": true, "matchKeys": [ "admin@admin.com" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_EXTRACT_INFO_KEYS" }, { "describe": "提取响应URL|PATH的正则表达式", "isImportant": false, "isOpen": true, "matchKeys": [ "(?:\"|')(((?:[a-zA-Z]{1,10}://|//)[^\"'/]{1,}\\.[a-zA-Z]{2,}[^\"']{0,})|((?:/|\\.\\./|\\./)[^\"'><,;|*()(%%$^/\\\\\\[\\]][^\"'><,;|()]{1,})|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{1,}\\.(?:[a-zA-Z]{1,4}|action)(?:[\\?|#][^\"|']{0,}|))|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{3,}(?:[\\?|#][^\"|']{0,}|))|([a-zA-Z0-9_\\-]{1,}\\.(?:\\w)(?:[\\?|#][^\"|']{0,}|)))(?:\"|')", "(https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;\\u4E00-\\u9FFF]+[-A-Za-z0-9+&@#/%=~_|])" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_REGULAR_EXTRACT_URIS" }, { "describe": "禁止递归访问的URL路径关键字", "isImportant": false, "isOpen": true, "matchKeys": [ "logout", "cancel", "delete", "remove", "update" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_RECURSE_REQ_PATH_KEYS" }, { "describe": "递归访问URL时的HTTP请求方法", "isImportant": false, "isOpen": true, "matchKeys": [ "GET", "POST" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_RECURSE_REQ_HTTP_METHODS" }, { "describe": "递归访问URL时的HTTP请求参数", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_RECURSE_REQ_HTTP_PARAMS" }, { "accuracy": "high", "describe": "AppSecret、AppID", "isImportant": true, "isOpen": true, "matchKeys": [ "AppSecret&&AppID", "AppSecret&&AppKey" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "Authorization Header", "isImportant": false, "isOpen": true, "matchKeys": [ "((basic [a-z0-9=:_\\+\\/-]{5,100})|(bearer [a-z0-9_.=:_\\+\\/-]{5,100}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "Chinese Mobile Number", "isImportant": false, "isOpen": true, "matchKeys": [ "[^\\w]((?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[189]))\\d{8})[^\\w]" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "Cloud Key", "isImportant": true, "isOpen": true, "matchKeys": [ "(((access)(|-|_)(key)(|-|_)(id|secret))|(LTAI[a-z0-9]{12,20}))" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Druid", "isImportant": true, "isOpen": true, "matchKeys": [ "(Druid Stat Index)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Email", "isImportant": false, "isOpen": true, "matchKeys": [ "(([a-z0-9]+[_|\\.])*[a-z0-9]+@([a-z0-9]+[-|_|\\.])*[a-z0-9]+\\.((?!js|css|jpg|jpeg|png|ico)[a-z]{2,5}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "FTP泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "ftpUsername&&ftpPassword", "FTP_USER&&FTP_ADDR&&FTP_PASS" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "GraphQL", "isImportant": true, "isOpen": true, "matchKeys": [ "/graphql", "/graphiql" ], "location": "path", "matchType": "any_keywords", "type": "敏感路径" }, { "accuracy": "high", "describe": "GraphQL API", "isImportant": true, "isOpen": true, "matchKeys": [ "/graphiql", "__graphiql", "/graphiql" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "Internal IP Address", "isImportant": false, "isOpen": true, "matchKeys": [ "[^0-9]((127\\.0\\.0\\.1)|(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(172\\.((1[6-9])|(2\\d)|(3[01]))\\.\\d{1,3}\\.\\d{1,3})|(192\\.168\\.\\d{1,3}\\.\\d{1,3}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "JDBC Connection", "isImportant": true, "isOpen": true, "matchKeys": [ "(jdbc:[a-z:]+://[a-z0-9\\.\\-_:;=/@?,&]+)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "JDBC泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "jdbc:(mysql|h2|oracle|sqlserver|jtds:sqlserver):" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "JDBC泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "System.Data.SqlClient", "Data.PassportContext", "mysql.username&&mysql.password&&mysql.url", "jdbc.username&&jdbc.password", "mssql.jdbc&&mssql.user", "com.microsoft.sqlserver.jdbc.SQLServerDriver" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "JSON Web Token", "isImportant": true, "isOpen": true, "matchKeys": [ "(eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9._-]{10,}|eyJ[A-Za-z0-9_\\/+-]{10,}\\.[A-Za-z0-9._\\/+-]{10,})" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Java Deserialization", "isImportant": false, "isOpen": true, "matchKeys": [ "(javax\\.faces\\.ViewState)" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "MAC Address", "isImportant": false, "isOpen": true, "matchKeys": [ "(^([a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5})|[^a-zA-Z0-9]([a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "OpenAPI-Swagger", "isImportant": true, "isOpen": true, "matchKeys": [ "/swagger-resources", "/swagger/" ], "location": "path", "matchType": "any_keywords", "type": "敏感路径" }, { "accuracy": "high", "describe": "Password Field", "isImportant": true, "isOpen": true, "matchKeys": [ "((|'|\")(|[\\w]{1,10})([p](ass|wd|asswd|assword))(|[\\w]{1,10})(|'|\")(:|=)(|)('|\")(.*?)('|\")(|,))" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "SSH泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "ssh://" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "SpringbootActuator", "isImportant": true, "isOpen": true, "matchKeys": [ "/mappings", "/actuator" ], "location": "path", "matchType": "any_keywords", "type": "敏感路径" }, { "accuracy": "high", "describe": "Swagger UI", "isImportant": true, "isOpen": true, "matchKeys": [ "((swagger-ui.html)|(\\\"swagger\\\":)|(Swagger UI)|(swaggerUi)|(swaggerVersion))" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Ueditor", "isImportant": true, "isOpen": true, "matchKeys": [ "(ueditor\\.(config|all)\\.js)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Upload Form", "isImportant": false, "isOpen": true, "matchKeys": [ "(type\\=\\\"file\\\")" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "Windows File/Dir Path", "isImportant": true, "isOpen": true, "matchKeys": [ "'[^\\w](([a-zA-Z]:\\\\(?:\\w+\\\\?)*)|([a-zA-Z]:\\\\(?:\\w+\\\\)*\\w+\\.\\w+))'" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "shiro", "isImportant": true, "isOpen": true, "matchKeys": [ "(=deleteMe|rememberMe=)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "云KEY", "isImportant": true, "isOpen": true, "matchKeys": [ "ALI_ACCESS_ID&&ALI_ACCESS_KEY", "ACCESSID&&ACCESSKEY", "AccessKey ID&&AccessKey Secret", "accessKeyId&&accessKeySecret", "ACCESS_ID&&ACCESS_KEY", "SSOusername&&SSOpassword", "oss://", "UC_DBHOST&&UC_DBUSER&&UC_KEY&&UC_API", "access_key_id&&secret_access_key", "accessKeyId&&accessSecret", "\"accessKeyId\"", "accessKeyId&&secretAccessKey" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "企业微信Corpid、Corpsecret", "isImportant": true, "isOpen": true, "matchKeys": [ "Corpid&&Corpsecret" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "修改密码", "isImportant": true, "isOpen": true, "matchKeys": [ "username&&userName", "actionid", "newPws&&newpassword" ], "location": "body", "matchType": "all_keywords", "type": "敏感内容" }, { "accuracy": "medium", "describe": "初始密码", "isImportant": true, "isOpen": true, "matchKeys": [ "(initPassword\\s*[:=]\\s*\"?|\"initPassword\"\\s*:\\s*\"?|\"初始密码\"\\s*:\\s*\"?)[\"]?[^\"\\s]+[\"]?|\\b初始密码是\\s+[^\"\\s]+" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "手机, 用户名", "isImportant": true, "isOpen": true, "matchKeys": [ "personName&&phoneNo&&deptName", "tel&&account&&userName&&mailAccount&&Content-Type: application/json", "email&&phone&&pwd&&id&&name&&Content-Type: application/json", "msg&&mobile\"&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "管理员账号、管理员密码", "isImportant": true, "isOpen": true, "matchKeys": [ "管理员密码&&管理员账号", "'admin_pwd'&&'admin_user'", "&&", "\"admin_pwd\"&&\"admin_user\"" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "缺少参数", "isImportant": false, "isOpen": true, "matchKeys": [ "\".*Required .{1,18} parameter.*\"" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "缺少参数", "isImportant": false, "isOpen": true, "matchKeys": [ "Content-Type: application/json&&is not present", "Content-Type: application/json&&缺少参数", "Content-Type: application/json&&参数缺少" ], "location": "body", "matchType": "any_keywords", "type": "提示信息" }, { "accuracy": "high", "describe": "账号", "isImportant": true, "isOpen": true, "matchKeys": [ "description&&name\"&&message\"&&Type\"&&Content-Type: application/json", "person&&mobilPhone&&id&&status" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "账号, 密码", "isImportant": false, "isOpen": true, "matchKeys": [ "password&&name&&userid&&Content-Type: application/json", "user=='&&password=='", "userName =>&&password =>&&info", "secret_key&&address", "secret_key&&api_key", "password:&&HOST:&&NAME:", "server&&pwd&&database&&user", "Authentication failed&&user&&__construct", "VPN服务器地址&&用户名&&密码", "username&&password&&jdbc:", "String username&&String password&&=", "jdbc.url&&://&&username&&password", "pass&&email&&user&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "账号, 身份证", "isImportant": true, "isOpen": true, "matchKeys": [ "身份证号码&&姓名&&公司&&Content-Type: application/json", "gmsfhm&&Content-Type: application/json", "cjrsfzh&&Content-Type: application/json", "sfzhm&&total&&rows", "keyHash&&idCard&&partment", "Idcard&&Name&&id&&status&&address", "name&&sfzh&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "账号, 邮箱, 收集", "isImportant": true, "isOpen": true, "matchKeys": [ "name&&realName&&email&&phone&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "身份证", "isImportant": true, "isOpen": true, "matchKeys": [ "(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65|71|81|82)\\\\d{4}(19|20)\\\\d{2}((0[1-9])|(1[0-2]))((0[1-9])|([12]\\\\d)|(3[01]))\\\\d{3}([0-9Xx])" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "邮箱凭证泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "EMAIL_HOST_USER&&EMAIL_HOST_PASSWORD", "mail.username&&mail.password", "sender.username&&sender.password", "mailUserPwd&&mailUserName", "mail_user&&mail_pass", "EMAIL_PSWD&&EMAIL_USER", "EMAIL_LOGIN_NAME&&EMAIL_LOGIN_PASSWD", "email_username&&email_password", "smtp_username&&smtp_password", "mailuser&&mailPassword", "mailServerUsername&&mailServerPassword", "WebMail.UserName&&WebMail.Password" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "飞书App_Id、App_Secret", "isImportant": true, "isOpen": true, "matchKeys": [ "App_Id&&App_Secret" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/images/tongda.ico" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "Office Anywhere", "网络智能办公系统" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "tongda2000.com", "官网" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "通达OA", "login" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "-187813927" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "-759108386" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1578525679" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/wui/common/page/sysRemind.jsp" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微OA", "isImportant": true, "isOpen": true, "matchKeys": [ "ecology_JSessionid" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微云桥 e-Bridge", "isImportant": true, "isOpen": true, "matchKeys": [ "wx.weaver", "e-Bridge" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微e-mobile", "isImportant": true, "isOpen": true, "matchKeys": [ "移动管理平台-企业管理" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微emp-移动管理平台", "isImportant": true, "isOpen": true, "matchKeys": [ "2062026853" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "sys/ui/extend/theme/default/style/icon.css", "sys/ui/extend/theme/default/style/profile.css" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "蓝凌软件", "App_Themes/Login" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "login_single_horizontal" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "login_single_full_screen" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌EIS智慧协同平台", "isImportant": true, "isOpen": true, "matchKeys": [ "/scripts/jquery.landray.common.js", "蓝凌软件" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/seeyon/USER-DATA/IMAGES/LOGIN/login.gif" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/seeyon/common/" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA", "isImportant": true, "isOpen": true, "matchKeys": [ "165601673" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA M3 Server", "isImportant": true, "isOpen": true, "matchKeys": [ "M3 Server" ], "location": "title", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA M1 Server", "isImportant": true, "isOpen": true, "matchKeys": [ "M1-Server" ], "location": "title", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远 Analytics Cloud 分析云", "isImportant": false, "isOpen": true, "matchKeys": [ "410106848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "万户 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "defaultroot", "Logon!logon.action", "domainAccount" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "万户 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/defaultroot/public/edit/logindownload/Logindownload.jsp" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "万户ezOFFICE", "isImportant": true, "isOpen": true, "matchKeys": [ "-1827521324" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "万户网络ezEIP", "isImportant": true, "isOpen": true, "matchKeys": [ "Powered By wanhu - www.wanhu.com.cn", "ezEip" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "华天动力OA", "isImportant": true, "isOpen": true, "matchKeys": [ "OAapp/WebObjects/OAapp.woa", "/htoa/js/jquery.js" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友软件", "isImportant": false, "isOpen": true, "matchKeys": [ "UFIDA Software CO.LTD all rights reserved" ], "location": "body", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "用友NC", "isImportant": true, "isOpen": true, "matchKeys": [ "logo/images/ufida_nc.png", "用友NC" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友 NC Cloud", "isImportant": true, "isOpen": true, "matchKeys": [ "platform/pub/welcome.do" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友GRP-U8 新政府会计制度专版", "isImportant": true, "isOpen": true, "matchKeys": [ "-299520369" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友U8", "isImportant": true, "isOpen": true, "matchKeys": [ "U8远程接入官方网站", "用友" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友-畅捷通OEM", "isImportant": false, "isOpen": true, "matchKeys": [ "GNRemote.dll", "Web_sc/login.gn" ], "location": "body", "matchType": "all_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "用友BIP 数据应用服务", "isImportant": false, "isOpen": true, "matchKeys": [ "1183274548" ], "location": "icon_hash", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "奇安信自动化渗透测试系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-747580443" ], "location": "icon_hash", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "奇安信VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "奇安信VPN" ], "location": "title", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "天融信产品", "isImportant": true, "isOpen": true, "matchKeys": [ "<TITLE>Web User Login", "loginCheck" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "topsecsvportalstyle" ], "location": "header", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "天融信VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "vone/pub/image/logo1.png" ], "location": "header", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "天融信WEB应用安全防护系统", "isImportant": true, "isOpen": true, "matchKeys": [ "module=login", "topsec", "login" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信 Reporter", "isImportant": true, "isOpen": true, "matchKeys": [ "Login @ Reporter", "topsec", "login" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信防火墙", "isImportant": true, "isOpen": true, "matchKeys": [ "TOPSEC", "image/aaa.png", "username" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信TopAPP负载均衡系统", "isImportant": true, "isOpen": true, "matchKeys": [ "TopAPP负载均衡系统", "天融信" ], "location": "body", "matchType": "all_keywords", "type": "负载均衡" }, { "accuracy": "lower", "describe": "天融信-上网行为管理系统", "isImportant": true, "isOpen": true, "matchKeys": [ "images/logo3.gif", "dkey_activex_download.php", "login_commit.php" ], "location": "body", "matchType": "all_keywords", "type": "上网行为管理类" }, { "accuracy": "lower", "describe": "天融信设备", "isImportant": true, "isOpen": true, "matchKeys": [ "-2019013898" ], "location": "icon_hash", "matchType": "any_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信应用交付系统", "isImportant": true, "isOpen": true, "matchKeys": [ "TopApp-AD" ], "location": "body", "matchType": "any_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "ARRAY VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "/prx/000/http/localh/oauth_auth" ], "location": "body", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "siteserver", "isImportant": true, "isOpen": true, "matchKeys": [ "/sitefiles/assets/components/", "siteid" ], "location": "body", "matchType": "all_keywords", "type": "官网类" }, { "accuracy": "lower", "describe": "siteserver", "isImportant": true, "isOpen": true, "matchKeys": [ "sitefiles", "siteid" ], "location": "body", "matchType": "all_keywords", "type": "官网类" }, { "accuracy": "lower", "describe": "拓尔思", "isImportant": true, "isOpen": true, "matchKeys": [ "/was5/web/", "trs" ], "location": "body", "matchType": "all_keywords", "type": "官网类" }, { "accuracy": "lower", "describe": "契约锁", "isImportant": true, "isOpen": true, "matchKeys": [ "qyswebapp" ], "location": "body", "matchType": "any_keywords", "type": "合同类" }, { "accuracy": "lower", "describe": "明源云ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "-626335361" ], "location": "icon_hash", "matchType": "any_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "明源云ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "明源云ERP" ], "location": "title", "matchType": "any_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "明源云 ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "PubPlatform", "明源云", "LoginHandler" ], "location": "body", "matchType": "all_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "明源云 ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "#153290", "明源软件" ], "location": "body", "matchType": "all_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "CoreMail", "isImportant": true, "isOpen": true, "matchKeys": [ "coremail/common" ], "location": "body", "matchType": "any_keywords", "type": "邮件类" }, { "accuracy": "lower", "describe": "宏景eHR人力资源信息管理系统", "isImportant": true, "isOpen": true, "matchKeys": [ "人力资源信息管理系统", "hrlogon" ], "location": "body", "matchType": "all_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "JeecgBoot", "isImportant": true, "isOpen": true, "matchKeys": [ "fileview.jeecg.com/onlinePreview" ], "location": "body", "matchType": "any_keywords", "type": "CMS" }, { "accuracy": "lower", "describe": "亿赛通(DLP)", "isImportant": true, "isOpen": true, "matchKeys": [ "CDGServer3", "welcomebg.jpg" ], "location": "body", "matchType": "all_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "亿赛通-电子文档安全管理系统", "isImportant": true, "isOpen": true, "matchKeys": [ "/CDGServer3/SysConfig.jsp" ], "location": "body", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "通用企业管理软件", "isImportant": false, "isOpen": true, "matchKeys": [ "/cwbase/web/Login.aspx" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iDS联网数字标牌管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "iDS联网数字标牌管理系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "Nexus Repository Manager" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网动统一通信平台(Active UC)", "isImportant": false, "isOpen": true, "matchKeys": [ "网动统一通信平台(Active UC)" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道 zentao", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to use zentao" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "快云服务器小助手", "isImportant": false, "isOpen": true, "matchKeys": [ "快云服务器助手" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道 zentao", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to zentao" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "富通天下外贸ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "用户登录_富通天下外贸ERP" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海翔D8药业云平台", "isImportant": false, "isOpen": true, "matchKeys": [ "登录海翔" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "Kibana" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "永中在线编辑软件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "Web Office", "img/eio.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "南方数码交易一体化系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/SouthUIContent/themes/easydropdown.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "朗新天霁人力资源管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "hrsoft.com.cn", "chkLogindiv", "CustStyle" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科荣 AIO 运营管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "style1/css/ListRange.css", "主账套", "login.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "联达动力医院综合办公管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "login.aspx?Method=AJAX&UserName=", "Login_Return_XML.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中农信达三资云平台", "isImportant": false, "isOpen": true, "matchKeys": [ "技术支持:北京中农信达信息技术有限公司" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "电子申请客户端管理系统(EAC)", "isImportant": false, "isOpen": true, "matchKeys": [ "script/css/gwssi.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "青纺联物联查询平台", "isImportant": false, "isOpen": true, "matchKeys": [ "青纺联物联查询平台", "Themes/default/login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "致梦科技-管家婆物联通", "isImportant": false, "isOpen": true, "matchKeys": [ "HtmlPages/Vue/vue.js", "GetLoginValidate" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "广联达 Glodon", "isImportant": false, "isOpen": true, "matchKeys": [ "/ConsoleCommon/Content/weebox.css", "广联达" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "任我行 CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "/Handlers/IdentifyingCode.ashx" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "广联达 广讯通", "isImportant": false, "isOpen": true, "matchKeys": [ "gtp.standard", "JS/gxtAutoLogin.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "智能表综合管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "js/jsCore.js", "Ajax_Code/Login.ashx", "login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科德电子智慧水务平台", "isImportant": false, "isOpen": true, "matchKeys": [ "山东科德电子有限公司", "J_LoginSub" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "秦川燃气综合管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "系统登录", "res/icon/key.png", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "东胜物流软件", "isImportant": false, "isOpen": true, "matchKeys": [ "js/dhtmlxcombo_whp.js", "login.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "九思 OA 协同办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/jsoa/login.jsp" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "润申信息企业标准化管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "润申信息", "企业标准化管理系统", "loginForm" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "银达汇智智慧综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "福州银达云创信息科技有限公司", "miniui/crypto/CodeManage.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "同鑫T9eHR信息化管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "T9eHR-iconfont", "Authentication/Login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NortekControlLineareMerge", "isImportant": false, "isOpen": true, "matchKeys": [ "img/emerge.ico", "login_pw" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "顶讯科技-易宝OA系统", "isImportant": false, "isOpen": true, "matchKeys": [ "欢迎登录易宝OA系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "惠商+管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "惠商+管理系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "红帆-ioffice OA", "isImportant": false, "isOpen": true, "matchKeys": [ "iOffice.net" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "管家婆全渠道业务同步中心", "isImportant": false, "isOpen": true, "matchKeys": [ "管家婆全渠道业务同步中心" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spring env", "isImportant": false, "isOpen": true, "matchKeys": [ "servletContextInitParams" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "微三云管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "WSY_logo", "管理系统 MANAGEMENT SYSTEM" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "日志易", "isImportant": false, "isOpen": true, "matchKeys": [ "auth/passwordReset", "yw-login-", "yw-login-logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "思迪数据池管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "Ajax/Login", "思迪", "canvas" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科迈 RAS", "isImportant": false, "isOpen": true, "matchKeys": [ "科迈RAS", "CmxGoUrl.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spring env", "isImportant": false, "isOpen": true, "matchKeys": [ "logback" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Error 404--Not Found" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Error 403--" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "/console/framework/skins/wlsconsole/images/login_WebLogic_branding.png" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TWCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "href=\"/twcms/theme/default/css/global.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to Weblogic Application Server" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "<i>Hypertext Transfer Protocol -- HTTP/1.1</i>" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/por/login_psw.csp" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "loginPageSP/loginPrivacy.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "e-mobile", "isImportant": false, "isOpen": true, "matchKeys": [ "weaver,e-mobile" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ecology", "isImportant": false, "isOpen": true, "matchKeys": [ "ecology_JSessionid" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PbootCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "PbootSystem" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启明某VPN设备", "isImportant": false, "isOpen": true, "matchKeys": [ "cover_admin.css", "SSLVPN LOGIN" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天玥运维安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "css/fw/full.css", "js/p/login.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TP-LINK 产品", "isImportant": false, "isOpen": true, "matchKeys": [ "TP-LINK" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Influxdb", "isImportant": false, "isOpen": true, "matchKeys": [ "X-Influxdb" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "微宏 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "wh/servlet/MainServer" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "rememberMe=" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dreamer CMS-Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "dreamer-" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dreamer CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "-748565678" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧星自来水营业管理信息系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1704826498" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bonobo Git Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-219625874" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "晶奇科技救助管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1185226132" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "流量通 流量平台", "isImportant": false, "isOpen": true, "matchKeys": [ "325583172" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "北京朗新天霁人力资源系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1143915194" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "护卫神·主机大师", "isImportant": false, "isOpen": true, "matchKeys": [ "1188645141" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "友加畅捷U+财会通", "isImportant": false, "isOpen": true, "matchKeys": [ "2049187099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "信锐物联平台", "isImportant": false, "isOpen": true, "matchKeys": [ "147973611" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WiseGrid慧敏应用交付网关", "isImportant": false, "isOpen": true, "matchKeys": [ "910523681" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dreamer CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "dreamer-cms" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "=deleteMe" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "重庆佰鼎-佰鼎OA", "isImportant": false, "isOpen": true, "matchKeys": [ "default.aspx", "Style/Style.css", "Skin2017", "TxtUserPwd" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PbootCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "PbootCMS" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Swagger UI", "isImportant": false, "isOpen": true, "matchKeys": [ "Swagger UI" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ruijie", "isImportant": false, "isOpen": true, "matchKeys": [ "4008 111 000" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei SMC", "isImportant": false, "isOpen": true, "matchKeys": [ "Script/SmcScript.js?version=" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C Router", "isImportant": false, "isOpen": true, "matchKeys": [ "/wnm/ssl/web/frame/login.html" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/+CSCOE+/logon.html" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服 waf", "isImportant": false, "isOpen": true, "matchKeys": [ "rsa.js", "commonFunction.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服防火墙数据中心", "isImportant": false, "isOpen": true, "matchKeys": [ "Redirect to...", "/LogInOut.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服一体化网关 MIG", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/login.cgi", "/html/wz_tooltip.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网御 vpn", "isImportant": false, "isOpen": true, "matchKeys": [ "/vpn/common/js/leadsec.js", "/vpn/user/common/custom/auth_home.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Typecho", "isImportant": false, "isOpen": true, "matchKeys": [ "typecho", "usr/themes" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "401 登陆认证", "isImportant": false, "isOpen": true, "matchKeys": [ "401 Authorization" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "唯德科创 IPEasy 知易通", "isImportant": false, "isOpen": true, "matchKeys": [ "_IPEasy知易通" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Airflow", "isImportant": false, "isOpen": true, "matchKeys": [ "Airflow - Login" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启明星辰天清汉马USG防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "/cgi-bin/webui?op=get_product_model" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "飞鱼星上网行为管理", "isImportant": false, "isOpen": true, "matchKeys": [ "css/R1Login.css", "share.ti_username", "login_logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服上网行为管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "utccjfaewjb = function(str, key)" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服上网行为管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "document.write(WRFWWCSFBXMIGKRKHXFJ" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服应用交付报表系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/reportCenter/index.php?cls_mode=cluster_mode_others" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "群晖 NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "Synology", "webman/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金蝶云星空", "isImportant": false, "isOpen": true, "matchKeys": [ "HTML5/content/themes/kdcss.min.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金蝶云星空", "isImportant": false, "isOpen": true, "matchKeys": [ "/ClientBin/Kingdee.BOS.XPF.App.xap" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启明星辰天清汉马USG防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "天清汉马USG" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jboss", "isImportant": false, "isOpen": true, "matchKeys": [ "jboss.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "assets/gitlab_logo" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "入口校验失败" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "没有找到站点", "可能原因", "CDN产品", "Web服务", "检查端口是否正确" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>恭喜,站点创建成功", "面板系统后台", "系统自动生成" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DouPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by DouPHP", "DouPHP", "theme" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "扫码登录更安全", "bt.cn", "/login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "站点创建成功", "bt.cn" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "站点创建成功", "宝塔" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "-386189083" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道", "isImportant": false, "isOpen": true, "matchKeys": [ "self.location", "Lw==" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道", "isImportant": false, "isOpen": true, "matchKeys": [ "/theme/default/images/main/zt-logo.png" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道", "isImportant": false, "isOpen": true, "matchKeys": [ "zentaosid" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "YONYOU NC", "isImportant": false, "isOpen": true, "matchKeys": [ "uclient.yonyou.com", "UClient" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "宝塔Linux面板" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>RabbitMQ Management" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zabbix", "isImportant": false, "isOpen": true, "matchKeys": [ "zabbix", "Zabbix SIA" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "联软准入", "isImportant": false, "isOpen": true, "matchKeys": [ "网络准入", "leagsoft", "redirect" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "列目录", "isImportant": false, "isOpen": true, "matchKeys": [ "Index of /" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "列目录", "isImportant": false, "isOpen": true, "matchKeys": [ " - /" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "浪潮服务器IPMI管理口", "isImportant": false, "isOpen": true, "matchKeys": [ "img/inspur_logo.png", "Management System" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RegentApi_v2.0", "isImportant": false, "isOpen": true, "matchKeys": [ "RegentApi_v2.0" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tomcat默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "/manager/status", "/manager/html" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "slack-instance", "isImportant": false, "isOpen": true, "matchKeys": [ "99395752" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "spring-boot", "isImportant": false, "isOpen": true, "matchKeys": [ "116323821" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jenkins", "isImportant": false, "isOpen": true, "matchKeys": [ "81586312" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cnservers LLC", "isImportant": false, "isOpen": true, "matchKeys": [ "-235701012" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "743365239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Chainpoint", "isImportant": false, "isOpen": true, "matchKeys": [ "2128230701" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LaCie", "isImportant": false, "isOpen": true, "matchKeys": [ "-1277814690" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parse", "isImportant": false, "isOpen": true, "matchKeys": [ "246145559" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "628535358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "855273746" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Avigilon", "isImportant": false, "isOpen": true, "matchKeys": [ "1318124267" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – Confluence", "isImportant": false, "isOpen": true, "matchKeys": [ "-305179312" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "786533217" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Pi Star", "isImportant": false, "isOpen": true, "matchKeys": [ "432733105" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "705143395" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Angular IO (AngularJS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1255347784" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "XAMPP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1275226814" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "React", "isImportant": false, "isOpen": true, "matchKeys": [ "-2009722838" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "981867722" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "-923088984" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Aplikasi", "isImportant": false, "isOpen": true, "matchKeys": [ "494866796" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti Aircube", "isImportant": false, "isOpen": true, "matchKeys": [ "1249285083" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – Bamboo", "isImportant": false, "isOpen": true, "matchKeys": [ "-1379982221" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Exostar – Managed Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "420473080" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – Confluence", "isImportant": false, "isOpen": true, "matchKeys": [ "-1642532491" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco Meraki", "isImportant": false, "isOpen": true, "matchKeys": [ "163842882" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Archivematica", "isImportant": false, "isOpen": true, "matchKeys": [ "-1378182799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TCN", "isImportant": false, "isOpen": true, "matchKeys": [ "-702384832" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CX", "isImportant": false, "isOpen": true, "matchKeys": [ "-532394952" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ace", "isImportant": false, "isOpen": true, "matchKeys": [ "-183163807" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "552727997" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NetData", "isImportant": false, "isOpen": true, "matchKeys": [ "1302486561" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenGeo Suite", "isImportant": false, "isOpen": true, "matchKeys": [ "-609520537" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dgraph Ratel", "isImportant": false, "isOpen": true, "matchKeys": [ "-1961046099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1581907337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Material Dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "1913538826" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Form.io", "isImportant": false, "isOpen": true, "matchKeys": [ "1319699698" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kubeflow", "isImportant": false, "isOpen": true, "matchKeys": [ "-1203021870" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "netdata dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "-182423204" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CapRover", "isImportant": false, "isOpen": true, "matchKeys": [ "988422585" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WiJungle", "isImportant": false, "isOpen": true, "matchKeys": [ "2113497004" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Onera", "isImportant": false, "isOpen": true, "matchKeys": [ "1234311970" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SmartPing", "isImportant": false, "isOpen": true, "matchKeys": [ "430582574" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "1232596212" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "netdata dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "1585145626" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FRITZ!Box", "isImportant": false, "isOpen": true, "matchKeys": [ "-219752612" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "fortinet-forticlient", "isImportant": false, "isOpen": true, "matchKeys": [ "945408572" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti – AirOS", "isImportant": false, "isOpen": true, "matchKeys": [ "-697231354" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Fortinet – Forticlient", "isImportant": false, "isOpen": true, "matchKeys": [ "945408572" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Outlook Web Application", "isImportant": false, "isOpen": true, "matchKeys": [ "1768726119" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei – Claro", "isImportant": false, "isOpen": true, "matchKeys": [ "2109473187" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ASUS AiCloud", "isImportant": false, "isOpen": true, "matchKeys": [ "552592949" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SonicWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "631108382" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Google", "isImportant": false, "isOpen": true, "matchKeys": [ "708578229" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-134375033" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua Storm (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "2019488876" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei – ADSL/Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-1395400951" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sophos Cyberoam (appliance)", "isImportant": false, "isOpen": true, "matchKeys": [ "1601194732" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LANCOM Systems", "isImportant": false, "isOpen": true, "matchKeys": [ "-325082670" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-1050786453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TilginAB (HomeGateway)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1346447358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Supermicro Intelligent Management (IPMI)", "isImportant": false, "isOpen": true, "matchKeys": [ "1410610129" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zyxel ZyWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "-440644339" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dell SonicWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "363324987" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti Login Portals", "isImportant": false, "isOpen": true, "matchKeys": [ "-1446794564" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sophos User Portal/VPN Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "1045696447" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Tomcat", "isImportant": false, "isOpen": true, "matchKeys": [ "-297069493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "396533629" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cyberoam", "isImportant": false, "isOpen": true, "matchKeys": [ "1462981117" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor", "isImportant": false, "isOpen": true, "matchKeys": [ "1594377337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vodafone (Technicolor)", "isImportant": false, "isOpen": true, "matchKeys": [ "165976831" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "UBNT Router UI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1677255344" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras Wireless", "isImportant": false, "isOpen": true, "matchKeys": [ "-359621743" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Connect (Webmail)", "isImportant": false, "isOpen": true, "matchKeys": [ "-677167908" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "BIG-IP", "isImportant": false, "isOpen": true, "matchKeys": [ "878647854" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microsoft OWA", "isImportant": false, "isOpen": true, "matchKeys": [ "442749392" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "pfSense", "isImportant": false, "isOpen": true, "matchKeys": [ "1405460984" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iKuai Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-271448102" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "31972968" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "3CX Phone System", "isImportant": false, "isOpen": true, "matchKeys": [ "970132176" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bluehost", "isImportant": false, "isOpen": true, "matchKeys": [ "-1119613926" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor", "isImportant": false, "isOpen": true, "matchKeys": [ "123821839" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZTE Corporation (Gateway/Appliance)", "isImportant": false, "isOpen": true, "matchKeys": [ "459900502" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ruckus Wireless", "isImportant": false, "isOpen": true, "matchKeys": [ "-2069844696" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bitnami", "isImportant": false, "isOpen": true, "matchKeys": [ "-1607644090" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Juniper Device Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "2141724739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "1835479497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "1278323681" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NETASQ - Secure / Stormshield", "isImportant": false, "isOpen": true, "matchKeys": [ "-1929912510" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "-1255992602" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "1895360511" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "-991123252" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vmware Secure File Transfer", "isImportant": false, "isOpen": true, "matchKeys": [ "1642701741" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SAP Netweaver", "isImportant": false, "isOpen": true, "matchKeys": [ "-266008933" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SAP ID Service: Log On", "isImportant": false, "isOpen": true, "matchKeys": [ "-1967743928" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SAP Conversational AI", "isImportant": false, "isOpen": true, "matchKeys": [ "1347937389" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Palo Alto Login Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "602431586" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Palo Alto Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-318947884" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Outlook Web Application", "isImportant": false, "isOpen": true, "matchKeys": [ "1356662359" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "1453890729" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Docker", "isImportant": false, "isOpen": true, "matchKeys": [ "-1814887000" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Docker", "isImportant": false, "isOpen": true, "matchKeys": [ "1937209448" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Amazon", "isImportant": false, "isOpen": true, "matchKeys": [ "-1544605732" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Amazon", "isImportant": false, "isOpen": true, "matchKeys": [ "716989053" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpMyAdmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-1010568750" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zhejiang Uniview Technologies Co.", "isImportant": false, "isOpen": true, "matchKeys": [ "-1240222446" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ISP Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-986678507" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AXIS (network cameras)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1616143106" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Roundcube Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-976235259" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "UniFi Video Controller (airVision)", "isImportant": false, "isOpen": true, "matchKeys": [ "768816037" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "pfSense", "isImportant": false, "isOpen": true, "matchKeys": [ "1015545776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Freebox OS", "isImportant": false, "isOpen": true, "matchKeys": [ "1838417872" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Keenetic", "isImportant": false, "isOpen": true, "matchKeys": [ "547282364" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sierra Wireless Ace Manager (Airlink)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1571472432" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Synology DiskStation", "isImportant": false, "isOpen": true, "matchKeys": [ "149371702" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "INSTAR IP Cameras", "isImportant": false, "isOpen": true, "matchKeys": [ "-1169314298" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-1038557304" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Octoprint (3D printer)", "isImportant": false, "isOpen": true, "matchKeys": [ "1307375944" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "1280907310" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vesta Hosting Control Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "1954835352" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Farming Simulator Dedicated Server", "isImportant": false, "isOpen": true, "matchKeys": [ "509789953" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Residential Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "-1933493443" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1993518473" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Arris", "isImportant": false, "isOpen": true, "matchKeys": [ "-1477563858" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PLEX Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-895890586" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "-1354933624" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Deluge", "isImportant": false, "isOpen": true, "matchKeys": [ "944969688" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "479413330" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cambium Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-435817905" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-981606721" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua Storm (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "833190513" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-652508439" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Fireware Watchguard", "isImportant": false, "isOpen": true, "matchKeys": [ "-569941107" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shock&Innovation!! netis setup", "isImportant": false, "isOpen": true, "matchKeys": [ "1326164945" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cacaoweb", "isImportant": false, "isOpen": true, "matchKeys": [ "-1738184811" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Loxone (Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "904434662" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HP Printer / Server", "isImportant": false, "isOpen": true, "matchKeys": [ "905744673" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netflix", "isImportant": false, "isOpen": true, "matchKeys": [ "902521196" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Linksys Smart Wi-Fi", "isImportant": false, "isOpen": true, "matchKeys": [ "-2063036701" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "lwIP (A Lightweight TCP/IP stack)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1205024243" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hitron Technologies", "isImportant": false, "isOpen": true, "matchKeys": [ "607846949" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua Storm (DVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "1281253102" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MOBOTIX Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "661332347" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Blue Iris (Webcam)", "isImportant": false, "isOpen": true, "matchKeys": [ "-520888198" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vigor Router", "isImportant": false, "isOpen": true, "matchKeys": [ "104189364" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Alibaba Cloud (Block Page)", "isImportant": false, "isOpen": true, "matchKeys": [ "1227052603" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DD WRT (DD-WRT milli_httpd)", "isImportant": false, "isOpen": true, "matchKeys": [ "252728887" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mitel Networks (MiCollab End User Portal)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1922044295" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "1221759509" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Router", "isImportant": false, "isOpen": true, "matchKeys": [ "1037387972" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PRTG Network Monitor", "isImportant": false, "isOpen": true, "matchKeys": [ "-655683626" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Elastic (Database)", "isImportant": false, "isOpen": true, "matchKeys": [ "1611729805" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "1144925962" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Wildfly", "isImportant": false, "isOpen": true, "matchKeys": [ "-1666561833" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco Meraki Dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "804949239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Workday", "isImportant": false, "isOpen": true, "matchKeys": [ "-459291760" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JustHost", "isImportant": false, "isOpen": true, "matchKeys": [ "1734609466" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Baidu (IP error page)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1507567067" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "2006716043" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Yii PHP Framework (Default Favicon)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1298108480" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "truVision NVR (interlogix)", "isImportant": false, "isOpen": true, "matchKeys": [ "1782271534" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SOYAL Serial Device Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1777351344" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Redmine", "isImportant": false, "isOpen": true, "matchKeys": [ "603314" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpMyAdmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-476231906" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco (eg:Conference Room Login Page)", "isImportant": false, "isOpen": true, "matchKeys": [ "-646322113" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jetty 404", "isImportant": false, "isOpen": true, "matchKeys": [ "-629047854" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Luma Surveillance", "isImportant": false, "isOpen": true, "matchKeys": [ "-1351901211" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-519765377" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HP Printer / Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-2144363468" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "-127886975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "1139788073" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "-1235192469" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ALIBI NVR", "isImportant": false, "isOpen": true, "matchKeys": [ "1876585825" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor 应用交付报表系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1810847295" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Websockets test page (eg: port 5900)", "isImportant": false, "isOpen": true, "matchKeys": [ "-291579889" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "macOS Server (Apple)", "isImportant": false, "isOpen": true, "matchKeys": [ "1629518721" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenRG", "isImportant": false, "isOpen": true, "matchKeys": [ "-986816620" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-299287097" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor", "isImportant": false, "isOpen": true, "matchKeys": [ "-1926484046" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HeroSpeed Digital Technology Co. (NVR/IPC/XVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "-873627015" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nomadix Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "2071993228" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "516963061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Magento", "isImportant": false, "isOpen": true, "matchKeys": [ "-38580010" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MK-AUTH", "isImportant": false, "isOpen": true, "matchKeys": [ "1490343308" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shoutcast Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-632583950" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "95271369" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "1476335317" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "-842192932" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "105083909" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "240606739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "2121539357" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Adobe Campaign Classic", "isImportant": false, "isOpen": true, "matchKeys": [ "-333791179" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "XAMPP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1437701105" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Niagara Web Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-676077969" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor", "isImportant": false, "isOpen": true, "matchKeys": [ "-2138771289" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hitron Technologies Inc.", "isImportant": false, "isOpen": true, "matchKeys": [ "711742418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBM Notes", "isImportant": false, "isOpen": true, "matchKeys": [ "728788645" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Barracuda", "isImportant": false, "isOpen": true, "matchKeys": [ "1436966696" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ServiceNow", "isImportant": false, "isOpen": true, "matchKeys": [ "86919334" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Openfire Admin Console", "isImportant": false, "isOpen": true, "matchKeys": [ "1211608009" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HP iLO", "isImportant": false, "isOpen": true, "matchKeys": [ "2059618623" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sunny WebBox", "isImportant": false, "isOpen": true, "matchKeys": [ "1975413433" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZyXEL", "isImportant": false, "isOpen": true, "matchKeys": [ "943925975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei", "isImportant": false, "isOpen": true, "matchKeys": [ "281559989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tenda Web Master", "isImportant": false, "isOpen": true, "matchKeys": [ "-2145085239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Prometheus Time Series Collection and Processing Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-1399433489" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "wdCP 云主机面板", "isImportant": false, "isOpen": true, "matchKeys": [ "1786752597" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Domoticz (Home Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "90680708" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tableau", "isImportant": false, "isOpen": true, "matchKeys": [ "-1441956789" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "openWRT Luci", "isImportant": false, "isOpen": true, "matchKeys": [ "-675839242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti – AirOS", "isImportant": false, "isOpen": true, "matchKeys": [ "1020814938" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MDaemon Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-766957661" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teltonika", "isImportant": false, "isOpen": true, "matchKeys": [ "119741608" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Entrolink", "isImportant": false, "isOpen": true, "matchKeys": [ "1973665246" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WindRiver-WebServer", "isImportant": false, "isOpen": true, "matchKeys": [ "74935566" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microhard Systems", "isImportant": false, "isOpen": true, "matchKeys": [ "-1723752240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Skype", "isImportant": false, "isOpen": true, "matchKeys": [ "-1807411396" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teltonika", "isImportant": false, "isOpen": true, "matchKeys": [ "-1612496354" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Eltex (Router)", "isImportant": false, "isOpen": true, "matchKeys": [ "1877797890" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "bintec elmeg", "isImportant": false, "isOpen": true, "matchKeys": [ "-375623619" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SyncThru Web Service (Printers)", "isImportant": false, "isOpen": true, "matchKeys": [ "1483097076" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "BoaServer", "isImportant": false, "isOpen": true, "matchKeys": [ "1169183049" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Securepoint", "isImportant": false, "isOpen": true, "matchKeys": [ "1051648103" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Moodle", "isImportant": false, "isOpen": true, "matchKeys": [ "-438482901" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RADIX", "isImportant": false, "isOpen": true, "matchKeys": [ "-1492966240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CradlePoint Technology (Router)", "isImportant": false, "isOpen": true, "matchKeys": [ "1466912879" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "-167656799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Blackboard", "isImportant": false, "isOpen": true, "matchKeys": [ "-1593651747" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jupyter Notebook", "isImportant": false, "isOpen": true, "matchKeys": [ "-895963602" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HostMonster - Web hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "-972810761" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1703788174" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Rocket Chat", "isImportant": false, "isOpen": true, "matchKeys": [ "225632504" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "mofinetwork", "isImportant": false, "isOpen": true, "matchKeys": [ "-1702393021" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zabbix", "isImportant": false, "isOpen": true, "matchKeys": [ "892542951" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TOTOLINK (network)", "isImportant": false, "isOpen": true, "matchKeys": [ "547474373" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ossia (Provision SR) | Webcam/IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "-374235895" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1544230796" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "517158172" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jeedom (home automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "462223993" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JBoss Application Server 7", "isImportant": false, "isOpen": true, "matchKeys": [ "937999361" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Niagara Web Server / Tridium", "isImportant": false, "isOpen": true, "matchKeys": [ "1991562061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Solarwinds Serv-U FTP Server", "isImportant": false, "isOpen": true, "matchKeys": [ "812385209" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Aruba (Virtual Controller)", "isImportant": false, "isOpen": true, "matchKeys": [ "1142227528" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dell", "isImportant": false, "isOpen": true, "matchKeys": [ "-1153950306" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RemObjects SDK / Remoting SDK for .NET HTTP Server Microsoft", "isImportant": false, "isOpen": true, "matchKeys": [ "72005642" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zyxel ZyWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "-484708885" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VisualSVN Server", "isImportant": false, "isOpen": true, "matchKeys": [ "706602230" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jboss", "isImportant": false, "isOpen": true, "matchKeys": [ "-656811182" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "STARFACE VoIP Software", "isImportant": false, "isOpen": true, "matchKeys": [ "-332324409" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netis (network devices)", "isImportant": false, "isOpen": true, "matchKeys": [ "-594256627" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WHM", "isImportant": false, "isOpen": true, "matchKeys": [ "-649378830" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tandberg", "isImportant": false, "isOpen": true, "matchKeys": [ "97604680" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ghost (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015932800" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Avtech IP Surveillance (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-194439630" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Liferay Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "129457226" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-771764544" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Odoo", "isImportant": false, "isOpen": true, "matchKeys": [ "-617743584" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Polycom", "isImportant": false, "isOpen": true, "matchKeys": [ "77044418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cake PHP", "isImportant": false, "isOpen": true, "matchKeys": [ "980692677" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Exacq", "isImportant": false, "isOpen": true, "matchKeys": [ "476213314" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CheckPoint", "isImportant": false, "isOpen": true, "matchKeys": [ "794809961" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti UNMS", "isImportant": false, "isOpen": true, "matchKeys": [ "1157789622" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1244636413" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WorldClient for Mdaemon", "isImportant": false, "isOpen": true, "matchKeys": [ "1985721423" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netport Software (DSL)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1124868062" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "f5 Big IP", "isImportant": false, "isOpen": true, "matchKeys": [ "-335242539" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mailcow", "isImportant": false, "isOpen": true, "matchKeys": [ "2146763496" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "QNAP NAS Virtualization Station", "isImportant": false, "isOpen": true, "matchKeys": [ "-1041180225" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netgear", "isImportant": false, "isOpen": true, "matchKeys": [ "-1319025408" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gogs", "isImportant": false, "isOpen": true, "matchKeys": [ "917966895" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Trendnet IP camera", "isImportant": false, "isOpen": true, "matchKeys": [ "512590457" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Asustor", "isImportant": false, "isOpen": true, "matchKeys": [ "1678170702" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua", "isImportant": false, "isOpen": true, "matchKeys": [ "-1466785234" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Discuz!", "isImportant": false, "isOpen": true, "matchKeys": [ "-505448917" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Discuz!", "isImportant": false, "isOpen": true, "matchKeys": [ "Discuz!", "Comsenz", "cache/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "wdCP cloud host management system", "isImportant": false, "isOpen": true, "matchKeys": [ "255892555" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "1627330242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SmarterMail", "isImportant": false, "isOpen": true, "matchKeys": [ "-1935525788" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Seafile", "isImportant": false, "isOpen": true, "matchKeys": [ "-12700016" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "bintec elmeg", "isImportant": false, "isOpen": true, "matchKeys": [ "1770799630" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NETGEAR ReadyNAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-137295400" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iPECS", "isImportant": false, "isOpen": true, "matchKeys": [ "-195508437" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "bet365", "isImportant": false, "isOpen": true, "matchKeys": [ "-2116540786" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Reolink", "isImportant": false, "isOpen": true, "matchKeys": [ "-38705358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "idera", "isImportant": false, "isOpen": true, "matchKeys": [ "-450254253" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Proofpoint", "isImportant": false, "isOpen": true, "matchKeys": [ "-1630354993" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Connect WebMail", "isImportant": false, "isOpen": true, "matchKeys": [ "-1678298769" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WorldClient for Mdaemon", "isImportant": false, "isOpen": true, "matchKeys": [ "-35107086" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Realtek", "isImportant": false, "isOpen": true, "matchKeys": [ "2055322029" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 Ruijie Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-692947551" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Askey Cable Modem", "isImportant": false, "isOpen": true, "matchKeys": [ "-1710631084" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Askey Cable Modem", "isImportant": false, "isOpen": true, "matchKeys": [ "89321398" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JAWS Web Server (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "90066852" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JAWS Web Server (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "768231242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Homegrown Website Hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "-421986013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor / Thomson Speedtouch (Network / ADSL)", "isImportant": false, "isOpen": true, "matchKeys": [ "156312019" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DVR (Korean)", "isImportant": false, "isOpen": true, "matchKeys": [ "-560297467" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "-1950415971" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TP-LINK (Network Device)", "isImportant": false, "isOpen": true, "matchKeys": [ "1842351293" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Salesforce", "isImportant": false, "isOpen": true, "matchKeys": [ "1433417005" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Haus", "isImportant": false, "isOpen": true, "matchKeys": [ "-632070065" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Untangle", "isImportant": false, "isOpen": true, "matchKeys": [ "1103599349" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shenzhen coship electronics co.", "isImportant": false, "isOpen": true, "matchKeys": [ "224536051" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1038500535" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-355305208" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-267431135" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-759754862" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-1200737715" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "75230260" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "1668183286" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "283740897" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Icecast Streaming Media Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1424295654" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NEC WebPro", "isImportant": false, "isOpen": true, "matchKeys": [ "1922032523" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vivotek (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1654229048" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microsoft IIS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1414475558" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Univention Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "-1697334194" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Portainer (Docker Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1424036600" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NOS Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-831826827" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tongda", "isImportant": false, "isOpen": true, "matchKeys": [ "-759108386" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CrushFTP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1022206565" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Endian Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-1225484776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Control Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-631002664" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ferozo Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "2072198544" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Control Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-466504476" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cafe24 (Korea)", "isImportant": false, "isOpen": true, "matchKeys": [ "1251810433" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mautic (Open Source Marketing Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "1273982002" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NETIASPOT (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-978656757" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Multilaser", "isImportant": false, "isOpen": true, "matchKeys": [ "916642917" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Canvas LMS (Learning Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "575613323" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBM Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1726027799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ADB Broadband S.p.A. (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-587741716" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ARRIS (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-360566773" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-884776764" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WAMPSERVER", "isImportant": false, "isOpen": true, "matchKeys": [ "929825723" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Seagate Technology (NAS)", "isImportant": false, "isOpen": true, "matchKeys": [ "240136437" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "UPC Ceska Republica (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1911253822" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Flussonic (Video Streaming)", "isImportant": false, "isOpen": true, "matchKeys": [ "-393788031" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "366524387" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WAMPSERVER", "isImportant": false, "isOpen": true, "matchKeys": [ "443944613" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metabase", "isImportant": false, "isOpen": true, "matchKeys": [ "1953726032" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2031183903" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "545827989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "967636089" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "362091310" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "2086228042" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CommuniGate", "isImportant": false, "isOpen": true, "matchKeys": [ "-1588746893" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZTE (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1427976651" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "InfiNet Wireless | WANFleX (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1648531157" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mersive Solstice", "isImportant": false, "isOpen": true, "matchKeys": [ "938616453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Université Toulouse 1 Capitole", "isImportant": false, "isOpen": true, "matchKeys": [ "1632780968" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Digium (Switchvox)", "isImportant": false, "isOpen": true, "matchKeys": [ "2068154487" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PowerMTA monitoring", "isImportant": false, "isOpen": true, "matchKeys": [ "-1788112745" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SmartLAN/G", "isImportant": false, "isOpen": true, "matchKeys": [ "-644617577" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Checkpoint (Gaia)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1822098181" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "УТМ (Federal Service for Alcohol Market Regulation | Russia)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1131689409" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MailWizz", "isImportant": false, "isOpen": true, "matchKeys": [ "2127152956" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "1064742722" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015107330" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "openmediavault (NAS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-693082538" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "openWRT Luci", "isImportant": false, "isOpen": true, "matchKeys": [ "1941381095" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Honeywell", "isImportant": false, "isOpen": true, "matchKeys": [ "903086190" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "BOMGAR Support Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "829321644" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nuxt JS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1442789563" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RoundCube Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-2140379067" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1897829998" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netgear (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1047213685" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SonarQube", "isImportant": false, "isOpen": true, "matchKeys": [ "1485257654" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lupus Electronics XT", "isImportant": false, "isOpen": true, "matchKeys": [ "-299324825" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vanderbilt SPC", "isImportant": false, "isOpen": true, "matchKeys": [ "-1162730477" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VZPP Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-1268095485" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Baidu", "isImportant": false, "isOpen": true, "matchKeys": [ "1118684072" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ownCloud", "isImportant": false, "isOpen": true, "matchKeys": [ "-1616115760" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sentora", "isImportant": false, "isOpen": true, "matchKeys": [ "-2054889066" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Alfresco", "isImportant": false, "isOpen": true, "matchKeys": [ "1333537166" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Digital Keystone (DK)", "isImportant": false, "isOpen": true, "matchKeys": [ "-373674173" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WISPR (Airlan)", "isImportant": false, "isOpen": true, "matchKeys": [ "-106646451" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Synology VPN Plus", "isImportant": false, "isOpen": true, "matchKeys": [ "1235070469" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sentry", "isImportant": false, "isOpen": true, "matchKeys": [ "2063428236" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WatchGuard", "isImportant": false, "isOpen": true, "matchKeys": [ "15831193" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Web Client Pro", "isImportant": false, "isOpen": true, "matchKeys": [ "-956471263" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tecvoz", "isImportant": false, "isOpen": true, "matchKeys": [ "-1452159623" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MDaemon Remote Administration", "isImportant": false, "isOpen": true, "matchKeys": [ "99432374" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Paradox IP Module", "isImportant": false, "isOpen": true, "matchKeys": [ "727253975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DokuWiki", "isImportant": false, "isOpen": true, "matchKeys": [ "-630493013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sails", "isImportant": false, "isOpen": true, "matchKeys": [ "552597979" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FastPanel Hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "774252049" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "C-Lodop", "isImportant": false, "isOpen": true, "matchKeys": [ "-329747115" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jamf Pro Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1262005940" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "StruxureWare (Schneider Electric)", "isImportant": false, "isOpen": true, "matchKeys": [ "979634648" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Axcient Replibit Management Server", "isImportant": false, "isOpen": true, "matchKeys": [ "475379699" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Twonky Server (Media Streaming)", "isImportant": false, "isOpen": true, "matchKeys": [ "-878891718" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Windows Azure", "isImportant": false, "isOpen": true, "matchKeys": [ "-2125083197" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ISP Manager (Web Hosting Panel)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1151675028" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JupyterHub", "isImportant": false, "isOpen": true, "matchKeys": [ "1248917303" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CenturyLink Modem GUI Login (eg: Technicolor)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1908556829" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tecvoz", "isImportant": false, "isOpen": true, "matchKeys": [ "1059329877" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OPNsense", "isImportant": false, "isOpen": true, "matchKeys": [ "-1148190371" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ligowave (network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1467395679" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Rumpus", "isImportant": false, "isOpen": true, "matchKeys": [ "-1528414776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spiceworks (panel)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2117390767" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TeamCity", "isImportant": false, "isOpen": true, "matchKeys": [ "-1944119648" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "INSTAR Full-HD IP-Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "-1748763891" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GPON Home Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "251106693" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Alienvault", "isImportant": false, "isOpen": true, "matchKeys": [ "-1779611449" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Arbor Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-1745552996" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Accrisoft", "isImportant": false, "isOpen": true, "matchKeys": [ "-1275148624" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Yasni", "isImportant": false, "isOpen": true, "matchKeys": [ "-178685903" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Slack", "isImportant": false, "isOpen": true, "matchKeys": [ "-43161126" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "innovaphone", "isImportant": false, "isOpen": true, "matchKeys": [ "671221099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shinobi (CCTV)", "isImportant": false, "isOpen": true, "matchKeys": [ "-10974981" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TP-LINK (Network Device)", "isImportant": false, "isOpen": true, "matchKeys": [ "1274078387" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Siemens OZW772", "isImportant": false, "isOpen": true, "matchKeys": [ "-336242473" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lantronix (Spider)", "isImportant": false, "isOpen": true, "matchKeys": [ "882208493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ClaimTime (Ramsell Public Health & Safety)", "isImportant": false, "isOpen": true, "matchKeys": [ "-687783882" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Surfilter SSL VPN Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "-590892202" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kyocera (Printer)", "isImportant": false, "isOpen": true, "matchKeys": [ "-50306417" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lucee!", "isImportant": false, "isOpen": true, "matchKeys": [ "784872924" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ricoh", "isImportant": false, "isOpen": true, "matchKeys": [ "1135165421" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Handle Proxy", "isImportant": false, "isOpen": true, "matchKeys": [ "926501571" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "579239725" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-689902428" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-600508822" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "656868270" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-2056503929" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1656695885" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "331870709" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "1241049726" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "998138196" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "322531336" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-401934945" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-613216179" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Chef Automate", "isImportant": false, "isOpen": true, "matchKeys": [ "-276759139" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gargoyle Router Management Utility", "isImportant": false, "isOpen": true, "matchKeys": [ "1862132268" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KeepItSafe Management Console", "isImportant": false, "isOpen": true, "matchKeys": [ "-1738727418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Entronix Energy Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-368490461" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenProject", "isImportant": false, "isOpen": true, "matchKeys": [ "1836828108" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Unified Management Console (Polycom)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1775553655" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Moxapass ioLogik Remote Ethernet I/O Server ", "isImportant": false, "isOpen": true, "matchKeys": [ "381100274" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HFS (HTTP File Server)", "isImportant": false, "isOpen": true, "matchKeys": [ "2124459909" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HFS (HTTP File Server)", "isImportant": false, "isOpen": true, "matchKeys": [ "731374291" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Traccar GPS tracking", "isImportant": false, "isOpen": true, "matchKeys": [ "-335153896" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IW", "isImportant": false, "isOpen": true, "matchKeys": [ "896412703" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Wordpress Under Construction Icon", "isImportant": false, "isOpen": true, "matchKeys": [ "191654058" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Combivox", "isImportant": false, "isOpen": true, "matchKeys": [ "-342262483" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NetComWireless (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "5542029" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Elastic (Database)", "isImportant": false, "isOpen": true, "matchKeys": [ "1552860581" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "1174841451" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "truVision (NVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1093172228" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SpamExperts", "isImportant": false, "isOpen": true, "matchKeys": [ "-1688698891" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sonatype Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-1546574541" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iDirect Canada (Network Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "-256828986" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenERP (now known as Odoo)", "isImportant": false, "isOpen": true, "matchKeys": [ "1966198264" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PKP (OpenJournalSystems) Public Knowledge Project", "isImportant": false, "isOpen": true, "matchKeys": [ "2099342476" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LiquidFiles", "isImportant": false, "isOpen": true, "matchKeys": [ "541087742" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZyXEL (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-882760066" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Universal Devices (UD)", "isImportant": false, "isOpen": true, "matchKeys": [ "16202868" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "987967490" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitea", "isImportant": false, "isOpen": true, "matchKeys": [ "1969970750" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TC-Group", "isImportant": false, "isOpen": true, "matchKeys": [ "-1734573358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Deluge Web UI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1589842876" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AMH 云主机面板", "isImportant": false, "isOpen": true, "matchKeys": [ "1822002133" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OTRS (Open Ticket Request System)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2006308185" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bosch Security Systems (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1702769256" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Node-RED", "isImportant": false, "isOpen": true, "matchKeys": [ "321591353" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "motionEye (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-923693877" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Saia Burgess Controls – PCD", "isImportant": false, "isOpen": true, "matchKeys": [ "-1547576879" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Arcadyan o2 box (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1479202414" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1081719753" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Abilis (Network/Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "-166151761" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ghost (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1231681737" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "321909464" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "-1153873472" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "1095915848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "788771792" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "-1863663974" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KeyHelp (Keyweb AG)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1267819858" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KeyHelp (Keyweb AG)", "isImportant": false, "isOpen": true, "matchKeys": [ "726817668" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GLPI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1474875778" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netcom Technology", "isImportant": false, "isOpen": true, "matchKeys": [ "5471989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CradlePoint", "isImportant": false, "isOpen": true, "matchKeys": [ "-1457536113" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MyASP", "isImportant": false, "isOpen": true, "matchKeys": [ "-736276076" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1343070146" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lenel", "isImportant": false, "isOpen": true, "matchKeys": [ "538585915" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OkoFEN Pellematic", "isImportant": false, "isOpen": true, "matchKeys": [ "-625364318" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SimpleHelp (Remote Support)", "isImportant": false, "isOpen": true, "matchKeys": [ "1117165781" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GraphQL", "isImportant": false, "isOpen": true, "matchKeys": [ "-1067420240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DNN (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1465479343" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "1232159009" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "1382324298" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "-1498185948" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ISPConfig", "isImportant": false, "isOpen": true, "matchKeys": [ "483383992" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microsoft Outlook", "isImportant": false, "isOpen": true, "matchKeys": [ "-1249852061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hikvision IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "999357577" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "492290497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AfterLogicWebMail系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-194791768" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "B2Bbuilder", "isImportant": false, "isOpen": true, "matchKeys": [ "492941040" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服下一代防火墙管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "123821839" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服WEB防篡改管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "WEB防篡改", "cgi-bin/tamper_admin.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "YApi 可视化接口管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "YApi", "id=\"yapi\"", "prd", "可视化接口管理平台" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JumpServer 堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "-1162630024" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WeiPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "weiphp.css", "weiphp", "Public/static" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nagios XI", "isImportant": false, "isOpen": true, "matchKeys": [ "Nagios XI", "nagiosxi", "Nagios" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ShowDoc", "isImportant": false, "isOpen": true, "matchKeys": [ "1969934080" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "群晖 NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "DiskStation", "webman/modules", "NAS" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "协达OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1850889691" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "山石网科 防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "Hillstone", "licenseAggrement", "GLOBAL_CONFIG.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "360天堤新一代智慧防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "360天堤", "360", "360防火墙" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "360网神防火墙系统", "isImportant": false, "isOpen": true, "matchKeys": [ "resources/image/logo_header.png", "360", "网神防火墙系统" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网神SecGate 3600防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "网神SecGate", "3600防火墙", "css/lsec/login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "蓝盾防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "蓝盾", "Bluedon", "default/js/act/login.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LanProxy", "isImportant": false, "isOpen": true, "matchKeys": [ "LanProxy", "password", "lanproxy-config" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ManageEngine ADManager Plus", "isImportant": false, "isOpen": true, "matchKeys": [ "ADManager", "Hashtable.js", "ManageEngine" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpshe 商城系统", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by phpshe", "include/js/global.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "骑士 74CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "74cms", "qscms.root", "index.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache2 Debian 默认页", "isImportant": false, "isOpen": true, "matchKeys": [ "Apache2 Debian Default", "It works!", "Debian Logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Grafana", "isImportant": false, "isOpen": true, "matchKeys": [ "Grafana", "login", "grafana-app" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Canal Admin", "isImportant": false, "isOpen": true, "matchKeys": [ "Canal Admin", "js/app" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBOS酷办公OA系统", "isImportant": false, "isOpen": true, "matchKeys": [ "IBOS", "login-panel", "loginsubmit" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "若依(RuoYi)-管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "ry-ui", "username", "rememberme" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中新金盾信息安全管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "中新金盾信息安全管理系统", "login", "useusbkey" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中成科信 综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "1632964065" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware vCenter", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware", "ID_VISDK", "download" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AWS S3 Bucket", "isImportant": false, "isOpen": true, "matchKeys": [ "InvalidBucketName", "aliyuncs" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网心云设备", "isImportant": false, "isOpen": true, "matchKeys": [ "网心云设备", "favicon.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服 NGAF", "isImportant": false, "isOpen": true, "matchKeys": [ "SANGFOR", "NGAF", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBM HTTP Server", "isImportant": false, "isOpen": true, "matchKeys": [ "IBM HTTP Server", "Support" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "nps", "isImportant": false, "isOpen": true, "matchKeys": [ "nps", "ehang", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "Webmin", "session_login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "群晖 DiskStation", "isImportant": false, "isOpen": true, "matchKeys": [ "DiskStation", "文件服务器", "modules" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "SSLVPN", "rjweb", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "蜂网企业流控云路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "ifw8", "企业级流控云路由器", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网御 安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "安全系统", "网御星云", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Citrix Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Citrix Access Gateway", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服安全感知平台", "isImportant": false, "isOpen": true, "matchKeys": [ "安全感知平台", "login.js", "apps" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache2 Ubuntu 默认页", "isImportant": false, "isOpen": true, "matchKeys": [ "Apache2 Ubuntu Default Page", "ubuntu-logo.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "帆软报表-FineReport", "isImportant": false, "isOpen": true, "matchKeys": [ "ReportServer", "=fs" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CAS 单点登录", "isImportant": false, "isOpen": true, "matchKeys": [ "Central Authentication Service", "cas/login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视 流媒体管理服务器", "isImportant": false, "isOpen": true, "matchKeys": [ "流媒体管理服务器", "MSHTML", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "noVNC 远程访问", "isImportant": false, "isOpen": true, "matchKeys": [ "noVNC", "no", "host" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MessageSolution Enterprise Email Archiving (EEA)", "isImportant": false, "isOpen": true, "matchKeys": [ "MessageSolution", "index.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "阿里巴巴otter manager", "isImportant": false, "isOpen": true, "matchKeys": [ "Otter Manager", "channelList" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware vRealize Operations Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "vRealize", "VMware", "Identity Manager" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C-ER3200 路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "ER3200", "home.asp", "h3c.com" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安恒云堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "DBAPPSecurity", "安恒云堡垒机" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安恒明御安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "明御安全网关" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Citrix 虚拟桌面", "isImportant": false, "isOpen": true, "matchKeys": [ "-1272756243" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SeaweedFS", "isImportant": false, "isOpen": true, "matchKeys": [ "1210969935" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FreeRDP 远程RDP工具", "isImportant": false, "isOpen": true, "matchKeys": [ "-2052468252" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache ActiveMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "1766699363" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache-Skywalking", "isImportant": false, "isOpen": true, "matchKeys": [ "1929532064" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Default page", "isImportant": false, "isOpen": true, "matchKeys": [ "-1050786453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk 面板", "isImportant": false, "isOpen": true, "matchKeys": [ "-134375033" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DzzOffice 开源办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1961736892" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网康科技网关/防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "5471989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ThinkPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "ThinkPHP" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SuperMap iServer Web Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "1740191553" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "协众OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1466673461" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jellyfin", "isImportant": false, "isOpen": true, "matchKeys": [ "-2069226242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "孚盟云 CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "1533124028" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "协众OA", "isImportant": false, "isOpen": true, "matchKeys": [ "scripts/cnoa.extra.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FastAdmin 框架", "isImportant": false, "isOpen": true, "matchKeys": [ "assets/img/favicon.ico", "bootstrap.min.css", "navbar-toggle" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FastAdmin 框架", "isImportant": false, "isOpen": true, "matchKeys": [ "ajax\\/upload", "assets/img/favicon.ico", "fastadmin" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "imo云办公室", "isImportant": false, "isOpen": true, "matchKeys": [ "永中文档在线预览DCS", "www.yozodcs.com" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "帆软数据决策系统", "isImportant": false, "isOpen": true, "matchKeys": [ ">数据决策系统", "ReportServer?op" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金山TimeOn云杀毒", "isImportant": false, "isOpen": true, "matchKeys": [ "TimeOn", "iepngfix/iepngfix_tilebg.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金山终端安全", "isImportant": false, "isOpen": true, "matchKeys": [ "终端安全系统", "setup/kanclient.exe", "iepngfix/iepngfix_tilebg.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "YzmCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "YzmCMS", "yzm-common.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "微擎 - 公众平台自助引擎", "isImportant": false, "isOpen": true, "matchKeys": [ "微擎 - 公众平台自助引擎", "www.w7.cc", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jspxcms", "isImportant": false, "isOpen": true, "matchKeys": [ "- Powered by Jspxcms", "template/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WordPress", "isImportant": false, "isOpen": true, "matchKeys": [ "wp-admin", "wp-content/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WordPress", "isImportant": false, "isOpen": true, "matchKeys": [ "wp-", "wp-content/themes/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金合OA", "isImportant": false, "isOpen": true, "matchKeys": [ "Jhsoft.Web.login", "PassWord.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "好视通视频会议系统", "isImportant": false, "isOpen": true, "matchKeys": [ "用户登录", "resources/commonImage/favicon.ico", "login/createQRCode.do" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LANMP 默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>LANMP", "<strong>恭喜", "wdlinux.cn", "本页可删除" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CentOS 默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>Welcome to CentOS", "img/centos-logo.png", "centos.org" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百度 ueditor编辑器", "isImportant": false, "isOpen": true, "matchKeys": [ "ueditor.all.js", "UE.getEditor" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpinfo", "isImportant": false, "isOpen": true, "matchKeys": [ "phpinfo", "Virtual Directory Support" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kyan 监控设备", "isImportant": false, "isOpen": true, "matchKeys": [ "login_files", "platform", "欢迎登陆系统" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hue 大数据框架", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to Hue", "Query. Explore.", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "亿邮邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "eYou", "q=login", "tpl/user" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "亿邮邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "eYou", "q=help", "tpl/user" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "XAMPP 默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to XAMPP" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网神下一代极速防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "网神信息技术", "login", "防火墙" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中腾OA", "isImportant": false, "isOpen": true, "matchKeys": [ "systemAction", "zt_webframe", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "新软科技-极通EWEBS", "isImportant": false, "isOpen": true, "matchKeys": [ "N-soft", "ClientDownload.xgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Igenus邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "iGENUS", "login.php", "language" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "图创图书馆集群管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "interlib/common/", "self.location.href" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JEECMS", "isImportant": false, "isOpen": true, "matchKeys": [ "/r/cms/www", "shortcut icon" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Hadoop", "isImportant": false, "isOpen": true, "matchKeys": [ "static/hadoop-st.png", "Cluster" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TamronOS IPTV系统", "isImportant": false, "isOpen": true, "matchKeys": [ "TamronOS", "loginbox", "tamronos.com" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 RG-EW1200G", "isImportant": false, "isOpen": true, "matchKeys": [ "锐捷", "/static/img/title.ico", "/js/app" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C Web网管", "isImportant": false, "isOpen": true, "matchKeys": [ "webui", "Web网管用户登录", "china_logo.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C ER6300G2", "isImportant": false, "isOpen": true, "matchKeys": [ "ER6300G2", "h3c.com", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C ER3100", "isImportant": false, "isOpen": true, "matchKeys": [ "ER3100", "h3c.com", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SDCMS神盾内容管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "sdcms", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "SSLVPN", "rjsslvpn_encookie", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天迈科技网络视频监控系统", "isImportant": false, "isOpen": true, "matchKeys": [ "jsessionid", "天迈科技", "网络视频监控系统" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WIFISKY-7层流控路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "WIFISKY", "adminusr", "深圳市领空技术" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "后台", "isImportant": false, "isOpen": true, "matchKeys": [ "后台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MinIO", "isImportant": false, "isOpen": true, "matchKeys": [ "MinIO Browser" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TVT 公司产品", "isImportant": false, "isOpen": true, "matchKeys": [ "492290497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "资产灯塔系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1708240621" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 NBR 路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "738520282" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "二级域名分发系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-2055778861" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "景云网络防病毒系统", "isImportant": false, "isOpen": true, "matchKeys": [ "styles/images/logo.png", "login_form", "防病毒" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VA 虚拟应用管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "Res/Images/logo_va.png", "panel_login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GitBook", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"GitBook", "gitbook" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Outlook", "isImportant": false, "isOpen": true, "matchKeys": [ "owa/auth", "Outlook", "logonDiv" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视联网网关", "isImportant": false, "isOpen": true, "matchKeys": [ "独立运行(无平台)", "login_form" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "阿姆瑞特智能DNS", "isImportant": false, "isOpen": true, "matchKeys": [ "DNS", "main.php?mod=member", "DNS_" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PHPOA 协同办公软件", "isImportant": false, "isOpen": true, "matchKeys": [ "login.php", "提示信息", "showMsg" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "明致 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1591287747" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JBoss EAP", "isImportant": false, "isOpen": true, "matchKeys": [ "title>EAP", "eap.css", "JBoss" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "若依", "isImportant": false, "isOpen": true, "matchKeys": [ "ruoyi", "若依", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "全息AI弱电网络综合运维平台", "isImportant": false, "isOpen": true, "matchKeys": [ "全息AI", "g_is_hk", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "易瑞授权访问系统", "isImportant": false, "isOpen": true, "matchKeys": [ "易瑞授权访问系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "E-Tiller", "isImportant": false, "isOpen": true, "matchKeys": [ "北京勤云", "reader/view_abstract.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FangMail", "isImportant": false, "isOpen": true, "matchKeys": [ "fangmail/default/css/em_css.css", "fangmail/cgi/index.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tencent-Exmail", "isImportant": false, "isOpen": true, "matchKeys": [ "ssl_edition=mail.qq.com" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tencent-Exmail", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/getinvestigate?flowid=", "cgi-bin/bizmail_portal" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jira", "isImportant": false, "isOpen": true, "matchKeys": [ "jira.webresources", "com.atlassian.plugins" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FishEye", "isImportant": false, "isOpen": true, "matchKeys": [ "FESESSIONID=" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天玥网络安全审计系统", "isImportant": false, "isOpen": true, "matchKeys": [ "天玥", "venustech", "func_login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金航网上阅卷系统", "isImportant": false, "isOpen": true, "matchKeys": [ "金航", "jsyj", "衡水金航" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科脉·蛙笑在线商业管理软件", "isImportant": false, "isOpen": true, "matchKeys": [ "Kemai", "Login.aspx", "科脉" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "朗拓健康医院管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "static/mq/yaoxun_pbm_im.js", "js/app." ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "品德科技医学在线考试系统", "isImportant": false, "isOpen": true, "matchKeys": [ "考试系统", "品德", "login.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SPON IP网络对讲广播系统", "isImportant": false, "isOpen": true, "matchKeys": [ "spon_base64.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NVS3000综合视频监控平台", "isImportant": false, "isOpen": true, "matchKeys": [ "视频监控", "NVS3000综合", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "银达汇智 智慧综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "miniui", "Help ?", "main.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "云信通短信运营管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "短信", "Simpla", "chklogin.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AceNet 驰崴防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "Technology", "login_commit.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teleport 堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "TELEPORT", "teleport.js", "login-account" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Yii框架", "isImportant": false, "isOpen": true, "matchKeys": [ "yii.js", "yii." ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WPS 部署可视化平台", "isImportant": false, "isOpen": true, "matchKeys": [ "WPS 部署可视化平台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpstydy Windows", "isImportant": false, "isOpen": true, "matchKeys": [ "phpstudy for windows" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "epoint政务服务系统", "isImportant": false, "isOpen": true, "matchKeys": [ "epoint-web-zwdt" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "奥联通讯管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-1356973161" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百傲瑞达", "isImportant": false, "isOpen": true, "matchKeys": [ "-1169502834" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天智智慧医院综合质量监管平台", "isImportant": false, "isOpen": true, "matchKeys": [ "1986460035" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Minio Browser", "isImportant": false, "isOpen": true, "matchKeys": [ "Minio Browser" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "管理后台登录", "isImportant": false, "isOpen": true, "matchKeys": [ "管理员", "登录" ], "location": "title", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "360天擎", "isImportant": false, "isOpen": true, "matchKeys": [ "360天擎" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "博华网龙信息安全一体机", "isImportant": false, "isOpen": true, "matchKeys": [ "博华网龙信息安全一体机" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LNMP一键安装包默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "LNMP一键安装包" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HDWiki", "isImportant": false, "isOpen": true, "matchKeys": [ "hd_sid=" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深圳锐明行驶记录仪", "isImportant": false, "isOpen": true, "matchKeys": [ "登录您的MDVR" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "drupal" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei user-login", "isImportant": false, "isOpen": true, "matchKeys": [ "Huawei Auth-Http" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Prometheus Server", "isImportant": false, "isOpen": true, "matchKeys": [ "Prometheus Time Series Collection and Processing Server" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kubernetes", "isImportant": false, "isOpen": true, "matchKeys": [ "Kubernetes Dashboard" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "easypanel", "isImportant": false, "isOpen": true, "matchKeys": [ "easypanel", "vhost", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware", "ui-page", "portal/favicon" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware Horizon" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迪普VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "dptech_ssl", "sslvpn", "loginAPI.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenShift Web Console", "isImportant": false, "isOpen": true, "matchKeys": [ "OpenShift Web Console" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "好视通", "isImportant": false, "isOpen": true, "matchKeys": [ "fsmeeting", "loginCheck.do", "app.result" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "碧海云盒", "isImportant": false, "isOpen": true, "matchKeys": [ "碧海云盒", "mt_login", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PhpWind", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"phpwind" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CmsEasy", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"CmsEasy" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "EmpireCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by EmpireCMS" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Emlog", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"emlog\"" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ECShop", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"ECSHOP" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "大汉版通-Hanweb-system", "isImportant": false, "isOpen": true, "matchKeys": [ "大汉版通", "大汉网络", "hanweb.com' style='display:none'" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ESPCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "powered by espcms" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KesionCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "ks_inc/common.js", "KesionCMS" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "东营金石软件", "isImportant": false, "isOpen": true, "matchKeys": [ "aspNetHidden", "loginselect", "txtLoginName" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "皓峰防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "皓峰防火墙系统登录" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CMSTop", "isImportant": false, "isOpen": true, "matchKeys": [ "css/cmstop-common.css", "js/cmstop-common.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华域Reporter", "isImportant": false, "isOpen": true, "matchKeys": [ "reporter", "login", "action.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "智邦国际-企业管理软件", "isImportant": false, "isOpen": true, "matchKeys": [ "index2.asp", "update/exec.asp", "images/full.gif" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "电信网关配置管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "<TITLE>系统登录", "login.php", "img/login_bg3.png", "360.cn" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "方配在线考试系统(FPExam)", "isImportant": false, "isOpen": true, "matchKeys": [ "exam/logo/favicon.ico", "fangpage" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spring Eureka", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>Eureka", "eureka" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迪普 SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "DPSSLVPN", "SSL VPN Service", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Grafana", "isImportant": false, "isOpen": true, "matchKeys": [ "Grafana" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百卓byzoro-安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "北京百卓", "PatrolFlow", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ENESYS", "isImportant": false, "isOpen": true, "matchKeys": [ "dwr/interface/WebContextUtil.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KVM_创梦云计算管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "KVM_创梦云计算管理系统" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "任我行-管家婆分销ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "分销ERP", "txt_DbName", "DownloadDriver.asp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "小黄豆CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "xhdcrm", "JS/XHD.js", "login.check.xhd" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nnetgear 路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "NETGEAR" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metabase", "isImportant": false, "isOpen": true, "matchKeys": [ "Metabase" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "4images", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by 4images", "4homepages" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Finecms", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"FineCMS" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NUUO 摄像头", "isImportant": false, "isOpen": true, "matchKeys": [ "Network Video Recorder Login" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache ShenYu", "isImportant": false, "isOpen": true, "matchKeys": [ "id=\"httpPath", "th:text=\"${domain}" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Solar 网络管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1871496583" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "畅捷CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "-1068428644" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "悟空CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "872805507" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "e-cology 运维管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-384583337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "瑞友天翼-应用虚拟化系统", "isImportant": false, "isOpen": true, "matchKeys": [ "DownLoad.XGI", "realor.cn", "dvLogin" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C SecPath 运维审计系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1776863739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "信呼 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1652488516" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MeterSphere", "isImportant": false, "isOpen": true, "matchKeys": [ "1023469568" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H2 Database Console", "isImportant": false, "isOpen": true, "matchKeys": [ "-525659379" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧林ICP/iP备案系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-556918553" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "飞鱼星路由器/行为管理", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"0.2;", "/home/login.html" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "化视私云CDN直播加速服务器", "isImportant": false, "isOpen": true, "matchKeys": [ "img/dl.gif", "华视美达", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "冰峰网络 iceflow", "isImportant": false, "isOpen": true, "matchKeys": [ "Web 配置中心", "/images/splash.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华夏 ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "jshERP-boot", "platformConfig" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "78 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "/resource/javascript/system/runtime.min.js", "password" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "EnterCRM", "isImportant": false, "isOpen": true, "matchKeys": [ "杭州恩软", "Ent.base.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ITC-CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "/mt_res_v3/js/common/common.js", "CMS" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Panabit-Panalog", "isImportant": false, "isOpen": true, "matchKeys": [ "img/logo.gif", "Maintain", "unamexx", "img/12.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华为AR Web管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "Huawei", "simple/style/default/image/login.png", "simple/view/ossn.html" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "铭飞 MCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "ms.js", "ms.http.js", "plugins" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "向日葵-SunLogin", "isImportant": false, "isOpen": true, "matchKeys": [ "{\"success\":false,\"msg\":\"Verification failure\"}" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GROWATT 系统", "isImportant": false, "isOpen": true, "matchKeys": [ "login", "v3/js/odm/odm.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "下一代防火墙", "锐捷网络" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧林信息安全管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "用户管理登录", "login", "images/zh-CN/login_03.gif" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华为云桌面", "isImportant": false, "isOpen": true, "matchKeys": [ "Desktop@FusionAccess", "/webui/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "齐治堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "fp_download", "login.php", "logo-icon-ico72.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TurboMail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "TurboMail", "mailmain?type=login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安恒数据大脑API网关", "isImportant": false, "isOpen": true, "matchKeys": [ "mssp-fe", "/static/imgs/logo.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "山石网科云数据库审计与防护系统", "isImportant": false, "isOpen": true, "matchKeys": [ "#!/dbSummary", "/lib/colResizable/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "青年软件OA", "isImportant": false, "isOpen": true, "matchKeys": [ "/Content/qrlib/ligerUI/skins/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金山终端安全管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "iepngfix/iepngfix_tilebg.js", "mysqlStat" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "多媒体信息发布系统", "isImportant": false, "isOpen": true, "matchKeys": [ "HowFor Web" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百卓 Smart 多业务安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "writeCustomBgImg.jsp", "baseajax", "LoginLogo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中远麒麟堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "admin.php", "controller=admin_index&action=login" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "移动云&绿盟日志审计系统-log4j", "isImportant": false, "isOpen": true, "matchKeys": [ "/pisces/login/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache APISIX", "isImportant": false, "isOpen": true, "matchKeys": [ "{\"error_msg\":\"404 Route Not Found\"}" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网康科技·互联网控制网关", "isImportant": false, "isOpen": true, "matchKeys": [ "网康科技·互联网控制网关" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "飞思网巡 IT运维系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1622043013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Richmail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "RichMail" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Richmail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "0;url=/webmail/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Richmail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "richmail.config.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "字节数联云桌面系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1142582922" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "智跃HR人力资源管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "images/ZY.LOGO.64.png" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启迪国信 UEM管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "#commonTip", "css/icomoon", "login", "wwLogin" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金万维异速联", "isImportant": false, "isOpen": true, "matchKeys": [ "GNRemote.dll?GNFunction=" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JieLink+智能终端操作平台", "isImportant": false, "isOpen": true, "matchKeys": [ "JieLink<sup>+</sup>" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禾匠点企来客服系统", "isImportant": false, "isOpen": true, "matchKeys": [ "const _scriptUrl", "login_logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iXCache", "isImportant": false, "isOpen": true, "matchKeys": [ "iXCache", "/login/userverify.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "爱信诺开票服务器", "isImportant": false, "isOpen": true, "matchKeys": [ "aisino.kps.console" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "税控服务器管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "sys/login.do", "resources/css/login_yzm.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天擎", "isImportant": false, "isOpen": true, "matchKeys": [ "index/logo", "天擎" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "小鱼易连云视讯管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "font_1957344_lqkodjqdbl.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "小鱼易连云视讯管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "static_source/localcdn/webrtc/web/favicon.ico" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "厦门快普", "isImportant": false, "isOpen": true, "matchKeys": [ "jKPM6", "WebResource.axd" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iDste融合系统支撑平台", "isImportant": false, "isOpen": true, "matchKeys": [ "iDste融合系统支撑平台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "大华安防 DSS", "isImportant": false, "isOpen": true, "matchKeys": [ "User", "" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NSFOCUS 绿盟安全设备", "isImportant": false, "isOpen": true, "matchKeys": [ "NSFOCUS" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迪浪云OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-179985729" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "1323738809" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金睛云华高级威胁检测系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1747722638" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Workspace ONE Access", "isImportant": false, "isOpen": true, "matchKeys": [ "-1250474341" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网防G01", "isImportant": false, "isOpen": true, "matchKeys": [ "-968234332" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitblit", "isImportant": false, "isOpen": true, "matchKeys": [ "gitblt-favicon.png", "gitblit" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C ER8300G2-X", "isImportant": false, "isOpen": true, "matchKeys": [ "H3C", "vld.bmp", "dis_login", "ER8300G2" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷交换机-睿易", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/luci", "#f47f3e" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C/安博通/任子行/OEM系列安全产品", "isImportant": false, "isOpen": true, "matchKeys": [ "webui/js/jquerylib/jquery-1.7.2.min.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IP-guard", "isImportant": false, "isOpen": true, "matchKeys": [ "IP-guard", "sign/login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宁盾一体化安全认证平台", "isImportant": false, "isOpen": true, "matchKeys": [ "am/ndkey.ico", "zhLanguagePng" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "东华医疗协同办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "extcomponent/security/login.jsp", "login_dhc" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安宁电子邮件系统 AnyMacro Mail", "isImportant": false, "isOpen": true, "matchKeys": [ "anymacro", "passre.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视综合安防平台", "isImportant": false, "isOpen": true, "matchKeys": [ "dist/jquery.js", "home/locationIndex.action" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海纳CMS-HituxCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered By HituxCMS", "ServiceCenter.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "酒店智慧营销IPTV系统", "isImportant": false, "isOpen": true, "matchKeys": [ "xsiptvp", "IPTV" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "朗驰欣创-视频监控", "isImportant": false, "isOpen": true, "matchKeys": [ "Installplug.exe", "NVSID" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "大华-智能物联综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "static/qwebchannel.js", "moment" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "方正翔宇", "isImportant": false, "isOpen": true, "matchKeys": [ "e5style/login1.css", "e5workspace/security/captcha.do" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金蝶 EAS", "isImportant": false, "isOpen": true, "matchKeys": [ "eassso", "portalClientHelper.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "极通 EWEBS 应用虚拟化", "isImportant": false, "isOpen": true, "matchKeys": [ "NewSoft", "xajax05/xajax_js/xajax_core.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "时空智友", "isImportant": false, "isOpen": true, "matchKeys": [ "login.jsp?login", "登录" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "康通电子云广播系统", "isImportant": false, "isOpen": true, "matchKeys": [ "static/download/JSET99Setup.exe" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "xxl-job", "isImportant": false, "isOpen": true, "matchKeys": [ "/static/adminlte/dist/css/AdminLTE.min.css", "bower_components/PACE/pace.min.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康综合安防管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "综合安防管理平台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "53BK数字报刊系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/Comja/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧点科技 OA 协同办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/dojo/smartdot/css/dojo_smartdot.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teleport 堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "teleport.js", "login-type-oath", "bind-oath" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "V2 Conference 视频会议系统", "isImportant": false, "isOpen": true, "matchKeys": [ "window.location.href=\"/Conf/index.jsp\"" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "和欣控制(Hysine) Webtalk 系统", "isImportant": false, "isOpen": true, "matchKeys": [ "_webtalk/_cur/loginA.php", "WEBTALK" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Analytics Cloud 分析云", "isImportant": false, "isOpen": true, "matchKeys": [ "410106848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "明源云MIP集成平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-834208471" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MapGIS Server Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-252149748" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金钟集团智能物流管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-364449966" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视综合安防管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-808437027" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "即会通企业版(LiveUC)|视频会议", "isImportant": false, "isOpen": true, "matchKeys": [ "-637931821" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "-1525950034" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华测监测预警系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-628229493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "35企业邮箱系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1676919780" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "指挥调度平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-1971504131" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FE业务协作平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-391577146" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Elib 图书馆集群管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "478149598" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "1182206475" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "银达汇智智慧综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "1170487960" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迈普多业务融合网关", "isImportant": false, "isOpen": true, "matchKeys": [ "-1234665500" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "红海eHR人力资源管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015496453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron --Log4j", "isImportant": false, "isOpen": true, "matchKeys": [ "MobileIron User Portal: Sign In" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" } ] } ================================================ FILE: rule/finger-important-en.json ================================================ { "fingerprint": [ { "describe": "Performance related configuration", "isImportant": false, "isOpen": true, "matchKeys": [ "maxPatterChunkSizeDefault=20000", "maxStoreRespBodyLenDefault=1200000", "monitorExecutorIntervalsDefault=4", "dynamicPathFilterIsOpenDefault=false", "autoRecordPathIsOpenDefault=true", "autoPathsToUrlsIsOpenDefault=true", "autoRecursiveIsOpenDefault=false", "proxyListenIsOpenDefault=false", "autoRefreshUnvisitedIsOpenDefault=false", "autoRefreshUiIsOpenDefault=false", "forceDecodeUnicodeDefault=true", "addApiToUnvisitedUrlsDefault=true" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_DEFAULT_PERFORMANCE" }, { "describe": "Allow [listening scan] RootUrl keyword", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_WHITE_ROOT_URL" }, { "describe": "Disable [listening scan | extract URL] RootUrl keyword", "isImportant": false, "isOpen": true, "matchKeys": [ ".activity.windows.com", ".adblockplus.org", ".alibaba.com", ".alicdn.com", ".alipayobjects.com", ".aliyun.com", ".amap.com", ".asp.net", ".baidu.com", ".bilibili.com", ".bing.com", ".cdn-go.cn", ".cdn.mozilla.net", ".dftoutiao.com", ".eastday.com", ".feishu.cn", ".feishu.com", ".feishucdn.com", ".firefox.com.cn", ".firefoxchina.cn", ".fofa.info", ".geetest.com", ".githubusercontent.com", ".google.com", ".googleapis.com", ".googletagmanager.com", ".gstatic.com.com", ".gtimg.com", ".gvt1.com", ".jsdelivr.net", ".live.com", ".microsoft.com", ".mozilla.com", ".mozilla.net", ".mozilla.org", ".msftconnecttest.com", ".msn.cn", ".msn.com", ".netease.com", ".npmjs.org", ".office.com", ".officeapps.live.com", ".qcloud.com", ".qnic.com", ".scorecardresearch.com", ".shodan.io", ".telemetry.mozilla.org", ".vuejs.org", ".vulbox.com", ".w3.org", ".windowsupdate.com", ".qq.com", ".wx.qq.com", ".xp.cn", ".yahoo.com", "github.com", "google.com", "lodash.com", "npms.io" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_ROOT_URL" }, { "describe": "Prohibit [listening scan |URL extraction | PATH extraction] URI path keywords", "isImportant": false, "isOpen": true, "matchKeys": [ "/jquery/", "/echarts/", "/amazeui/", "/animation/", "/zh-cn.js", ":/usr/" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_URI_PATH_KEYS" }, { "describe": "Disable [extract PATH] equal to this item", "isImportant": false, "isOpen": true, "matchKeys": [ "/", "/?", "image/x-icon", "image/png", "image/jpg", "application/x-www-form-urlencoded", "multipart/form-data", "MM/DD/YYYY", "YYYY/MM/DD", "text/javascript", "text/xml", "text/html", "text/csv", "text/css", "text/plain", "application/json", "ecdsa/rsa", "/.*/", "/.+/" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_EXTRACT_PATH_EQUAL" }, { "describe": "URI file extensions that are prohibited from [sniff scanning |URL extraction |PATH extraction]", "isImportant": false, "isOpen": true, "matchKeys": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "x", "y", "gif", "png", "jpg", "jpeg", "webp", "tif", "tiff", "bmp", "css", "woff", "woff2", "svg", "pdf", "docx", "doc", "xlsx", "xls", "pptx", "ppt", "ttf", "otf", "mp3", "wav", "aac", "ogg", "mp4", "avi", "mov", "wmv", "flv", "zip", "rar", "gz", "7z", "scss", "sass", "less", "eot", "swf", "vue" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_URI_EXT_EQUAL" }, { "describe": "Disable automatic [valid PATH record] RootUrl keyword", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_AUTO_RECORD_PATH" }, { "describe": "Disable automatic [unvisited URL scanning] RootUrl keyword", "isImportant": false, "isOpen": true, "matchKeys": [ "testphp.vulnweb.com" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_AUTO_RECURSE_SCAN" }, { "describe": "Allow automatic response status code for [valid PATH record]", "isImportant": false, "isOpen": true, "matchKeys": [ "200", "403" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_WHITE_RECORD_PATH_STATUS" }, { "describe": "Disable automatic response header for [valid PATH record]", "isImportant": false, "isOpen": true, "matchKeys": [ "404 not Found" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_RECORD_PATH_TITLE" }, { "describe": "Prohibit [extract sensitive information] from including this", "isImportant": false, "isOpen": true, "matchKeys": [ "admin@admin.com" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_EXTRACT_INFO_KEYS" }, { "describe": "Regular expression to extract response URL|PATH", "isImportant": false, "isOpen": true, "matchKeys": [ "(?:\"|')(((?:[a-zA-Z]{1,10}://|//)[^\"'/]{1,}\\.[a-zA-Z]{2,}[^\"']{0,})|((?:/|\\.\\./|\\./ )[^\"'><,;|*()(%%$^/\\\\\\[\\]][^\"'><,;|()]{1,})|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{1,} \\.(?:[a-zA-Z]{1,4}|action)(?:[\\?|#][^\"|']{0,}|))|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{3 ,}(?:[\\?|#][^\"|']{0,}|))|([a-zA-Z0-9_\\-]{1,}\\.(?:\\w)(?:[\\?|#][^\"|']{0,}|)))(?:\"|')", "(https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;\\u4E00-\\u9FFF]+[-A-Za-z0-9+&@#/%=~_|])" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_REGULAR_EXTRACT_URIS" }, { "describe": "URL path keywords that prohibit recursive access", "isImportant": false, "isOpen": true, "matchKeys": [ "logout", "cancel", "delete", "remove", "update" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_RECURSE_REQ_PATH_KEYS" }, { "describe": "HTTP request method when recursively accessing a URL", "isImportant": false, "isOpen": true, "matchKeys": [ "GET", "POST" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_RECURSE_REQ_HTTP_METHODS" }, { "describe": "HTTP request parameters when recursively accessing a URL", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_RECURSE_REQ_HTTP_PARAMS" }, { "accuracy": "high", "describe": "AppSecret , AppID", "isImportant": true, "isOpen": true, "matchKeys": [ "AppSecret&&AppID", "AppSecret&&AppKey" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Authorization Header", "isImportant": false, "isOpen": true, "matchKeys": [ "((basic [a-z0-9=:_\\+\\/-]{5,100})|(bearer [a-z0-9_.=:_\\+\\/-]{5,100}))" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "Chinese Mobile Number", "isImportant": false, "isOpen": true, "matchKeys": [ "[^\\w]((?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[5-79])|(?:5[0-35- 9])|(?:6[5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[189]))\\d{8})[^\\w]" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "Cloud Key", "isImportant": true, "isOpen": true, "matchKeys": [ "(((access)(|-|_)(key)(|-|_)(id|secret))|(LTAI[a-z0-9]{12,20}))" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Druid", "isImportant": true, "isOpen": true, "matchKeys": [ "(Druid Stat Index)" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Email", "isImportant": false, "isOpen": true, "matchKeys": [ "(([a-z0-9]+[_|\\.])*[a-z0-9]+@([a-z0-9]+[-|_|\\.])*[a-z0-9]+\\.((?!js|css|jpg|jpeg|png|ico)[az]{2,5}))" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "FTP leak", "isImportant": true, "isOpen": true, "matchKeys": [ "ftpUsername&&ftpPassword", "FTP_USER&&FTP_ADDR&&FTP_PASS" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "GraphQL", "isImportant": true, "isOpen": true, "matchKeys": [ "/graphql", "/graphiql" ], "location": "path", "matchType": "any_keywords", "type": "Sensitive Path " }, { "accuracy": "high", "describe": "GraphQL API", "isImportant": true, "isOpen": true, "matchKeys": [ "/graphiql", "__graphiql", "/graphiql" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Internal IP Address", "isImportant": false, "isOpen": true, "matchKeys": [ "[^0-9]((127\\.0\\.0\\.1)|(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(172\\.((1[6- 9])|(2\\d)|(3[01]))\\.\\d{1,3}\\.\\d{1,3})|(192\\.168\\.\\d{1,3}\\.\\d{1,3}))" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "JDBC Connection", "isImportant": true, "isOpen": true, "matchKeys": [ "(jdbc:[az:]+://[a-z0-9\\.\\-_:;=/@?,&]+)" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "JDBC leak", "isImportant": true, "isOpen": true, "matchKeys": [ "jdbc:(mysql|h2|oracle|sqlserver|jtds:sqlserver):" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "JDBC leak", "isImportant": true, "isOpen": true, "matchKeys": [ "System.Data.SqlClient", "Data.PassportContext", "mysql.username&&mysql.password&&mysql.url", "jdbc.username&&jdbc.password", "mssql.jdbc&&mssql.user", "com.microsoft.sqlserver.jdbc.SQLServerDriver" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "JSON Web Token", "isImportant": true, "isOpen": true, "matchKeys": [ "(eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9._-]{10,}|eyJ[A-Za-z0-9_\\/+-]{10,}\\.[A-Za-z0-9._\\/+-]{10,})" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Java Deserialization", "isImportant": false, "isOpen": true, "matchKeys": [ "(javax\\.faces\\.ViewState)" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "MAC Address", "isImportant": false, "isOpen": true, "matchKeys": [ "(^([a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5})|[^a-zA-Z0-9]([a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}))" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "OpenAPI-Swagger", "isImportant": true, "isOpen": true, "matchKeys": [ "/swagger-resources", "/swagger/" ], "location": "path", "matchType": "any_keywords", "type": "Sensitive Path " }, { "accuracy": "high", "describe": "Password Field", "isImportant": true, "isOpen": true, "matchKeys": [ "((|'|\")(|[\\w]{1,10})([p](ass|wd|asswd|assword))(|[\\w]{1,10})(|'|\")(:|=)(|)('|\")(.*?)('|\")(|,))" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "SSH leak", "isImportant": true, "isOpen": true, "matchKeys": [ "ssh://" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "SpringbootActuator", "isImportant": true, "isOpen": true, "matchKeys": [ "/mappings", "/actuator" ], "location": "path", "matchType": "any_keywords", "type": "Sensitive Path " }, { "accuracy": "high", "describe": "Swagger UI", "isImportant": true, "isOpen": true, "matchKeys": [ "((swagger-ui.html)|(\\\"swagger\\\":)|(Swagger UI)|(swaggerUi)|(swaggerVersion))" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Ueditor", "isImportant": true, "isOpen": true, "matchKeys": [ "(ueditor\\.(config|all)\\.js)" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Upload Form", "isImportant": false, "isOpen": true, "matchKeys": [ "(type\\=\\\"file\\\")" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "Windows File/Dir Path", "isImportant": true, "isOpen": true, "matchKeys": [ "'[^\\w](([a-zA-Z]:\\\\(?:\\w+\\\\?)*)|([a-zA-Z]:\\\\(?:\\w+\\\\)*\\w+\\.\\w+))'" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "shiro", "isImportant": true, "isOpen": true, "matchKeys": [ "(=deleteMe|rememberMe=)" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "CloudKEY", "isImportant": true, "isOpen": true, "matchKeys": [ "ALI_ACCESS_ID&&ALI_ACCESS_KEY", "ACCESSID&&ACCESSKEY", "AccessKey ID&&AccessKey Secret", "accessKeyId&&accessKeySecret", "ACCESS_ID&&ACCESS_KEY", "SSOusername&&SSOpassword", "oss://", "UC_DBHOST&&UC_DBUSER&&UC_KEY&&UC_API", "access_key_id&&secret_access_key", "accessKeyId&&accessSecret", "\"accessKeyId\"", "accessKeyId&&secretAccessKey" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Corpid , Corpsecret", "isImportant": true, "isOpen": true, "matchKeys": [ "Corpid&&Corpsecret" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Change password", "isImportant": true, "isOpen": true, "matchKeys": [ "username&&userName", "actionid", "newPws&&newpassword" ], "location": "body", "matchType": "all_keywords", "type": "Sensitive content " }, { "accuracy": "medium", "describe": "Initial password", "isImportant": true, "isOpen": true, "matchKeys": [ "(initPassword\\s*[:=]\\s*\"?|\"initPassword\"\\s*:\\s*\"?|\"initial password \"\\s*:\\s*\"?)[\"]?[^\"\\s]+[\"]?|\\ binitial password is \\s+[^\"\\s]+" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Mobile phone , user name", "isImportant": true, "isOpen": true, "matchKeys": [ "personName&&phoneNo&&deptName", "tel&&account&&userName&&mailAccount&&Content-Type: application/json", "email&&phone&&pwd&&id&&name&&Content-Type: application/json", "msg&&mobile\"&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Administrator account , administrator password", "isImportant": true, "isOpen": true, "matchKeys": [ "Administrator password && Administrator account", "'admin_pwd'&&'admin_user'", "&&", "\"admin_pwd\"&&\"admin_user\"" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Missing parameter", "isImportant": false, "isOpen": true, "matchKeys": [ "\".*Required .{1,18} parameter.*\"" ], "location": "body", "matchType": "any_regular", "type": "prompt message " }, { "accuracy": "high", "describe": "Missing parameter", "isImportant": false, "isOpen": true, "matchKeys": [ "Content-Type: application/json&&is not present", "Content-Type: application/json&& missing parameters", "Content-Type: application/json&& parameter missing " ], "location": "body", "matchType": "any_keywords", "type": "prompt message " }, { "accuracy": "high", "describe": "Account", "isImportant": true, "isOpen": true, "matchKeys": [ "description&&name\"&&message\"&&Type\"&&Content-Type: application/json", "person&&mobilPhone&&id&&status" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Account , Password", "isImportant": false, "isOpen": true, "matchKeys": [ "password&&name&&userid&&Content-Type: application/json", "user=='&&password=='", "userName =>&&password =>&&info", "secret_key&&address", "secret_key&&api_key", "password:&&HOST:&&NAME:", "server&&pwd&&database&&user", "Authentication failed&&user&&__construct", "VPN server address && user name && password", "username&&password&&jdbc:", "String username&&String password&&=", "jdbc.url&&://&&username&&password", "pass&&email&&user&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Account , ID card", "isImportant": true, "isOpen": true, "matchKeys": [ "ID number && name && company &&Content-Type: application/json", "gmsfhm&&Content-Type: application/json", "cjrsfzh&&Content-Type: application/json", "sfzhm&&total&&rows", "keyHash&&idCard&&partment", "Idcard&&Name&&id&&status&&address", "name&&sfzh&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Account , email address , collect", "isImportant": true, "isOpen": true, "matchKeys": [ "name&&realName&&email&&phone&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "ID card", "isImportant": true, "isOpen": true, "matchKeys": [ "(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65|71 |81|82)\\\\d{4}(19|20)\\\\d{2}((0[1-9])|(1[0-2]))((0[1-9])|([12]\\\\d)|(3[01]))\\\\d{3}([0-9Xx])" ], "location": "body", "matchType": "any_regular", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Email credentials leaked", "isImportant": true, "isOpen": true, "matchKeys": [ "EMAIL_HOST_USER&&EMAIL_HOST_PASSWORD", "mail.username&&mail.password", "sender.username&&sender.password", "mailUserPwd&&mailUserName", "mail_user&&mail_pass", "EMAIL_PSWD&&EMAIL_USER", "EMAIL_LOGIN_NAME&&EMAIL_LOGIN_PASSWD", "email_username&&email_password", "smtp_username&&smtp_password", "mailuser&&mailPassword", "mailServerUsername&&mailServerPassword", "WebMail.UserName&&WebMail.Password" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "high", "describe": "Feishu App_Id , App_Secret", "isImportant": true, "isOpen": true, "matchKeys": [ "App_Id&&App_Secret" ], "location": "body", "matchType": "any_keywords", "type": "Sensitive content " }, { "accuracy": "lower", "describe": "Tongda OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/images/tongda.ico" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Tongda OA", "isImportant": true, "isOpen": true, "matchKeys": [ "Office Anywhere", "Network Intelligent Office System " ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Tongda OA", "isImportant": true, "isOpen": true, "matchKeys": [ "tongda2000.com", "Official Website " ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Tongda OA", "isImportant": true, "isOpen": true, "matchKeys": [ "Tongda OA", "login" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Tongda OA", "isImportant": true, "isOpen": true, "matchKeys": [ "-187813927" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Tongda OA", "isImportant": true, "isOpen": true, "matchKeys": [ "-759108386" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Fanwei OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1578525679" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Fanwei OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/wui/common/page/sysRemind.jsp" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Fanwei OA", "isImportant": true, "isOpen": true, "matchKeys": [ "ecology_JSessionid" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Fanwei Cloud Bridge e-Bridge", "isImportant": true, "isOpen": true, "matchKeys": [ "wx.weaver", "e-Bridge" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Fanwei e-mobile", "isImportant": true, "isOpen": true, "matchKeys": [ "Mobile Management Platform - Enterprise Management " ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Fanweiemp- mobile management platform", "isImportant": true, "isOpen": true, "matchKeys": [ "2062026853" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Lan Ling OA", "isImportant": true, "isOpen": true, "matchKeys": [ "sys/ui/extend/theme/default/style/icon.css", "sys/ui/extend/theme/default/style/profile.css" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Lan Ling OA", "isImportant": true, "isOpen": true, "matchKeys": [ "Lanling Software", "App_Themes/Login" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Lan Ling OA", "isImportant": true, "isOpen": true, "matchKeys": [ "login_single_horizontal" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Lan Ling OA", "isImportant": true, "isOpen": true, "matchKeys": [ "login_single_full_screen" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Lanling EIS Intelligent Collaboration Platform", "isImportant": true, "isOpen": true, "matchKeys": [ "/scripts/jquery.landray.common.js", "Lanling Software " ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Zhiyuan OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/seeyon/USER-DATA/IMAGES/LOGIN/login.gif" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Zhiyuan OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/seeyon/common/" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Zhiyuan OA", "isImportant": true, "isOpen": true, "matchKeys": [ "165601673" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Zhiyuan OA M3 Server", "isImportant": true, "isOpen": true, "matchKeys": [ "M3 Server" ], "location": "title", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Zhiyuan OA M1 Server", "isImportant": true, "isOpen": true, "matchKeys": [ "M1-Server" ], "location": "title", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Zhiyuan Analytics Cloud", "isImportant": false, "isOpen": true, "matchKeys": [ "410106848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "Wanhu OA", "isImportant": true, "isOpen": true, "matchKeys": [ "defaultroot", "Logon!logon.action", "domainAccount" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Wanhu OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/defaultroot/public/edit/logindownload/Logindownload.jsp" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "WanhuezOFFICE", "isImportant": true, "isOpen": true, "matchKeys": [ "-1827521324" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "ezEIP", "isImportant": true, "isOpen": true, "matchKeys": [ "Powered By wanhu - www.wanhu.com.cn", "ezEip" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "Huatian Power OA", "isImportant": true, "isOpen": true, "matchKeys": [ "OAapp/WebObjects/OAapp.woa", "/htoa/js/jquery.js" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "UFIDA Software", "isImportant": false, "isOpen": true, "matchKeys": [ "UFIDA Software CO.LTD all rights reserved" ], "location": "body", "matchType": "any_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "UFIDA NC", "isImportant": true, "isOpen": true, "matchKeys": [ "logo/images/ufida_nc.png", "UFIDA NC" ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "UFIDA NC Cloud", "isImportant": true, "isOpen": true, "matchKeys": [ "platform/pub/welcome.do" ], "location": "body", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "UFIDA GRP-U8 New Government Accounting System Special Edition", "isImportant": true, "isOpen": true, "matchKeys": [ "-299520369" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "UFIDA U8", "isImportant": true, "isOpen": true, "matchKeys": [ "U8 Remote Access Official Website", "UFIDA " ], "location": "body", "matchType": "all_keywords", "type": "OA class " }, { "accuracy": "lower", "describe": "UFIDA - Chanjet OEM", "isImportant": false, "isOpen": true, "matchKeys": [ "GNRemote.dll", "Web_sc/login.gn" ], "location": "body", "matchType": "all_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "UFIDA BIP Data Application Service", "isImportant": false, "isOpen": true, "matchKeys": [ "1183274548" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "Qi An Xin Automated Penetration Testing System", "isImportant": false, "isOpen": true, "matchKeys": [ "-747580443" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "Qi An Xin VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "Qi An Xin VPN" ], "location": "title", "matchType": "any_keywords", "type": "VPN type " }, { "accuracy": "lower", "describe": "Topsec products", "isImportant": true, "isOpen": true, "matchKeys": [ "<TITLE>Web User Login", "loginCheck" ], "location": "body", "matchType": "all_keywords", "type": "Safety equipment " }, { "accuracy": "lower", "describe": "TopSec VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "topsecsvportalstyle" ], "location": "header", "matchType": "any_keywords", "type": "VPN type " }, { "accuracy": "lower", "describe": "TopSec VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "vone/pub/image/logo1.png" ], "location": "header", "matchType": "any_keywords", "type": "VPN type " }, { "accuracy": "lower", "describe": "TOPSEC WEB application security protection system", "isImportant": true, "isOpen": true, "matchKeys": [ "module=login", "topsec", "login" ], "location": "body", "matchType": "all_keywords", "type": "Safety equipment " }, { "accuracy": "lower", "describe": "Topsec Reporter", "isImportant": true, "isOpen": true, "matchKeys": [ "Login @ Reporter", "topsec", "login" ], "location": "body", "matchType": "all_keywords", "type": "Safety equipment " }, { "accuracy": "lower", "describe": "TopSec Firewall", "isImportant": true, "isOpen": true, "matchKeys": [ "TOPSEC", "image/aaa.png", "username" ], "location": "body", "matchType": "all_keywords", "type": "Safety equipment " }, { "accuracy": "lower", "describe": "TopAPP Load Balancing System", "isImportant": true, "isOpen": true, "matchKeys": [ "TopAPP Load Balancing System", "Topsec " ], "location": "body", "matchType": "all_keywords", "type": "Load Balancing " }, { "accuracy": "lower", "describe": "Topsec - Internet Behavior Management System", "isImportant": true, "isOpen": true, "matchKeys": [ "images/logo3.gif", "dkey_activex_download.php", "login_commit.php" ], "location": "body", "matchType": "all_keywords", "type": "Internet behavior management " }, { "accuracy": "lower", "describe": "Topsec equipment", "isImportant": true, "isOpen": true, "matchKeys": [ "-2019013898" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Safety equipment " }, { "accuracy": "lower", "describe": "Topsec Application Delivery System", "isImportant": true, "isOpen": true, "matchKeys": [ "TopApp-AD" ], "location": "body", "matchType": "any_keywords", "type": "Safety equipment " }, { "accuracy": "lower", "describe": "ARRAY VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "/prx/000/http/localh/oauth_auth" ], "location": "body", "matchType": "any_keywords", "type": "VPN type " }, { "accuracy": "lower", "describe": "siteserver", "isImportant": true, "isOpen": true, "matchKeys": [ "/sitefiles/assets/components/", "siteid" ], "location": "body", "matchType": "all_keywords", "type": "Official website " }, { "accuracy": "lower", "describe": "siteserver", "isImportant": true, "isOpen": true, "matchKeys": [ "sitefiles", "siteid" ], "location": "body", "matchType": "all_keywords", "type": "Official website " }, { "accuracy": "lower", "describe": "Torus", "isImportant": true, "isOpen": true, "matchKeys": [ "/was5/web/", "trs" ], "location": "body", "matchType": "all_keywords", "type": "Official website " }, { "accuracy": "lower", "describe": "Contract lock", "isImportant": true, "isOpen": true, "matchKeys": [ "qyswebapp" ], "location": "body", "matchType": "any_keywords", "type": "Contract type " }, { "accuracy": "lower", "describe": "Mingyuan Cloud ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "-626335361" ], "location": "icon_hash", "matchType": "any_keywords", "type": "ERP system " }, { "accuracy": "lower", "describe": "Mingyuan Cloud ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "Mingyuan Cloud ERP" ], "location": "title", "matchType": "any_keywords", "type": "ERP system " }, { "accuracy": "lower", "describe": "Mingyuan Cloud ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "PubPlatform", "Mingyuan Cloud", "LoginHandler" ], "location": "body", "matchType": "all_keywords", "type": "ERP system " }, { "accuracy": "lower", "describe": "Mingyuan Cloud ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "#153290", "Mingyuan Software " ], "location": "body", "matchType": "all_keywords", "type": "ERP system " }, { "accuracy": "lower", "describe": "CoreMail", "isImportant": true, "isOpen": true, "matchKeys": [ "coremail/common" ], "location": "body", "matchType": "any_keywords", "type": "Mail type " }, { "accuracy": "lower", "describe": "Hongjing eHR Human Resources Information Management System", "isImportant": true, "isOpen": true, "matchKeys": [ "Human Resources Information Management System", "hrlogon" ], "location": "body", "matchType": "all_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "JeecgBoot", "isImportant": true, "isOpen": true, "matchKeys": [ "fileview.jeecg.com/onlinePreview" ], "location": "body", "matchType": "any_keywords", "type": "CMS" }, { "accuracy": "lower", "describe": "EasyLink ( DLP)", "isImportant": true, "isOpen": true, "matchKeys": [ "CDGServer3", "welcomebg.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "Esaitong - Electronic Document Security Management System", "isImportant": true, "isOpen": true, "matchKeys": [ "/CDGServer3/SysConfig.jsp" ], "location": "body", "matchType": "any_keywords", "type": "Other " }, { "accuracy": "lower", "describe": "General enterprise management software", "isImportant": false, "isOpen": true, "matchKeys": [ "/cwbase/web/Login.aspx" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iDS Networked Digital Signage Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "iDS Networked Digital Signage Management System " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "Nexus Repository Manager" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Active UC", "isImportant": false, "isOpen": true, "matchKeys": [ "Active UC " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "zentao", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to use zentao" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fast Cloud Server Assistant", "isImportant": false, "isOpen": true, "matchKeys": [ "Fast Cloud Server Assistant " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "zentao", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to zentao" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fortune Global Foreign Trade ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "User login_Futongtianxia Foreign Trade ERP " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Haixiang D8 Pharmaceutical Cloud Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Login to Haixiang " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "Kibana" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yongzhong online editing software system", "isImportant": false, "isOpen": true, "matchKeys": [ "Web Office", "img/eio.png" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Southern Digital Transaction Integrated System", "isImportant": false, "isOpen": true, "matchKeys": [ "/SouthUIContent/themes/easydropdown.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Langxin Tianji Human Resources Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "hrsoft.com.cn", "chkLogindiv", "CustStyle" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "KeRong AIO Operation Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "style1/css/ListRange.css", "Main Account Set", "login.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Lianda Power Hospital Comprehensive Office Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "login.aspx?Method=AJAX&UserName=", "Login_Return_XML.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sino-Agricultural Credit Investment Cloud Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Technical support: Beijing Zhongnong Xinda Information Technology Co. , Ltd. " ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Electronic Application Client Management System (EAC)", "isImportant": false, "isOpen": true, "matchKeys": [ "script/css/gwssi.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Qingfanglian IoT Query Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Qingfanglian Internet of Things Query Platform", "Themes/default/login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zhimeng Technology - Guanjiapo IoT", "isImportant": false, "isOpen": true, "matchKeys": [ "HtmlPages/Vue/vue.js", "GetLoginValidate" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Glodon", "isImportant": false, "isOpen": true, "matchKeys": [ "/ConsoleCommon/Content/weebox.css", "Guanglianda " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Renwoxing CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "/Handlers/IdentifyingCode.ashx" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Guanglianda Guangxuntong", "isImportant": false, "isOpen": true, "matchKeys": [ "gtp.standard", "JS/gxtAutoLogin.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Intelligent meter integrated management system", "isImportant": false, "isOpen": true, "matchKeys": [ "js/jsCore.js", "Ajax_Code/Login.ashx", "login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kede Electronics Smart Water Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Shandong Kede Electronics Co., Ltd.", "J_LoginSub" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Qinchuan Gas Integrated Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "System Login", "res/icon/key.png", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dongsheng Logistics Software", "isImportant": false, "isOpen": true, "matchKeys": [ "js/dhtmlxcombo_whp.js", "login.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jiusi OA collaborative office system", "isImportant": false, "isOpen": true, "matchKeys": [ "/jsoa/login.jsp" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Runshen Information Enterprise Standardization Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "Runshen Information", "Enterprise Standardization Management System", "loginForm" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yinda Huizhi Intelligent Integrated Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Fuzhou Yinda Yunchuang Information Technology Co., Ltd.", "miniui/crypto/CodeManage.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tongxin T9eHR Information Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "T9eHR-iconfont", "Authentication/Login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NortekControlLineareMerge", "isImportant": false, "isOpen": true, "matchKeys": [ "img/emerge.ico", "login_pw" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dingxun Technology - Yibao OA System", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to the Yibao OA system " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hui Shang + Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "Hui Shang + Management System " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hongfan -ioffice OA", "isImportant": false, "isOpen": true, "matchKeys": [ "iOffice.net" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Guan Jia Po Omni-channel Business Synchronization Center", "isImportant": false, "isOpen": true, "matchKeys": [ "Guan Jia Po Omni-channel Business Synchronization Center " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Spring env", "isImportant": false, "isOpen": true, "matchKeys": [ "servletContextInitParams" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weisan Cloud Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "WSY_logo", "MANAGEMENT SYSTEM " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Log Easy", "isImportant": false, "isOpen": true, "matchKeys": [ "auth/passwordReset", "yw-login-", "yw-login-logo" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sidi Data Pool Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Ajax/Login", "Sidi", "canvas" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Comai RAS", "isImportant": false, "isOpen": true, "matchKeys": [ "Comai RAS", "CmxGoUrl.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Spring env", "isImportant": false, "isOpen": true, "matchKeys": [ "logback" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Error 404--Not Found" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Error 403--" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "/console/framework/skins/wlsconsole/images/login_WebLogic_branding.png" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TWCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "href=\"/twcms/theme/default/css/global.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to Weblogic Application Server" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "<i>Hypertext Transfer Protocol -- HTTP/1.1</i>" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/por/login_psw.csp" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "loginPageSP/loginPrivacy.js" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "e-mobile", "isImportant": false, "isOpen": true, "matchKeys": [ "weaver,e-mobile" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ecology", "isImportant": false, "isOpen": true, "matchKeys": [ "ecology_JSessionid" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PbootCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "PbootSystem" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Qiming VPN device", "isImportant": false, "isOpen": true, "matchKeys": [ "cover_admin.css", "SSLVPN LOGIN" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tianyue Operation and Maintenance Security Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "css/fw/full.css", "js/p/login.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TP-LINK products", "isImportant": false, "isOpen": true, "matchKeys": [ "TP-LINK" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Influxdb", "isImportant": false, "isOpen": true, "matchKeys": [ "X-Influxdb" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Weihong OA", "isImportant": false, "isOpen": true, "matchKeys": [ "wh/servlet/MainServer" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "rememberMe=" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dreamer CMS-Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "dreamer-" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dreamer CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "-748565678" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Comet Water Business Management Information System", "isImportant": false, "isOpen": true, "matchKeys": [ "1704826498" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Bonobo Git Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-219625874" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jingqi Technology Rescue Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "-1185226132" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Flow Traffic Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "325583172" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Beijing Langxin Tianji Human Resources System", "isImportant": false, "isOpen": true, "matchKeys": [ "1143915194" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Guardian God · Host Master", "isImportant": false, "isOpen": true, "matchKeys": [ "1188645141" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "U + Accounting", "isImportant": false, "isOpen": true, "matchKeys": [ "2049187099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sunray IoT Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "147973611" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WiseGrid Application Delivery Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "910523681" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dreamer CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "dreamer-cms" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "=deleteMe" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Chongqing Baiding - Baiding OA", "isImportant": false, "isOpen": true, "matchKeys": [ "default.aspx", "Style/Style.css", "Skin2017", "TxtUserPwd" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PbootCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "PbootCMS" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Swagger UI", "isImportant": false, "isOpen": true, "matchKeys": [ "Swagger UI" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie", "isImportant": false, "isOpen": true, "matchKeys": [ "4008 111 000" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei SMC", "isImportant": false, "isOpen": true, "matchKeys": [ "Script/SmcScript.js?version=" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C Router", "isImportant": false, "isOpen": true, "matchKeys": [ "/wnm/ssl/web/frame/login.html" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cisco SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/+CSCOE+/logon.html" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor WAF", "isImportant": false, "isOpen": true, "matchKeys": [ "rsa.js", "commonFunction.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Firewall Data Center", "isImportant": false, "isOpen": true, "matchKeys": [ "Redirect to...", "/LogInOut.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Integrated Gateway MIG", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/login.cgi", "/html/wz_tooltip.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NetSec VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/vpn/common/js/leadsec.js", "/vpn/user/common/custom/auth_home.css" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Typecho", "isImportant": false, "isOpen": true, "matchKeys": [ "typecho", "usr/themes" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "401 login authentication", "isImportant": false, "isOpen": true, "matchKeys": [ "401 Authorization" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WeidekechuangIPEasy Zhiyitong", "isImportant": false, "isOpen": true, "matchKeys": [ "_IPEasy " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache Airflow", "isImportant": false, "isOpen": true, "matchKeys": [ "Airflow - Login" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Venusstar Tianqing Hanma USG Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "/cgi-bin/webui?op=get_product_model" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Feiyuxing Internet Behavior Management", "isImportant": false, "isOpen": true, "matchKeys": [ "css/R1Login.css", "share.ti_username", "login_logo" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Internet Behavior Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "utccjfaewjb = function(str, key)" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Internet Behavior Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "document.write(WRFWWCSFBXMIGKRKHXFJ" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Application Delivery Reporting System", "isImportant": false, "isOpen": true, "matchKeys": [ "/reportCenter/index.php?cls_mode=cluster_mode_others" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Synology NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "Synology", "webman/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kingdee Cloud Starry Sky", "isImportant": false, "isOpen": true, "matchKeys": [ "HTML5/content/themes/kdcss.min.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kingdee Cloud Starry Sky", "isImportant": false, "isOpen": true, "matchKeys": [ "/ClientBin/Kingdee.BOS.XPF.App.xap" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Venusstar Tianqing Hanma USG Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Tianqing Hanma USG" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jboss", "isImportant": false, "isOpen": true, "matchKeys": [ "jboss.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "assets/gitlab_logo" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "Entry verification failed " ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "Site not found", "Possible Causes", "CDN Products", "Web Services", "Check if the port is correct " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "<title> Congratulations, the site was created successfully", "Panel System Background", "System automatically generated " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DouPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by DouPHP", "DouPHP", "theme" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "Scanning the QR code to log in is safer", "bt.cn", "/login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "Site created successfully", "bt.cn" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "Site created successfully", "pagoda " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "-386189083" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zen", "isImportant": false, "isOpen": true, "matchKeys": [ "self.location", "Lw==" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zen", "isImportant": false, "isOpen": true, "matchKeys": [ "/theme/default/images/main/zt-logo.png" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zen", "isImportant": false, "isOpen": true, "matchKeys": [ "zentaosid" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "YONYOU NC", "isImportant": false, "isOpen": true, "matchKeys": [ "uclient.yonyou.com", "UClient" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baota-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "Baota Linux Panel " ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>RabbitMQ Management" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zabbix", "isImportant": false, "isOpen": true, "matchKeys": [ "zabbix", "Zabbix SIA" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Liansoft access", "isImportant": false, "isOpen": true, "matchKeys": [ "Network Access", "leagsoft", "redirect" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "List directory", "isImportant": false, "isOpen": true, "matchKeys": [ "Index of /" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "List directory", "isImportant": false, "isOpen": true, "matchKeys": [ "- /" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Inspur server IPMI management port", "isImportant": false, "isOpen": true, "matchKeys": [ "img/inspur_logo.png", "Management System" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RegentApi_v2.0", "isImportant": false, "isOpen": true, "matchKeys": [ "RegentApi_v2.0" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tomcat default page", "isImportant": false, "isOpen": true, "matchKeys": [ "/manager/status", "/manager/html" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "slack-instance", "isImportant": false, "isOpen": true, "matchKeys": [ "99395752" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "spring-boot", "isImportant": false, "isOpen": true, "matchKeys": [ "116323821" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jenkins", "isImportant": false, "isOpen": true, "matchKeys": [ "81586312" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cnservers LLC", "isImportant": false, "isOpen": true, "matchKeys": [ "-235701012" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "743365239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Chainpoint", "isImportant": false, "isOpen": true, "matchKeys": [ "2128230701" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LaCie", "isImportant": false, "isOpen": true, "matchKeys": [ "-1277814690" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Parse", "isImportant": false, "isOpen": true, "matchKeys": [ "246145559" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "628535358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "855273746" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Avigilon", "isImportant": false, "isOpen": true, "matchKeys": [ "1318124267" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian – Confluence", "isImportant": false, "isOpen": true, "matchKeys": [ "-305179312" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "786533217" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Pi Star", "isImportant": false, "isOpen": true, "matchKeys": [ "432733105" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "705143395" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Angular IO (AngularJS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1255347784" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "XAMPP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1275226814" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "React", "isImportant": false, "isOpen": true, "matchKeys": [ "-2009722838" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "981867722" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "-923088984" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Aplikasi", "isImportant": false, "isOpen": true, "matchKeys": [ "494866796" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ubiquiti Aircube", "isImportant": false, "isOpen": true, "matchKeys": [ "1249285083" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian – Bamboo", "isImportant": false, "isOpen": true, "matchKeys": [ "-1379982221" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Exostar – Managed Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "420473080" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian – Confluence", "isImportant": false, "isOpen": true, "matchKeys": [ "-1642532491" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cisco Meraki", "isImportant": false, "isOpen": true, "matchKeys": [ "163842882" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Archivematica", "isImportant": false, "isOpen": true, "matchKeys": [ "-1378182799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TCN", "isImportant": false, "isOpen": true, "matchKeys": [ "-702384832" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CX", "isImportant": false, "isOpen": true, "matchKeys": [ "-532394952" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ace", "isImportant": false, "isOpen": true, "matchKeys": [ "-183163807" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "552727997" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NetData", "isImportant": false, "isOpen": true, "matchKeys": [ "1302486561" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenGeo Suite", "isImportant": false, "isOpen": true, "matchKeys": [ "-609520537" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dgraph Ratel", "isImportant": false, "isOpen": true, "matchKeys": [ "-1961046099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1581907337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Material Dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "1913538826" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Form.io", "isImportant": false, "isOpen": true, "matchKeys": [ "1319699698" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kubeflow", "isImportant": false, "isOpen": true, "matchKeys": [ "-1203021870" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "netdata dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "-182423204" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CapRover", "isImportant": false, "isOpen": true, "matchKeys": [ "988422585" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WiJungle", "isImportant": false, "isOpen": true, "matchKeys": [ "2113497004" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Onera", "isImportant": false, "isOpen": true, "matchKeys": [ "1234311970" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SmartPing", "isImportant": false, "isOpen": true, "matchKeys": [ "430582574" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "1232596212" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "netdata dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "1585145626" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FRITZ!Box", "isImportant": false, "isOpen": true, "matchKeys": [ "-219752612" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "fortinet-forticlient", "isImportant": false, "isOpen": true, "matchKeys": [ "945408572" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ubiquiti – AirOS", "isImportant": false, "isOpen": true, "matchKeys": [ "-697231354" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fortinet – Forticlient", "isImportant": false, "isOpen": true, "matchKeys": [ "945408572" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Outlook Web Application", "isImportant": false, "isOpen": true, "matchKeys": [ "1768726119" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei – Claro", "isImportant": false, "isOpen": true, "matchKeys": [ "2109473187" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ASUS AiCloud", "isImportant": false, "isOpen": true, "matchKeys": [ "552592949" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SonicWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "631108382" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Google", "isImportant": false, "isOpen": true, "matchKeys": [ "708578229" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-134375033" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dahua Storm (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "2019488876" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei – ADSL/Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-1395400951" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sophos Cyberoam (appliance)", "isImportant": false, "isOpen": true, "matchKeys": [ "1601194732" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LANCOM Systems", "isImportant": false, "isOpen": true, "matchKeys": [ "-325082670" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-1050786453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TilginAB (HomeGateway)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1346447358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Supermicro Intelligent Management (IPMI)", "isImportant": false, "isOpen": true, "matchKeys": [ "1410610129" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zyxel ZyWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "-440644339" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dell SonicWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "363324987" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ubiquiti Login Portals", "isImportant": false, "isOpen": true, "matchKeys": [ "-1446794564" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sophos User Portal/VPN Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "1045696447" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache Tomcat", "isImportant": false, "isOpen": true, "matchKeys": [ "-297069493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "396533629" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cyberoam", "isImportant": false, "isOpen": true, "matchKeys": [ "1462981117" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Technicolor", "isImportant": false, "isOpen": true, "matchKeys": [ "1594377337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Vodafone (Technicolor)", "isImportant": false, "isOpen": true, "matchKeys": [ "165976831" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "UBNT Router UI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1677255344" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Intelbras Wireless", "isImportant": false, "isOpen": true, "matchKeys": [ "-359621743" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kerio Connect (Webmail)", "isImportant": false, "isOpen": true, "matchKeys": [ "-677167908" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "BIG-IP", "isImportant": false, "isOpen": true, "matchKeys": [ "878647854" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Microsoft OWA", "isImportant": false, "isOpen": true, "matchKeys": [ "442749392" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "pfSense", "isImportant": false, "isOpen": true, "matchKeys": [ "1405460984" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iKuai Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-271448102" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "31972968" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "3CX Phone System", "isImportant": false, "isOpen": true, "matchKeys": [ "970132176" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Bluehost", "isImportant": false, "isOpen": true, "matchKeys": [ "-1119613926" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor", "isImportant": false, "isOpen": true, "matchKeys": [ "123821839" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ZTE Corporation (Gateway/Appliance)", "isImportant": false, "isOpen": true, "matchKeys": [ "459900502" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruckus Wireless", "isImportant": false, "isOpen": true, "matchKeys": [ "-2069844696" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Bitnami", "isImportant": false, "isOpen": true, "matchKeys": [ "-1607644090" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Juniper Device Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "2141724739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Technicolor Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "1835479497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "1278323681" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NETASQ - Secure / Stormshield", "isImportant": false, "isOpen": true, "matchKeys": [ "-1929912510" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "-1255992602" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "1895360511" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "-991123252" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Vmware Secure File Transfer", "isImportant": false, "isOpen": true, "matchKeys": [ "1642701741" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SAP Netweaver", "isImportant": false, "isOpen": true, "matchKeys": [ "-266008933" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SAP ID Service: Log On", "isImportant": false, "isOpen": true, "matchKeys": [ "-1967743928" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SAP Conversational AI", "isImportant": false, "isOpen": true, "matchKeys": [ "1347937389" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Palo Alto Login Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "602431586" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Palo Alto Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-318947884" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Outlook Web Application", "isImportant": false, "isOpen": true, "matchKeys": [ "1356662359" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "1453890729" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Docker", "isImportant": false, "isOpen": true, "matchKeys": [ "-1814887000" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Docker", "isImportant": false, "isOpen": true, "matchKeys": [ "1937209448" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Amazon", "isImportant": false, "isOpen": true, "matchKeys": [ "-1544605732" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Amazon", "isImportant": false, "isOpen": true, "matchKeys": [ "716989053" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "phpMyAdmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-1010568750" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zhejiang Uniview Technologies Co.", "isImportant": false, "isOpen": true, "matchKeys": [ "-1240222446" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ISP Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-986678507" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "AXIS (network cameras)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1616143106" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Roundcube Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-976235259" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "UniFi Video Controller (airVision)", "isImportant": false, "isOpen": true, "matchKeys": [ "768816037" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "pfSense", "isImportant": false, "isOpen": true, "matchKeys": [ "1015545776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Freebox OS", "isImportant": false, "isOpen": true, "matchKeys": [ "1838417872" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Keenetic", "isImportant": false, "isOpen": true, "matchKeys": [ "547282364" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sierra Wireless Ace Manager (Airlink)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1571472432" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Synology DiskStation", "isImportant": false, "isOpen": true, "matchKeys": [ "149371702" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "INSTAR IP Cameras", "isImportant": false, "isOpen": true, "matchKeys": [ "-1169314298" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-1038557304" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Octoprint (3D printer)", "isImportant": false, "isOpen": true, "matchKeys": [ "1307375944" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "1280907310" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Vesta Hosting Control Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "1954835352" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Farming Simulator Dedicated Server", "isImportant": false, "isOpen": true, "matchKeys": [ "509789953" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Residential Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "-1933493443" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1993518473" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Arris", "isImportant": false, "isOpen": true, "matchKeys": [ "-1477563858" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PLEX Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-895890586" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "-1354933624" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Deluge", "isImportant": false, "isOpen": true, "matchKeys": [ "944969688" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "479413330" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cambium Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-435817905" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-981606721" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dahua Storm (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "833190513" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-652508439" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fireware Watchguard", "isImportant": false, "isOpen": true, "matchKeys": [ "-569941107" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shock&Innovation!! netis setup", "isImportant": false, "isOpen": true, "matchKeys": [ "1326164945" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "cacaoweb", "isImportant": false, "isOpen": true, "matchKeys": [ "-1738184811" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Loxone (Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "904434662" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HP Printer / Server", "isImportant": false, "isOpen": true, "matchKeys": [ "905744673" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netflix", "isImportant": false, "isOpen": true, "matchKeys": [ "902521196" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Linksys Smart Wi-Fi", "isImportant": false, "isOpen": true, "matchKeys": [ "-2063036701" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "lwIP (A Lightweight TCP/IP stack)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1205024243" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hitron Technologies", "isImportant": false, "isOpen": true, "matchKeys": [ "607846949" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dahua Storm (DVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "1281253102" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MOBOTIX Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "661332347" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Blue Iris (Webcam)", "isImportant": false, "isOpen": true, "matchKeys": [ "-520888198" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Vigor Router", "isImportant": false, "isOpen": true, "matchKeys": [ "104189364" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Alibaba Cloud (Block Page)", "isImportant": false, "isOpen": true, "matchKeys": [ "1227052603" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DD WRT (DD-WRT milli_httpd)", "isImportant": false, "isOpen": true, "matchKeys": [ "252728887" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mitel Networks (MiCollab End User Portal)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1922044295" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "1221759509" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dlink Router", "isImportant": false, "isOpen": true, "matchKeys": [ "1037387972" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PRTG Network Monitor", "isImportant": false, "isOpen": true, "matchKeys": [ "-655683626" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Elastic (Database)", "isImportant": false, "isOpen": true, "matchKeys": [ "1611729805" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "1144925962" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Wildfly", "isImportant": false, "isOpen": true, "matchKeys": [ "-1666561833" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cisco Meraki Dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "804949239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Workday", "isImportant": false, "isOpen": true, "matchKeys": [ "-459291760" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JustHost", "isImportant": false, "isOpen": true, "matchKeys": [ "1734609466" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baidu (IP error page)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1507567067" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "2006716043" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yii PHP Framework (Default Favicon)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1298108480" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "truVision NVR (interlogix)", "isImportant": false, "isOpen": true, "matchKeys": [ "1782271534" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SOYAL Serial Device Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1777351344" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Redmine", "isImportant": false, "isOpen": true, "matchKeys": [ "603314" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "phpMyAdmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-476231906" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cisco (eg:Conference Room Login Page)", "isImportant": false, "isOpen": true, "matchKeys": [ "-646322113" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jetty 404", "isImportant": false, "isOpen": true, "matchKeys": [ "-629047854" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Luma Surveillance", "isImportant": false, "isOpen": true, "matchKeys": [ "-1351901211" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-519765377" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HP Printer / Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-2144363468" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "-127886975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "1139788073" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "-1235192469" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ALIBI NVR", "isImportant": false, "isOpen": true, "matchKeys": [ "1876585825" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Application Delivery Reporting System", "isImportant": false, "isOpen": true, "matchKeys": [ "-1810847295" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Websockets test page (eg: port 5900)", "isImportant": false, "isOpen": true, "matchKeys": [ "-291579889" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "macOS Server (Apple)", "isImportant": false, "isOpen": true, "matchKeys": [ "1629518721" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenRG", "isImportant": false, "isOpen": true, "matchKeys": [ "-986816620" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cisco Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-299287097" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor", "isImportant": false, "isOpen": true, "matchKeys": [ "-1926484046" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HeroSpeed Digital Technology Co. (NVR/IPC/XVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "-873627015" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Nomadix Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "2071993228" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "516963061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Magento", "isImportant": false, "isOpen": true, "matchKeys": [ "-38580010" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MK-AUTH", "isImportant": false, "isOpen": true, "matchKeys": [ "1490343308" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shoutcast Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-632583950" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "95271369" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "1476335317" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "-842192932" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "105083909" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "240606739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "2121539357" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Adobe Campaign Classic", "isImportant": false, "isOpen": true, "matchKeys": [ "-333791179" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "XAMPP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1437701105" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Niagara Web Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-676077969" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Technicolor", "isImportant": false, "isOpen": true, "matchKeys": [ "-2138771289" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hitron Technologies Inc.", "isImportant": false, "isOpen": true, "matchKeys": [ "711742418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IBM Notes", "isImportant": false, "isOpen": true, "matchKeys": [ "728788645" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Barracuda", "isImportant": false, "isOpen": true, "matchKeys": [ "1436966696" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ServiceNow", "isImportant": false, "isOpen": true, "matchKeys": [ "86919334" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Openfire Admin Console", "isImportant": false, "isOpen": true, "matchKeys": [ "1211608009" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HP iLO", "isImportant": false, "isOpen": true, "matchKeys": [ "2059618623" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sunny WebBox", "isImportant": false, "isOpen": true, "matchKeys": [ "1975413433" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ZyXEL", "isImportant": false, "isOpen": true, "matchKeys": [ "943925975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei", "isImportant": false, "isOpen": true, "matchKeys": [ "281559989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tenda Web Master", "isImportant": false, "isOpen": true, "matchKeys": [ "-2145085239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Prometheus Time Series Collection and Processing Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-1399433489" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "wdCP cloud host panel", "isImportant": false, "isOpen": true, "matchKeys": [ "1786752597" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Domoticz (Home Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "90680708" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tableau", "isImportant": false, "isOpen": true, "matchKeys": [ "-1441956789" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "openWRT Luci", "isImportant": false, "isOpen": true, "matchKeys": [ "-675839242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ubiquiti – AirOS", "isImportant": false, "isOpen": true, "matchKeys": [ "1020814938" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MDaemon Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-766957661" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Teltonika", "isImportant": false, "isOpen": true, "matchKeys": [ "119741608" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Entrolink", "isImportant": false, "isOpen": true, "matchKeys": [ "1973665246" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WindRiver-WebServer", "isImportant": false, "isOpen": true, "matchKeys": [ "74935566" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Microhard Systems", "isImportant": false, "isOpen": true, "matchKeys": [ "-1723752240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Skype", "isImportant": false, "isOpen": true, "matchKeys": [ "-1807411396" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Teltonika", "isImportant": false, "isOpen": true, "matchKeys": [ "-1612496354" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Eltex (Router)", "isImportant": false, "isOpen": true, "matchKeys": [ "1877797890" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "bintec elmeg", "isImportant": false, "isOpen": true, "matchKeys": [ "-375623619" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SyncThru Web Service (Printers)", "isImportant": false, "isOpen": true, "matchKeys": [ "1483097076" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "BoaServer", "isImportant": false, "isOpen": true, "matchKeys": [ "1169183049" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Securepoint", "isImportant": false, "isOpen": true, "matchKeys": [ "1051648103" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Moodle", "isImportant": false, "isOpen": true, "matchKeys": [ "-438482901" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RADIX", "isImportant": false, "isOpen": true, "matchKeys": [ "-1492966240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CradlePoint Technology (Router)", "isImportant": false, "isOpen": true, "matchKeys": [ "1466912879" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "-167656799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Blackboard", "isImportant": false, "isOpen": true, "matchKeys": [ "-1593651747" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jupyter Notebook", "isImportant": false, "isOpen": true, "matchKeys": [ "-895963602" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HostMonster - Web hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "-972810761" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1703788174" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Rocket Chat", "isImportant": false, "isOpen": true, "matchKeys": [ "225632504" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "mofinetwork", "isImportant": false, "isOpen": true, "matchKeys": [ "-1702393021" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zabbix", "isImportant": false, "isOpen": true, "matchKeys": [ "892542951" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TOTOLINK (network)", "isImportant": false, "isOpen": true, "matchKeys": [ "547474373" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ossia (Provision SR) | Webcam/IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "-374235895" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1544230796" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "517158172" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jeedom (home automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "462223993" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JBoss Application Server 7", "isImportant": false, "isOpen": true, "matchKeys": [ "937999361" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Niagara Web Server / Tridium", "isImportant": false, "isOpen": true, "matchKeys": [ "1991562061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Solarwinds Serv-U FTP Server", "isImportant": false, "isOpen": true, "matchKeys": [ "812385209" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Aruba (Virtual Controller)", "isImportant": false, "isOpen": true, "matchKeys": [ "1142227528" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dell", "isImportant": false, "isOpen": true, "matchKeys": [ "-1153950306" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RemObjects SDK / Remoting SDK for .NET HTTP Server Microsoft", "isImportant": false, "isOpen": true, "matchKeys": [ "72005642" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zyxel ZyWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "-484708885" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VisualSVN Server", "isImportant": false, "isOpen": true, "matchKeys": [ "706602230" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jboss", "isImportant": false, "isOpen": true, "matchKeys": [ "-656811182" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "STARFACE VoIP Software", "isImportant": false, "isOpen": true, "matchKeys": [ "-332324409" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netis (network devices)", "isImportant": false, "isOpen": true, "matchKeys": [ "-594256627" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WHM", "isImportant": false, "isOpen": true, "matchKeys": [ "-649378830" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tandberg", "isImportant": false, "isOpen": true, "matchKeys": [ "97604680" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ghost (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015932800" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Avtech IP Surveillance (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-194439630" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Liferay Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "129457226" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-771764544" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Odoo", "isImportant": false, "isOpen": true, "matchKeys": [ "-617743584" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Polycom", "isImportant": false, "isOpen": true, "matchKeys": [ "77044418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cake PHP", "isImportant": false, "isOpen": true, "matchKeys": [ "980692677" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Exacq", "isImportant": false, "isOpen": true, "matchKeys": [ "476213314" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CheckPoint", "isImportant": false, "isOpen": true, "matchKeys": [ "794809961" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ubiquiti UNMS", "isImportant": false, "isOpen": true, "matchKeys": [ "1157789622" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1244636413" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WorldClient for MDaemon", "isImportant": false, "isOpen": true, "matchKeys": [ "1985721423" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netport Software (DSL)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1124868062" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "f5 Big IP", "isImportant": false, "isOpen": true, "matchKeys": [ "-335242539" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mailcow", "isImportant": false, "isOpen": true, "matchKeys": [ "2146763496" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "QNAP NAS Virtualization Station", "isImportant": false, "isOpen": true, "matchKeys": [ "-1041180225" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netgear", "isImportant": false, "isOpen": true, "matchKeys": [ "-1319025408" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gogs", "isImportant": false, "isOpen": true, "matchKeys": [ "917966895" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Trendnet IP camera", "isImportant": false, "isOpen": true, "matchKeys": [ "512590457" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Asustor", "isImportant": false, "isOpen": true, "matchKeys": [ "1678170702" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dahua", "isImportant": false, "isOpen": true, "matchKeys": [ "-1466785234" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Discuz!", "isImportant": false, "isOpen": true, "matchKeys": [ "-505448917" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Discuz!", "isImportant": false, "isOpen": true, "matchKeys": [ "Discuz!", "Comsenz", "cache/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "wdCP cloud host management system", "isImportant": false, "isOpen": true, "matchKeys": [ "255892555" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "1627330242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SmarterMail", "isImportant": false, "isOpen": true, "matchKeys": [ "-1935525788" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Seafile", "isImportant": false, "isOpen": true, "matchKeys": [ "-12700016" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "bintec elmeg", "isImportant": false, "isOpen": true, "matchKeys": [ "1770799630" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NETGEAR ReadyNAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-137295400" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iPECS", "isImportant": false, "isOpen": true, "matchKeys": [ "-195508437" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "bet365", "isImportant": false, "isOpen": true, "matchKeys": [ "-2116540786" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Reolink", "isImportant": false, "isOpen": true, "matchKeys": [ "-38705358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "idera", "isImportant": false, "isOpen": true, "matchKeys": [ "-450254253" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Proofpoint", "isImportant": false, "isOpen": true, "matchKeys": [ "-1630354993" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kerio Connect WebMail", "isImportant": false, "isOpen": true, "matchKeys": [ "-1678298769" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WorldClient for MDaemon", "isImportant": false, "isOpen": true, "matchKeys": [ "-35107086" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Realtek", "isImportant": false, "isOpen": true, "matchKeys": [ "2055322029" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-692947551" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Askey Cable Modem", "isImportant": false, "isOpen": true, "matchKeys": [ "-1710631084" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Askey Cable Modem", "isImportant": false, "isOpen": true, "matchKeys": [ "89321398" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JAWS Web Server (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "90066852" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JAWS Web Server (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "768231242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Homegrown Website Hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "-421986013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Technicolor / Thomson Speedtouch (Network / ADSL)", "isImportant": false, "isOpen": true, "matchKeys": [ "156312019" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DVR (Korean)", "isImportant": false, "isOpen": true, "matchKeys": [ "-560297467" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "-1950415971" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TP-LINK (Network Device)", "isImportant": false, "isOpen": true, "matchKeys": [ "1842351293" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Salesforce", "isImportant": false, "isOpen": true, "matchKeys": [ "1433417005" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache Haus", "isImportant": false, "isOpen": true, "matchKeys": [ "-632070065" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Untangle", "isImportant": false, "isOpen": true, "matchKeys": [ "1103599349" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shenzhen coship electronics co.", "isImportant": false, "isOpen": true, "matchKeys": [ "224536051" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1038500535" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-355305208" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-267431135" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-759754862" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-1200737715" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "75230260" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "1668183286" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "283740897" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Icecast Streaming Media Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1424295654" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NEC WebPro", "isImportant": false, "isOpen": true, "matchKeys": [ "1922032523" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Vivotek (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1654229048" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Microsoft IIS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1414475558" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Univention Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "-1697334194" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Portainer (Docker Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1424036600" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NOS Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-831826827" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tongda", "isImportant": false, "isOpen": true, "matchKeys": [ "-759108386" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CrushFTP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1022206565" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Endian Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-1225484776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kerio Control Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-631002664" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ferozo Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "2072198544" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kerio Control Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-466504476" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Cafe24 (Korea)", "isImportant": false, "isOpen": true, "matchKeys": [ "1251810433" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mautic (Open Source Marketing Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "1273982002" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NETIASPOT (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-978656757" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Multilaser", "isImportant": false, "isOpen": true, "matchKeys": [ "916642917" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Canvas LMS (Learning Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "575613323" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IBM Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1726027799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ADB Broadband SpA (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-587741716" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ARRIS (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-360566773" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-884776764" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WAMPSERVER", "isImportant": false, "isOpen": true, "matchKeys": [ "929825723" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Seagate Technology (NAS)", "isImportant": false, "isOpen": true, "matchKeys": [ "240136437" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "UPC Ceska Republica (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1911253822" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Flussonic (Video Streaming)", "isImportant": false, "isOpen": true, "matchKeys": [ "-393788031" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "366524387" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WAMPSERVER", "isImportant": false, "isOpen": true, "matchKeys": [ "443944613" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Metabase", "isImportant": false, "isOpen": true, "matchKeys": [ "1953726032" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2031183903" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "545827989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "967636089" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "362091310" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "2086228042" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CommuniGate", "isImportant": false, "isOpen": true, "matchKeys": [ "-1588746893" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ZTE (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1427976651" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "InfiNet Wireless | WANFleX (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1648531157" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mersive Solstice", "isImportant": false, "isOpen": true, "matchKeys": [ "938616453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Université Toulouse 1 Capitole", "isImportant": false, "isOpen": true, "matchKeys": [ "1632780968" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Digium (Switchvox)", "isImportant": false, "isOpen": true, "matchKeys": [ "2068154487" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PowerMTA monitoring", "isImportant": false, "isOpen": true, "matchKeys": [ "-1788112745" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SmartLAN/G", "isImportant": false, "isOpen": true, "matchKeys": [ "-644617577" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Checkpoint (Gaia)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1822098181" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "УТМ (Federal Service for Alcohol Market Regulation | Russia)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1131689409" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MailWizz", "isImportant": false, "isOpen": true, "matchKeys": [ "2127152956" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "1064742722" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015107330" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "openmediavault (NAS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-693082538" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "openWRT Luci", "isImportant": false, "isOpen": true, "matchKeys": [ "1941381095" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Honeywell", "isImportant": false, "isOpen": true, "matchKeys": [ "903086190" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "BOMGAR Support Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "829321644" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Nuxt JS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1442789563" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RoundCube Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-2140379067" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1897829998" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netgear (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1047213685" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SonarQube", "isImportant": false, "isOpen": true, "matchKeys": [ "1485257654" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Lupus Electronics XT", "isImportant": false, "isOpen": true, "matchKeys": [ "-299324825" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Vanderbilt SPC", "isImportant": false, "isOpen": true, "matchKeys": [ "-1162730477" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VZPP Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-1268095485" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baidu", "isImportant": false, "isOpen": true, "matchKeys": [ "1118684072" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ownCloud", "isImportant": false, "isOpen": true, "matchKeys": [ "-1616115760" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sentora", "isImportant": false, "isOpen": true, "matchKeys": [ "-2054889066" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Alfresco", "isImportant": false, "isOpen": true, "matchKeys": [ "1333537166" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Digital Keystone (DK)", "isImportant": false, "isOpen": true, "matchKeys": [ "-373674173" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WISPR (Airlan)", "isImportant": false, "isOpen": true, "matchKeys": [ "-106646451" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Synology VPN Plus", "isImportant": false, "isOpen": true, "matchKeys": [ "1235070469" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sentry", "isImportant": false, "isOpen": true, "matchKeys": [ "2063428236" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WatchGuard", "isImportant": false, "isOpen": true, "matchKeys": [ "15831193" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Web Client Pro", "isImportant": false, "isOpen": true, "matchKeys": [ "-956471263" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tecvoz", "isImportant": false, "isOpen": true, "matchKeys": [ "-1452159623" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MDaemon Remote Administration", "isImportant": false, "isOpen": true, "matchKeys": [ "99432374" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Paradox IP Module", "isImportant": false, "isOpen": true, "matchKeys": [ "727253975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DokuWiki", "isImportant": false, "isOpen": true, "matchKeys": [ "-630493013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sails", "isImportant": false, "isOpen": true, "matchKeys": [ "552597979" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FastPanel Hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "774252049" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "C-Lodop", "isImportant": false, "isOpen": true, "matchKeys": [ "-329747115" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jamf Pro Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1262005940" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "StruxureWare (Schneider Electric)", "isImportant": false, "isOpen": true, "matchKeys": [ "979634648" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Axcient Replibit Management Server", "isImportant": false, "isOpen": true, "matchKeys": [ "475379699" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Twonky Server (Media Streaming)", "isImportant": false, "isOpen": true, "matchKeys": [ "-878891718" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Windows Azure", "isImportant": false, "isOpen": true, "matchKeys": [ "-2125083197" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ISP Manager (Web Hosting Panel)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1151675028" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JupyterHub", "isImportant": false, "isOpen": true, "matchKeys": [ "1248917303" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CenturyLink Modem GUI Login (eg: Technicolor)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1908556829" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tecvoz", "isImportant": false, "isOpen": true, "matchKeys": [ "1059329877" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OPNsense", "isImportant": false, "isOpen": true, "matchKeys": [ "-1148190371" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ligowave (network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1467395679" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Rumpus", "isImportant": false, "isOpen": true, "matchKeys": [ "-1528414776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Spiceworks (panel)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2117390767" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TeamCity", "isImportant": false, "isOpen": true, "matchKeys": [ "-1944119648" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "INSTAR Full-HD IP-Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "-1748763891" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "GPON Home Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "251106693" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Alienvault", "isImportant": false, "isOpen": true, "matchKeys": [ "-1779611449" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Arbor Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-1745552996" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Accrisoft", "isImportant": false, "isOpen": true, "matchKeys": [ "-1275148624" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yasni", "isImportant": false, "isOpen": true, "matchKeys": [ "-178685903" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Slack", "isImportant": false, "isOpen": true, "matchKeys": [ "-43161126" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "innovaphone", "isImportant": false, "isOpen": true, "matchKeys": [ "671221099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shinobi (CCTV)", "isImportant": false, "isOpen": true, "matchKeys": [ "-10974981" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TP-LINK (Network Device)", "isImportant": false, "isOpen": true, "matchKeys": [ "1274078387" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Siemens OZW772", "isImportant": false, "isOpen": true, "matchKeys": [ "-336242473" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Lantronix (Spider)", "isImportant": false, "isOpen": true, "matchKeys": [ "882208493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ClaimTime (Ramsell Public Health & Safety)", "isImportant": false, "isOpen": true, "matchKeys": [ "-687783882" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Surfilter SSL VPN Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "-590892202" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kyocera (Printer)", "isImportant": false, "isOpen": true, "matchKeys": [ "-50306417" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Lucee!", "isImportant": false, "isOpen": true, "matchKeys": [ "784872924" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ricoh", "isImportant": false, "isOpen": true, "matchKeys": [ "1135165421" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Handle Proxy", "isImportant": false, "isOpen": true, "matchKeys": [ "926501571" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "579239725" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-689902428" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-600508822" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "656868270" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-2056503929" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1656695885" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "331870709" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "1241049726" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "998138196" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "322531336" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-401934945" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-613216179" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Chef Automate", "isImportant": false, "isOpen": true, "matchKeys": [ "-276759139" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gargoyle Router Management Utility", "isImportant": false, "isOpen": true, "matchKeys": [ "1862132268" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "KeepItSafe Management Console", "isImportant": false, "isOpen": true, "matchKeys": [ "-1738727418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Entronix Energy Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-368490461" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenProject", "isImportant": false, "isOpen": true, "matchKeys": [ "1836828108" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Unified Management Console (Polycom)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1775553655" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Moxapass ioLogik Remote Ethernet I/O Server", "isImportant": false, "isOpen": true, "matchKeys": [ "381100274" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HFS (HTTP File Server)", "isImportant": false, "isOpen": true, "matchKeys": [ "2124459909" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HFS (HTTP File Server)", "isImportant": false, "isOpen": true, "matchKeys": [ "731374291" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Traccar GPS tracking", "isImportant": false, "isOpen": true, "matchKeys": [ "-335153896" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IW", "isImportant": false, "isOpen": true, "matchKeys": [ "896412703" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Wordpress Under Construction Icon", "isImportant": false, "isOpen": true, "matchKeys": [ "191654058" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Combivox", "isImportant": false, "isOpen": true, "matchKeys": [ "-342262483" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NetComWireless (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "5542029" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Elastic (Database)", "isImportant": false, "isOpen": true, "matchKeys": [ "1552860581" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "1174841451" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "truVision (NVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1093172228" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SpamExperts", "isImportant": false, "isOpen": true, "matchKeys": [ "-1688698891" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sonatype Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-1546574541" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iDirect Canada (Network Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "-256828986" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenERP (now known as Odoo)", "isImportant": false, "isOpen": true, "matchKeys": [ "1966198264" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PKP (OpenJournalSystems) Public Knowledge Project", "isImportant": false, "isOpen": true, "matchKeys": [ "2099342476" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LiquidFiles", "isImportant": false, "isOpen": true, "matchKeys": [ "541087742" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ZyXEL (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-882760066" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Universal Devices (UD)", "isImportant": false, "isOpen": true, "matchKeys": [ "16202868" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "987967490" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gitea", "isImportant": false, "isOpen": true, "matchKeys": [ "1969970750" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TC-Group", "isImportant": false, "isOpen": true, "matchKeys": [ "-1734573358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Deluge Web UI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1589842876" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "AMH Cloud Host Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "1822002133" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OTRS (Open Ticket Request System)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2006308185" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Bosch Security Systems (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1702769256" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Node-RED", "isImportant": false, "isOpen": true, "matchKeys": [ "321591353" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "motionEye (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-923693877" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Saia Burgess Controls – PCD", "isImportant": false, "isOpen": true, "matchKeys": [ "-1547576879" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Arcadyan o2 box (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1479202414" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "D-Link (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1081719753" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Abilis (Network/Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "-166151761" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ghost (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1231681737" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "321909464" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "-1153873472" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "1095915848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "788771792" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "-1863663974" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "KeyHelp (Keyweb AG)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1267819858" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "KeyHelp (Keyweb AG)", "isImportant": false, "isOpen": true, "matchKeys": [ "726817668" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "GLPI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1474875778" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netcom Technology", "isImportant": false, "isOpen": true, "matchKeys": [ "5471989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CradlePoint", "isImportant": false, "isOpen": true, "matchKeys": [ "-1457536113" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MyASP", "isImportant": false, "isOpen": true, "matchKeys": [ "-736276076" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1343070146" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Lenel", "isImportant": false, "isOpen": true, "matchKeys": [ "538585915" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OkoFEN Pellematic", "isImportant": false, "isOpen": true, "matchKeys": [ "-625364318" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SimpleHelp (Remote Support)", "isImportant": false, "isOpen": true, "matchKeys": [ "1117165781" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "GraphQL", "isImportant": false, "isOpen": true, "matchKeys": [ "-1067420240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DNN (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1465479343" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "1232159009" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "1382324298" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "-1498185948" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ISPConfig", "isImportant": false, "isOpen": true, "matchKeys": [ "483383992" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Microsoft Outlook", "isImportant": false, "isOpen": true, "matchKeys": [ "-1249852061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hikvision IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "999357577" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "492290497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "AfterLogicWebMail System", "isImportant": false, "isOpen": true, "matchKeys": [ "-194791768" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "B2Bbuilder", "isImportant": false, "isOpen": true, "matchKeys": [ "492941040" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Next Generation Firewall Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "123821839" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Web Anti- Tampering Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "WEB Anti -Tampering", "cgi-bin/tamper_admin.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "YApi Visualization Interface Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "YApi", "id=\"yapi\"", "prd", "Visual Interface Management Platform " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JumpServer Bastion Host", "isImportant": false, "isOpen": true, "matchKeys": [ "-1162630024" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WeiPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "weiphp.css", "weiphp", "Public/static" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Nagios XI", "isImportant": false, "isOpen": true, "matchKeys": [ "Nagios XI", "nagiosxi", "Nagios" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ShowDoc", "isImportant": false, "isOpen": true, "matchKeys": [ "1969934080" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Synology NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "DiskStation", "webman/modules", "NAS" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "XieDa OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1850889691" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shanshi Network Technology Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Hillstone", "licenseAggrement", "GLOBAL_CONFIG.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "360 Tiandi new generation smart firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "360 Tiandi", "360", "360 Firewall " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "360 Netgod Firewall System", "isImportant": false, "isOpen": true, "matchKeys": [ "resources/image/logo_header.png", "360", "NetGod Firewall System " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SecGate 3600 Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "SecGate", "3600 Firewall", "css/lsec/login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Blue Shield Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Blue Shield", "Bluedon", "default/js/act/login.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LanProxy", "isImportant": false, "isOpen": true, "matchKeys": [ "LanProxy", "password", "lanproxy-config" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ManageEngine ADManager Plus", "isImportant": false, "isOpen": true, "matchKeys": [ "ADManager", "Hashtable.js", "ManageEngine" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "phpshe mall system", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by phpshe", "include/js/global.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Knight 74CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "74cms", "qscms.root", "index.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache2 Debian default page", "isImportant": false, "isOpen": true, "matchKeys": [ "Apache2 Debian Default", "It works!", "Debian Logo" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Grafana", "isImportant": false, "isOpen": true, "matchKeys": [ "Grafana", "login", "grafana-app" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Canal Admin", "isImportant": false, "isOpen": true, "matchKeys": [ "Canal Admin", "js/app" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IBOS Cool Office OA System", "isImportant": false, "isOpen": true, "matchKeys": [ "IBOS", "login-panel", "loginsubmit" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "RuoYi - Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "ry-ui", "username", "rememberme" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sino-Singapore Golden Shield Information Security Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "Sino-Singapore Golden Shield Information Security Management System", "login", "useusbkey" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zhongcheng Kexin Integrated Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "1632964065" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware vCenter", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware", "ID_VISDK", "download" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "AWS S3 Bucket", "isImportant": false, "isOpen": true, "matchKeys": [ "InvalidBucketName", "aliyuncs" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NetMind Cloud Device", "isImportant": false, "isOpen": true, "matchKeys": [ "Netheart Cloud Device", "favicon.png" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor NGAF", "isImportant": false, "isOpen": true, "matchKeys": [ "SANGFOR", "NGAF", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IBM HTTP Server", "isImportant": false, "isOpen": true, "matchKeys": [ "IBM HTTP Server", "Support" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "nps", "isImportant": false, "isOpen": true, "matchKeys": [ "nps", "ehang", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "Webmin", "session_login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Synology DiskStation", "isImportant": false, "isOpen": true, "matchKeys": [ "DiskStation", "File Server", "modules" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "SSLVPN", "rjweb", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fengwang Enterprise Flow Control Cloud Router", "isImportant": false, "isOpen": true, "matchKeys": [ "ifw8", "Enterprise -level flow control cloud router", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NetGuard Security Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Security System", "Network Guard Nebula", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Citrix Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Citrix Access Gateway", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sangfor Security Perception Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Security Perception Platform", "login.js", "apps" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache2 Ubuntu default page", "isImportant": false, "isOpen": true, "matchKeys": [ "Apache2 Ubuntu Default Page", "ubuntu-logo.png" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FineReport", "isImportant": false, "isOpen": true, "matchKeys": [ "ReportServer", "=fs" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CAS Single Sign-On", "isImportant": false, "isOpen": true, "matchKeys": [ "Central Authentication Service", "cas/login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hikvision Streaming Media Management Server", "isImportant": false, "isOpen": true, "matchKeys": [ "Streaming Media Management Server", "MSHTML", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "noVNC remote access", "isImportant": false, "isOpen": true, "matchKeys": [ "noVNC", "no", "host" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MessageSolution Enterprise Email Archiving (EEA)", "isImportant": false, "isOpen": true, "matchKeys": [ "MessageSolution", "index.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Alibaba Otter Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "Otter Manager", "channelList" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware vRealize Operations Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "vRealize", "VMware", "Identity Manager" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C-ER3200 router", "isImportant": false, "isOpen": true, "matchKeys": [ "ER3200", "home.asp", "h3c.com" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Anheng Cloud Bastion Server", "isImportant": false, "isOpen": true, "matchKeys": [ "DBAPPSecurity", "Anheng Cloud Bastion Machine " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Anheng Mingyu Security Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Mingyu Security Gateway " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Citrix Virtual Desktop", "isImportant": false, "isOpen": true, "matchKeys": [ "-1272756243" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SeaweedFS", "isImportant": false, "isOpen": true, "matchKeys": [ "1210969935" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FreeRDP remote RDP tool", "isImportant": false, "isOpen": true, "matchKeys": [ "-2052468252" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache ActiveMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "1766699363" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache-Skywalking", "isImportant": false, "isOpen": true, "matchKeys": [ "1929532064" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Parallels Default page", "isImportant": false, "isOpen": true, "matchKeys": [ "-1050786453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-134375033" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DzzOffice open source office system", "isImportant": false, "isOpen": true, "matchKeys": [ "-1961736892" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netcom Technology Gateway / Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "5471989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ThinkPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "ThinkPHP" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SuperMap iServer Web Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "1740191553" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Xiezhong OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1466673461" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jellyfin", "isImportant": false, "isOpen": true, "matchKeys": [ "-2069226242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fumeng Cloud CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "1533124028" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Xiezhong OA", "isImportant": false, "isOpen": true, "matchKeys": [ "scripts/cnoa.extra.js" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FastAdmin framework", "isImportant": false, "isOpen": true, "matchKeys": [ "assets/img/favicon.ico", "bootstrap.min.css", "navbar-toggle" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FastAdmin framework", "isImportant": false, "isOpen": true, "matchKeys": [ "ajax\\/upload", "assets/img/favicon.ico", "fastadmin" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "imo cloud office", "isImportant": false, "isOpen": true, "matchKeys": [ " Yongzhong Document Online Preview DCS", "www.yozodcs.com" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fanruan Data Decision System", "isImportant": false, "isOpen": true, "matchKeys": [ "> Data Decision System", "ReportServer?op" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kingsoft TimeOn Cloud Antivirus", "isImportant": false, "isOpen": true, "matchKeys": [ "TimeOn", "iepngfix/iepngfix_tilebg.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kingsoft Terminal Security", "isImportant": false, "isOpen": true, "matchKeys": [ "Terminal Security System", "setup/kanclient.exe", "iepngfix/iepngfix_tilebg.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "YzmCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "YzmCMS", "yzm-common.css" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WeQing - Public Platform Self-service Engine", "isImportant": false, "isOpen": true, "matchKeys": [ "WeQing - Public Platform Self-Service Engine", "www.w7.cc", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jspxcms", "isImportant": false, "isOpen": true, "matchKeys": [ "- Powered by Jspxcms", "template/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WordPress", "isImportant": false, "isOpen": true, "matchKeys": [ "wp-admin", "wp-content/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WordPress", "isImportant": false, "isOpen": true, "matchKeys": [ "wp-", "wp-content/themes/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jinhe OA", "isImportant": false, "isOpen": true, "matchKeys": [ "Jhsoft.Web.login", "PassWord.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hello Video Conference System", "isImportant": false, "isOpen": true, "matchKeys": [ "User login", "resources/commonImage/favicon.ico", "login/createQRCode.do" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LANMP default page", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>LANMP", "Congratulations", "wdlinux.cn", "This page can be deleted " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CentOS default page", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>Welcome to CentOS", "img/centos-logo.png", "centos.org" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baidu ueditor editor", "isImportant": false, "isOpen": true, "matchKeys": [ "ueditor.all.js", "UE.getEditor" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "phpinfo", "isImportant": false, "isOpen": true, "matchKeys": [ "phpinfo", "Virtual Directory Support" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kyan monitoring equipment", "isImportant": false, "isOpen": true, "matchKeys": [ "login_files", "platform", "Welcome to the system " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hue big data framework", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to Hue", "Query. Explore.", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Email Mail System", "isImportant": false, "isOpen": true, "matchKeys": [ "eYou", "q=login", "tpl/user" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Email Mail System", "isImportant": false, "isOpen": true, "matchKeys": [ "eYou", "q=help", "tpl/user" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "XAMPP default page", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to XAMPP" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NetGod's next generation ultra-fast firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Netshen Information Technology", "login", "Firewall " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zhongteng OA", "isImportant": false, "isOpen": true, "matchKeys": [ "systemAction", "zt_webframe", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Newsoft Technology - Jitong EWEBS", "isImportant": false, "isOpen": true, "matchKeys": [ "N-soft", "ClientDownload.xgi" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Igenus mail system", "isImportant": false, "isOpen": true, "matchKeys": [ "iGENUS", "login.php", "language" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TuChuang Library Cluster Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "interlib/common/", "self.location.href" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JEECMS", "isImportant": false, "isOpen": true, "matchKeys": [ "/r/cms/www", "shortcut icon" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache Hadoop", "isImportant": false, "isOpen": true, "matchKeys": [ "static/hadoop-st.png", "Cluster" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TamronOS IPTV system", "isImportant": false, "isOpen": true, "matchKeys": [ "TamronOS", "loginbox", "tamronos.com" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie RG -EW1200G", "isImportant": false, "isOpen": true, "matchKeys": [ "Ruijie", "/static/img/title.ico", "/js/app" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C Web Network Management", "isImportant": false, "isOpen": true, "matchKeys": [ "webui", "Web network management user login", "china_logo.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C ER6300G2", "isImportant": false, "isOpen": true, "matchKeys": [ "ER6300G2", "h3c.com", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C ER3100", "isImportant": false, "isOpen": true, "matchKeys": [ "ER3100", "h3c.com", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SDCMS Shendun Content Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "sdcms", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "SSLVPN", "rjsslvpn_encookie", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tianmai Technology Network Video Surveillance System", "isImportant": false, "isOpen": true, "matchKeys": [ "jsessionid", "Tianmai Technology", "Network Video Surveillance System " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WIFISKY-7 layer flow control router", "isImportant": false, "isOpen": true, "matchKeys": [ "WIFISKY", "adminusr", "Shenzhen Airspace Technology " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Backstage", "isImportant": false, "isOpen": true, "matchKeys": [ "Backstage " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MinIO", "isImportant": false, "isOpen": true, "matchKeys": [ "MinIO Browser" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TVT company products", "isImportant": false, "isOpen": true, "matchKeys": [ "492290497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Asset Lighthouse System", "isImportant": false, "isOpen": true, "matchKeys": [ "1708240621" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie NBR router", "isImportant": false, "isOpen": true, "matchKeys": [ "738520282" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Secondary Domain Name Distribution System", "isImportant": false, "isOpen": true, "matchKeys": [ "-2055778861" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jingyun Network Antivirus System", "isImportant": false, "isOpen": true, "matchKeys": [ "styles/images/logo.png", "login_form", "Antivirus " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VA virtual application management platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Res/Images/logo_va.png", "panel_login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "GitBook", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"GitBook", "gitbook" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Outlook", "isImportant": false, "isOpen": true, "matchKeys": [ "owa/auth", "Outlook", "logonDiv" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hikvision Network Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Standalone ( no platform )", "login_form" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Amaranten Smart DNS", "isImportant": false, "isOpen": true, "matchKeys": [ "DNS", "main.php?mod=member", "DNS_" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PHPOA collaborative office software", "isImportant": false, "isOpen": true, "matchKeys": [ "login.php", "Prompt Information", "showMsg" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mingzhi OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1591287747" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JBoss EAP", "isImportant": false, "isOpen": true, "matchKeys": [ "title>EAP", "eap.css", "JBoss" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "若依", "isImportant": false, "isOpen": true, "matchKeys": [ "ruoyi", "If I follow you", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Holographic AI Weak Current Network Integrated Operation and Maintenance Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Holographic AI", "g_is_hk", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yirui Authorization Access System", "isImportant": false, "isOpen": true, "matchKeys": [ "YiRui Authorized Access System " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "E-Tiller", "isImportant": false, "isOpen": true, "matchKeys": [ "Beijing Qinyun", "reader/view_abstract.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FangMail", "isImportant": false, "isOpen": true, "matchKeys": [ "fangmail/default/css/em_css.css", "fangmail/cgi/index.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tencent-Exmail", "isImportant": false, "isOpen": true, "matchKeys": [ "ssl_edition=mail.qq.com" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tencent-Exmail", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/getinvestigate?flowid=", "cgi-bin/bizmail_portal" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jira", "isImportant": false, "isOpen": true, "matchKeys": [ "jira.webresources", "com.atlassian.plugins" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FishEye", "isImportant": false, "isOpen": true, "matchKeys": [ "FESESSIONID=" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tianyue Network Security Audit System", "isImportant": false, "isOpen": true, "matchKeys": [ "Tianyue", "venustech", "func_login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jinhang Online Marking System", "isImportant": false, "isOpen": true, "matchKeys": [ "Jinhang", "jsyj", "Hengshui Jinhang " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kemai · Waxiao online business management software", "isImportant": false, "isOpen": true, "matchKeys": [ "Kemai", "Login.aspx", "Science Pulse " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Langtuo Health Hospital Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "static/mq/yaoxun_pbm_im.js", "js/app." ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Pinde Technology Medical Online Examination System", "isImportant": false, "isOpen": true, "matchKeys": [ "Examination System", "Character", "login.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "SPON IP network intercom broadcasting system", "isImportant": false, "isOpen": true, "matchKeys": [ "spon_base64.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NVS3000 integrated video surveillance platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Video Surveillance", "NVS3000 Comprehensive", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yinda Huizhi Smart Integrated Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "miniui", "Help?", "main.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yunxintong SMS Operation and Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Short message", "Simpla", "chklogin.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "AceNet Chiwei Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Technology", "login_commit.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Teleport Bastion Host", "isImportant": false, "isOpen": true, "matchKeys": [ "TELEPORT", "teleport.js", "login-account" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yii framework", "isImportant": false, "isOpen": true, "matchKeys": [ "yii.js", "yiii." ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "WPS deployment visualization platform", "isImportant": false, "isOpen": true, "matchKeys": [ "WPS Deployment Visualization Platform " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "phpstydy Windows", "isImportant": false, "isOpen": true, "matchKeys": [ "phpstudy for windows" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "epoint government service system", "isImportant": false, "isOpen": true, "matchKeys": [ "epoint-web-zwdt" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Aolian Communication Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-1356973161" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Bioreda", "isImportant": false, "isOpen": true, "matchKeys": [ "-1169502834" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tianzhi Smart Hospital Comprehensive Quality Supervision Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "1986460035" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Minio Browser", "isImportant": false, "isOpen": true, "matchKeys": [ "Minio Browser" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Management backend login", "isImportant": false, "isOpen": true, "matchKeys": [ "administrator", "Log in " ], "location": "title", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "360 TianQing", "isImportant": false, "isOpen": true, "matchKeys": [ "360 Sky Power " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Bohua NetDragon Information Security Integrated Machine", "isImportant": false, "isOpen": true, "matchKeys": [ "Bohua NetDragon Information Security All-in- One Machine " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LNMP one- click installation package default page", "isImportant": false, "isOpen": true, "matchKeys": [ "LNMP one- click installation package " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HDWiki", "isImportant": false, "isOpen": true, "matchKeys": [ "hd_sid=" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shenzhen Ruiming Driving Recorder", "isImportant": false, "isOpen": true, "matchKeys": [ "Log in to your MDVR" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "drupal" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei user-login", "isImportant": false, "isOpen": true, "matchKeys": [ "Huawei Auth-Http" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Prometheus Server", "isImportant": false, "isOpen": true, "matchKeys": [ "Prometheus Time Series Collection and Processing Server" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kubernetes", "isImportant": false, "isOpen": true, "matchKeys": [ "Kubernetes Dashboard" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "easypanel", "isImportant": false, "isOpen": true, "matchKeys": [ "easypanel", "vhost", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware", "ui-page", "portal/favicon" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware Horizon" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DeepVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "dptech_ssl", "sslvpn", "loginAPI.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "OpenShift Web Console", "isImportant": false, "isOpen": true, "matchKeys": [ "OpenShift Web Console" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Haoshitong", "isImportant": false, "isOpen": true, "matchKeys": [ "fsmeeting", "loginCheck.do", "app.result" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Blue Sea Cloud Box", "isImportant": false, "isOpen": true, "matchKeys": [ "Blue Sea Cloud Box", "mt_login", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "PhpWind", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"phpwind" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CmsEasy", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"CmsEasy" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "EmpireCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by EmpireCMS" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Emlog", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"emlog\"" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ECShop", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"ECSHOP" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hanweb - system", "isImportant": false, "isOpen": true, "matchKeys": [ "Da Han Edition", "Dahan Network", "hanweb.com' style='display:none'" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ESPCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "powered by espcms" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "KesionCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "ks_inc/common.js", "KesionCMS" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dongying Jinshi Software", "isImportant": false, "isOpen": true, "matchKeys": [ "aspNetHidden", "loginselect", "txtLoginName" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Haofeng Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Haofeng Firewall System Login " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "CMSTop", "isImportant": false, "isOpen": true, "matchKeys": [ "css/cmstop-common.css", "js/cmstop-common.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huayu Reporter", "isImportant": false, "isOpen": true, "matchKeys": [ "reporter", "login", "action.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Accounting International - Enterprise Management Software", "isImportant": false, "isOpen": true, "matchKeys": [ "index2.asp", "update/exec.asp", "images/full.gif" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Telecom Gateway Configuration Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "<TITLE> System Login", "login.php", "img/login_bg3.png", "360.cn" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FPExam Online Examination System (FPExam)", "isImportant": false, "isOpen": true, "matchKeys": [ "exam/logo/favicon.ico", "fangpage" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Spring Eureka", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>Eureka", "eureka" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "DeepSSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "DPSSLVPN", "SSL VPN Service", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Grafana", "isImportant": false, "isOpen": true, "matchKeys": [ "Grafana" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "byzoro - Security Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Beijing Baizhuo", "PatrolFlow", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ENESYS", "isImportant": false, "isOpen": true, "matchKeys": [ "dwr/interface/WebContextUtil.js" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "KVM_Chuangmeng Cloud Computing Management System", "isImportant": false, "isOpen": true, "matchKeys": [ " KVM_Chuangmeng Cloud Computing Management System " ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Renwoxing - Guanjiapo Distribution ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "Distribution ERP", "txt_DbName", "DownloadDriver.asp" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Little Bean CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "xhdcrm", "JS/XHD.js", "login.check.xhd" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Nnetgear router", "isImportant": false, "isOpen": true, "matchKeys": [ "NETGEAR" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Metabase", "isImportant": false, "isOpen": true, "matchKeys": [ "Metabase" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "4images", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by 4images", "4homepages" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Finecms", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"FineCMS" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NUUO Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "Network Video Recorder Login" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache ShenYu", "isImportant": false, "isOpen": true, "matchKeys": [ "id=\"httpPath", "th:text=\"${domain}" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Solar Network Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "-1871496583" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Changjie CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "-1068428644" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Wukong CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "872805507" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "e-cology operation and maintenance management platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-384583337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruiyou Tianyi - Application Virtualization System", "isImportant": false, "isOpen": true, "matchKeys": [ "DownLoad.XGI", "realor.cn", "dvLogin" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C SecPath Operation and Maintenance Audit System", "isImportant": false, "isOpen": true, "matchKeys": [ "1776863739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Xinhu OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1652488516" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MeterSphere", "isImportant": false, "isOpen": true, "matchKeys": [ "1023469568" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H2 Database Console", "isImportant": false, "isOpen": true, "matchKeys": [ "-525659379" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huilin ICP/iP Registration System", "isImportant": false, "isOpen": true, "matchKeys": [ "-556918553" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Flying Fish Star Router / Behavior Management", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"0.2;", "/home/login.html" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huashi Private Cloud CDN Live Broadcast Acceleration Server", "isImportant": false, "isOpen": true, "matchKeys": [ "img/dl.gif", "Huashi Meida", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Iceflow Network", "isImportant": false, "isOpen": true, "matchKeys": [ "Web Configuration Center", "/images/splash.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HuaXia ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "jshERP-boot", "platformConfig" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "78 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "/resource/javascript/system/runtime.min.js", "password" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "EnterCRM", "isImportant": false, "isOpen": true, "matchKeys": [ "Hangzhou Ensoft", "Ent.base.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ITC-CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "/mt_res_v3/js/common/common.js", "CMS" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Panabit-Panalog", "isImportant": false, "isOpen": true, "matchKeys": [ "img/logo.gif", "Maintain", "unamexx", "img/12.png" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei AR Web Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Huawei", "simple/style/default/image/login.png", "simple/view/ossn.html" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mingfei MCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "ms.js", "ms.http.js", "plugins" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Sunflower -SunLogin", "isImportant": false, "isOpen": true, "matchKeys": [ "{\"success\":false,\"msg\":\"Verification failure\"}" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "GROWATT system", "isImportant": false, "isOpen": true, "matchKeys": [ "login", "v3/js/odm/odm.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "Next Generation Firewall", "Ruijie Networks " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huilin Information Security Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "User Management Login", "login", "images/zh-CN/login_03.gif" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huawei Cloud Desktop", "isImportant": false, "isOpen": true, "matchKeys": [ "Desktop@FusionAccess", "/webui/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Qizhi Bastion Machine", "isImportant": false, "isOpen": true, "matchKeys": [ "fp_download", "login.php", "logo-icon-ico72.png" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TurboMail email system", "isImportant": false, "isOpen": true, "matchKeys": [ "TurboMail", "mailmain?type=login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "ANHENG Data Brain API Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "mssp-fe", "/static/imgs/logo.png" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Shanshi Network Technology Cloud Database Audit and Protection System", "isImportant": false, "isOpen": true, "matchKeys": [ "#!/dbSummary", "/lib/colResizable/" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Youth Software OA", "isImportant": false, "isOpen": true, "matchKeys": [ "/Content/qrlib/ligerUI/skins/" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kingsoft Terminal Security Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "iepngfix/iepngfix_tilebg.js", "mysqlStat" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Multimedia Information Publishing System", "isImportant": false, "isOpen": true, "matchKeys": [ "HowFor Web" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Baizhuo Smart Multi- Service Security Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "writeCustomBgImg.jsp", "baseajax", "LoginLogo" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "COSCO Kylin Bastion Server", "isImportant": false, "isOpen": true, "matchKeys": [ "admin.php", "controller=admin_index&action=login" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "China Mobile Cloud & NSFOCUS Log Audit System - log4j", "isImportant": false, "isOpen": true, "matchKeys": [ "/pisces/login/" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Apache APISIX", "isImportant": false, "isOpen": true, "matchKeys": [ "{\"error_msg\":\"404 Route Not Found\"}" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Netcom Technology · Internet Control Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Netcom Technology · Internet Control Gateway " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Feisi Network Patrol IT Operation and Maintenance System", "isImportant": false, "isOpen": true, "matchKeys": [ "1622043013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Richmail mail system", "isImportant": false, "isOpen": true, "matchKeys": [ "RichMail" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Richmail mail system", "isImportant": false, "isOpen": true, "matchKeys": [ "0;url=/webmail/" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Richmail mail system", "isImportant": false, "isOpen": true, "matchKeys": [ "richmail.config.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Byte Digital Cloud Desktop System", "isImportant": false, "isOpen": true, "matchKeys": [ "-1142582922" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Zhiyue HR Human Resources Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "images/ZY.LOGO.64.png" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "TUS-Nationwide Information Services UEM Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "#commonTip", "css/icomoon", "login", "wwLogin" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jin Wanwei Speed Link", "isImportant": false, "isOpen": true, "matchKeys": [ "GNRemote.dll?GNFunction=" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "JieLink+ intelligent terminal operation platform", "isImportant": false, "isOpen": true, "matchKeys": [ "JieLink<sup>+</sup>" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hejiang Dianqilai Customer Service System", "isImportant": false, "isOpen": true, "matchKeys": [ "const _scriptUrl", "login_logo" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iXCache", "isImportant": false, "isOpen": true, "matchKeys": [ "iXCache", "/login/userverify.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Aisino Invoicing Server", "isImportant": false, "isOpen": true, "matchKeys": [ "aisino.kps.console" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tax Control Server Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "sys/login.do", "resources/css/login_yzm.css" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Tianqing", "isImportant": false, "isOpen": true, "matchKeys": [ "index/logo", "Tianqing " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Xiaoyu Yilian Cloud Video Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "font_1957344_lqkodjqdbl.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Xiaoyu Yilian Cloud Video Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "static_source/localcdn/webrtc/web/favicon.ico" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Xiamen Express", "isImportant": false, "isOpen": true, "matchKeys": [ "jKPM6", "WebResource.axd" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "iDste fusion system support platform", "isImportant": false, "isOpen": true, "matchKeys": [ "iDste Fusion System Support Platform " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dahua Security DSS", "isImportant": false, "isOpen": true, "matchKeys": [ "User", "<meta http-equiv=\"refresh\"content=\"1;URL='/admin'\"/>" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "NSFOCUS Security Equipment", "isImportant": false, "isOpen": true, "matchKeys": [ "NSFOCUS" ], "location": "header", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dilangyun OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-179985729" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "1323738809" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Golden Eye Yunhua Advanced Threat Detection System", "isImportant": false, "isOpen": true, "matchKeys": [ "1747722638" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Workspace ONE Access", "isImportant": false, "isOpen": true, "matchKeys": [ "-1250474341" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Network Defense G01", "isImportant": false, "isOpen": true, "matchKeys": [ "-968234332" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Gitblit", "isImportant": false, "isOpen": true, "matchKeys": [ "gitblt-favicon.png", "gitblit" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C ER8300G2-X", "isImportant": false, "isOpen": true, "matchKeys": [ "H3C", "vld.bmp", "dis_login", "ER8300G2" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie Switch - Ruiyi", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/luci", "#f47f3e" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "H3C/ Anbotong / Renzixing /OEM series security products", "isImportant": false, "isOpen": true, "matchKeys": [ "webui/js/jquerylib/jquery-1.7.2.min.js" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "IP-guard", "isImportant": false, "isOpen": true, "matchKeys": [ "IP-guard", "sign/login" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ningdun integrated security authentication platform", "isImportant": false, "isOpen": true, "matchKeys": [ "am/ndkey.ico", "zhLanguagePng" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Donghua Medical Collaborative Office System", "isImportant": false, "isOpen": true, "matchKeys": [ "extcomponent/security/login.jsp", "login_dhc" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "An Ning Email System AnyMacro Mail", "isImportant": false, "isOpen": true, "matchKeys": [ "anymacro", "passre.php" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hikvision Integrated Security Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "dist/jquery.js", "home/locationIndex.action" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "HituxCMS -HituxCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered By HituxCMS", "ServiceCenter.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hotel Smart Marketing IPTV System", "isImportant": false, "isOpen": true, "matchKeys": [ "xsiptvp", "IPTV" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Langchi Xinchuang - Video Surveillance", "isImportant": false, "isOpen": true, "matchKeys": [ "Installplug.exe", "NVSID" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Dahua - Intelligent IoT Integrated Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "static/qwebchannel.js", "moment" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Fangzheng Xiangyu", "isImportant": false, "isOpen": true, "matchKeys": [ "e5style/login1.css", "e5workspace/security/captcha.do" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kingdee EAS", "isImportant": false, "isOpen": true, "matchKeys": [ "eassso", "portalClientHelper.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jitong EWEBS application virtualization", "isImportant": false, "isOpen": true, "matchKeys": [ "NewSoft", "xajax05/xajax_js/xajax_core.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Time and Space Friends", "isImportant": false, "isOpen": true, "matchKeys": [ "login.jsp?login", "Log in " ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Kangtong Electronic Cloud Broadcasting System", "isImportant": false, "isOpen": true, "matchKeys": [ "static/download/JSET99Setup.exe" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "xxl-job", "isImportant": false, "isOpen": true, "matchKeys": [ "/static/adminlte/dist/css/AdminLTE.min.css", "bower_components/PACE/pace.min.js" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hikvision Integrated Security Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "Integrated Security Management Platform " ], "location": "title", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "53BK Digital Newspaper System", "isImportant": false, "isOpen": true, "matchKeys": [ "/Comja/" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huidian Technology OA Collaborative Office System", "isImportant": false, "isOpen": true, "matchKeys": [ "/dojo/smartdot/css/dojo_smartdot.css" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Teleport Bastion Host", "isImportant": false, "isOpen": true, "matchKeys": [ "teleport.js", "login-type-oath", "bind-oath" ], "location": "body", "matchType": "all_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "V2 Conference Video Conferencing System", "isImportant": false, "isOpen": true, "matchKeys": [ "window.location.href=\"/Conf/index.jsp\"" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hysine Webtalk System", "isImportant": false, "isOpen": true, "matchKeys": [ "_webtalk/_cur/loginA.php", "WEBTALK" ], "location": "body", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Analytics Cloud", "isImportant": false, "isOpen": true, "matchKeys": [ "410106848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Mingyuan Cloud MIP Integration Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-834208471" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MapGIS Server Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-252149748" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Jinzhong Group Intelligent Logistics Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "-364449966" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Hikvision Integrated Security Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-808437027" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "LiveUC Enterprise Edition (LiveUC) | Video Conferencing", "isImportant": false, "isOpen": true, "matchKeys": [ "-637931821" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Ruijie SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "-1525950034" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Huace Monitoring and Early Warning System", "isImportant": false, "isOpen": true, "matchKeys": [ "-628229493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "35 Enterprise Mailbox System", "isImportant": false, "isOpen": true, "matchKeys": [ "1676919780" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Command and dispatch platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-1971504131" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "FE business collaboration platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-391577146" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Elib Library Cluster Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "478149598" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "1182206475" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Yinda Huizhi Intelligent Integrated Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "1170487960" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Maipu Multi- Service Convergence Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "-1234665500" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "Red Sea eHR Human Resources Management System", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015496453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web Application " }, { "accuracy": "lower", "describe": "MobileIron --Log4j", "isImportant": false, "isOpen": true, "matchKeys": [ "MobileIron User Portal: Sign In" ], "location": "title", "matchType": "any_keywords", "type": "Web Application " } ] } ================================================ FILE: src/main/java/EnumType/LocationType.java ================================================ package EnumType; import java.util.ArrayList; import java.util.List; public enum LocationType { CONFIG("config"), PATH("path"), TITLE("title"), BODY("body"), HEADER("header"), RESPONSE("response"), ICON_HASH("icon_hash"); private final String value; // 构造方法 LocationType(String value) { this.value = value; } // 获取枚举对应的字符串值 public String getValue() { return value; } // 根据字符串值获取对应的枚举 public static LocationType fromValue(String value) { for (LocationType type : LocationType.values()) { if (type.getValue().equalsIgnoreCase(value)) { return type; } } throw new IllegalArgumentException("Invalid location type: " + value); } /** * 将 LocationType 枚举的所有值转换为 List<String>。 * * @return 包含所有 LocationType 值的列表 */ public static String[] getValues() { // 创建一个可变的列表来存储字符串值 List<String> locationTypes = new ArrayList<>(); // 遍历枚举值并提取其对应的字符串值 for (LocationType type : LocationType.values()) { locationTypes.add(type.getValue()); } // 将 List<String> 转换为 String[] return locationTypes.toArray(new String[0]); } } ================================================ FILE: src/main/java/EnumType/MatchType.java ================================================ package EnumType; import java.util.ArrayList; import java.util.List; public enum MatchType { CONFIG("config"), ANY_KEYWORDS("any_keywords"), //匹配任意关键字规则 常见 支持||&&语法 ALL_KEYWORDS("all_keywords"), //匹配所有关键字规则 少见 支持||&&语法 ANY_REGULAR("any_regular"), //要求匹配任意正则 常见 ALL_REGULAR("all_regular"); //要求匹配所有正则 少见 private final String value; // 构造方法 MatchType(String value) { this.value = value; } // 获取枚举对应的字符串值 public String getValue() { return value; } // 根据字符串值获取对应的枚举 public static MatchType fromValue(String value) { for (MatchType type : MatchType.values()) { if (type.getValue().equalsIgnoreCase(value)) { return type; } } throw new IllegalArgumentException("Invalid match type: " + value); } /** * 将 matchType 枚举的所有值转换为 List<String>。 * * @return 包含所有 matchType 值的列表 */ public static String[] getValues() { // 创建一个可变的列表来存储字符串值 List<String> matchTypes = new ArrayList<>(); // 遍历枚举值并提取其对应的字符串值 for (MatchType type : MatchType.values()) { matchTypes.add(type.getValue()); } // 将 List<String> 转换为 String[] return matchTypes.toArray(new String[0]); } } ================================================ FILE: src/main/java/EnumType/RiskLevel.java ================================================ package EnumType; import java.util.ArrayList; import java.util.List; public enum RiskLevel { CONFIG("config"), //要求全匹配任意关键字规则 少见 HIGH("high"), MEDIUM("medium"), LOWER("lower"); private final String value; // 构造方法 RiskLevel(String value) { this.value = value; } // 获取枚举对应的字符串值 public String getValue() { return value; } // 根据字符串值获取对应的枚举 public static RiskLevel fromValue(String value) { for (RiskLevel type : RiskLevel.values()) { if (type.getValue().equalsIgnoreCase(value)) { return type; } } throw new IllegalArgumentException("Invalid match type: " + value); } /** * 将 riskLevel 枚举的所有值转换为 List<String>。 * * @return 包含所有 riskLevel 值的列表 */ public static String[] getValues() { // 创建一个可变的列表来存储字符串值 List<String> riskLevels = new ArrayList<>(); // 遍历枚举值并提取其对应的字符串值 for (RiskLevel type : RiskLevel.values()) { riskLevels.add(type.getValue()); } // 将 List<String> 转换为 String[] return riskLevels.toArray(new String[0]); } } ================================================ FILE: src/main/java/burp/AnalyseInfo.java ================================================ package burp; import EnumType.LocationType; import EnumType.MatchType; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import sqlUtils.Constants; import model.AnalyseUrlResultModel; import model.FingerPrintRule; import model.HttpMsgInfo; import model.HttpUrlInfo; import utilbox.TextUtils; import utils.*; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.regex.Pattern; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isEmptyObj; import static utils.CastUtils.isNotEmptyObj; import static utils.ElementUtils.*; public class AnalyseInfo { public static final String type = "type"; public static final String describe = "describe"; public static final String accuracy = "accuracy"; public static final String important = "important"; public static final String value = "value"; public static final String matchType = "matchType"; public static final String URL_KEY = "URL_KEY"; public static final String PATH_KEY = "PATH_KEY"; public static AnalyseUrlResultModel analyseMsgInfo(HttpMsgInfo msgInfo) { //1、实现响应敏感信息提取 JSONArray findInfoJsonArray = findSensitiveInfoByRules(msgInfo); findInfoJsonArray = CastUtils.deduplicateJsonArray(findInfoJsonArray); //去重提取结果 //stdout_println(LOG_DEBUG, String.format("[+] 敏感信息数量:%s -> %s", reqUrl, findInfoList.size())); //2、实现响应中的 URL 和 PATH 提取 Set<String> findUriSet = findUriInfoByRegular(msgInfo); //进行HTML解码 findUriSet = AnalyseInfoUtils.decodeHtml(findUriSet); //去除不可打印内容 findUriSet = AnalyseInfoUtils.keepAsciiPrintableChars(findUriSet); Map<String, List> urlOrPathMap = SeparateUrlOrPath(findUriSet); String reqUrl = msgInfo.getUrlInfo().getRawUrlUsual(); String reqPath = msgInfo.getUrlInfo().getPathToFile(); //采集 URL 处理 List<String> findUrlList = urlOrPathMap.get(URL_KEY); //stdout_println(LOG_DEBUG, String.format("[*] 初步采集URL数量:%s -> %s", reqUrl, findUrlList.size())); //实现响应url过滤 findUrlList = filterFindUrls(reqUrl, findUrlList, BurpExtender.onlyScopeDomain); //stdout_println(LOG_DEBUG, String.format("[*] 过滤重复URL内容:%s -> %s", reqUrl, findUrlList.size())); //采集 path 处理 List<String> findPathList = urlOrPathMap.get(PATH_KEY); //stdout_println(LOG_DEBUG, String.format("[*] 初步采集PATH数量:%s -> %s", reqUrl, findUrlList.size())); //实现响应Path过滤 findPathList = filterFindPaths(reqPath, findPathList, false); //stdout_println(LOG_DEBUG, String.format("[*] 过滤重复PATH内容:%s -> %s", reqUrl, findPathList.size())); //基于Path和请求URL组合简单的URL 已验证,常规网站采集的PATH生成的URL基本都是正确的 List<String> findApiList = AnalyseInfoUtils.concatUrlAddPath(reqUrl, findPathList); //stdout_println(LOG_DEBUG, String.format("[+] 简单计算API数量: %s -> %s", reqUrl, findApiList.size())); //实现 初步计算API的过滤 findApiList = filterFindUrls(reqUrl, findApiList, BurpExtender.onlyScopeDomain); //stdout_println(LOG_DEBUG, String.format("[*] 过滤重复API内容:%s -> %s", reqUrl, findApiList.size())); //判断是否有敏感信息 boolean hasImportant = isHasImportant(findInfoJsonArray); //返回 AnalyseInfoResultModel 结果数据 AnalyseUrlResultModel analyseResult = new AnalyseUrlResultModel( msgInfo.getUrlInfo().getRawUrlUsual(), findInfoJsonArray, findUrlList, findPathList, findApiList, hasImportant ); return analyseResult; } private static boolean isHasImportant(JSONArray findInfoJsonArray) { boolean hasImportant = false; if (findInfoJsonArray != null && findInfoJsonArray.size() > 0){ for (int i = 0; i < findInfoJsonArray.size(); i++) { Object item = findInfoJsonArray.get(i); if (item instanceof JSONObject) { JSONObject findInfo = (JSONObject) item; if (findInfo.getBoolean(important)){ hasImportant = true; stdout_println(LOG_DEBUG, String.format("[!] 发现重要敏感信息: %s", findInfo.toJSONString())); break; } } else { // 处理非 JSONObject 元素的情况 stdout_println(LOG_ERROR, "[!] 非 JSONObject 元素被发现: " + item.toString()); } } } return hasImportant; } /** * 整合过滤分析出来的URL列表 * @param reqPath * @param findUriList * @param filterChinese * @return */ private static List<String> filterFindPaths(String reqPath, List<String> findUriList, boolean filterChinese) { //跳过空列表的情况 if (isEmptyObj(findUriList)) return findUriList; //过滤重复内容 findUriList = CastUtils.deduplicateStringList(findUriList); //stdout_println(LOG_DEBUG, String.format("[*] 过滤重复PATH内容:%s", findUriList.size())); //过滤自身包含的Path (包含说明相同) findUriList = AnalyseUriFilter.filterUriBySelfContain(reqPath, findUriList); //stdout_println(LOG_DEBUG, String.format("[*] 过滤自身包含的PATH:%s", findUriList.size())); //过滤包含禁止关键字的PATH findUriList = AnalyseUriFilter.filterPathByContainUselessKey(findUriList, BurpExtender.CONF_BLACK_URI_PATH_KEYS); //stdout_println(LOG_DEBUG, String.format("[*] 过滤包含禁止关键字的PATH:%s", findUriList.size())); //过滤等于禁止PATH的PATH findUriList = AnalyseUriFilter.filterPathByEqualUselessPath(findUriList, BurpExtender.CONF_BLACK_EXTRACT_PATH_EQUAL); //stdout_println(LOG_DEBUG, String.format("[*] 过滤等于被禁止的PATH:%s", findUriList.size())); //过滤黑名单suffix findUriList = AnalyseUriFilter.filterBlackSuffixes(findUriList, BurpExtender.CONF_BLACK_URI_EXT_EQUAL); //stdout_println(LOG_DEBUG, String.format("[*] 过滤黑名单后缀:%s", findUriList.size())); //过滤包含中文的PATH if (filterChinese){ findUriList = AnalyseUriFilter.filterPathByContainChinese(findUriList); //stdout_println(LOG_DEBUG, String.format("[*] 过滤中文PATH内容:%s", findUriList.size())); } return findUriList; } /** * 整合过滤分析出来的 Path 列表 * @param reqUrl * @param urlList * @param onlyScopeDomain * @return */ public static List<String> filterFindUrls(String reqUrl, List<String> urlList, boolean onlyScopeDomain) { //跳过空列表的情况 if (isEmptyObj(urlList)) return urlList; //过滤重复内容 urlList = CastUtils.deduplicateStringList(urlList); //stdout_println(LOG_DEBUG, String.format("[*] 过滤重复URL内容:%s", urlList.size())); //对所有URL进行格式化 urlList = AnalyseUriFilter.formatUrls(urlList); //过滤黑名单host urlList = AnalyseUriFilter.filterBlackHosts(urlList, BurpExtender.CONF_BLACK_ROOT_URL); //stdout_println(LOG_DEBUG, String.format("[*] 过滤黑名单主机:%s", urlList.size())); //过滤黑名单Path urlList = AnalyseUriFilter.filterBlackPaths(urlList, BurpExtender.CONF_BLACK_URI_PATH_KEYS); //stdout_println(LOG_DEBUG, String.format("[*] 过滤黑名单路径:%s", urlList.size())); //过滤黑名单suffix urlList = AnalyseUriFilter.filterBlackSuffixes(urlList, BurpExtender.CONF_BLACK_URI_EXT_EQUAL); //stdout_println(LOG_DEBUG, String.format("[*] 过滤黑名单后缀:%s", urlList.size())); if (isNotEmptyObj(reqUrl)){ //格式化为URL对象进行操作 HttpUrlInfo urlInfo = new HttpUrlInfo(reqUrl); //过滤自身包含的URL (包含说明相同) //功能测试通过 urlList = AnalyseUriFilter.filterUriBySelfContain(urlInfo.getRawUrlUsual(), urlList); //stdout_println(LOG_DEBUG, String.format("[*] 过滤自身包含的URL:%s", urlList.size())); //仅保留主域名相关URL if (onlyScopeDomain){ urlList = AnalyseUriFilter.filterUrlByMainHost(urlInfo.getRootDomain(), urlList); //stdout_println(LOG_DEBUG, String.format("[*] 过滤非主域名URL:%s", urlList.size())); } } return urlList; } /** * 根据规则提取敏感信息 * @param msgInfo * @return */ public static JSONArray findSensitiveInfoByRules(HttpMsgInfo msgInfo) { // 使用HashSet进行去重,基于equals和hashCode方法判断对象是否相同 JSONArray findInfoJsonList = new JSONArray(); //预获取匹配位置 String reqPath = msgInfo.getUrlInfo().getPathToFile(); String respBody = new String(msgInfo.getRespInfo().getBodyBytes(), StandardCharsets.UTF_8); String respHeaders = new String(msgInfo.getRespInfo().getHeaderBytes(), StandardCharsets.UTF_8); String respContent = new String(msgInfo.getRespBytes(), StandardCharsets.UTF_8); String respTitle = msgInfo.getRespTitle(); //提前获取Title数据, 防止匹配次数过多 String respIconHash = msgInfo.getRespInfo().getIconHash(); //获取IconHash数据 //进行JSON解码 if( msgInfo.getRespInfo().getInferredMimeType().contains("JSON")|| IProxyScanner.forceDecodeUnicode){ respBody = TextUtils.decodeAll(respBody); respContent = TextUtils.decodeAll(respContent); } //遍历规则进行提取 for (FingerPrintRule rule : BurpExtender.fingerprintRules){ //忽略关闭的选项 // 过滤掉配置选项 if (!rule.getIsOpen()|| rule.getType().startsWith(Constants.RULE_CONF_PREFIX)){ continue; } // 根据不同的规则 配置 查找范围 String locationText; LocationType locationType; try { locationType = LocationType.fromValue(rule.getLocation()); } catch (IllegalArgumentException e) { // 处理未知位置类型,默认为 RESPONSE stderr_println(String.format("Error locationType was found!!! %s", e.getMessage())); locationType = LocationType.RESPONSE; } switch (locationType) { case PATH: locationText = reqPath; break; case TITLE: locationText = respTitle; break; case ICON_HASH: locationText = respIconHash; break; case BODY: locationText = respBody; break; case HEADER: locationText = respHeaders; break; case RESPONSE: default: locationText = respContent; break; } //当存在字符串不为空时进行匹配 if (locationText != null && locationText.length() > 0) { String currMatchType = rule.getMatchType(); List<String> currMatchKeys = rule.getMatchKeys(); //匹配任意关键字规则 if (currMatchType.equals(MatchType.ANY_KEYWORDS.getValue())){ for (String matchKey : currMatchKeys){ //判断matchKey是否包含语法 if(matchKey.contains("||")){ //查找每个关键字,这个方案循环次数比较多, Set<String> findContainKeys = findContainKeys(locationText, matchKey, "||"); if(!findContainKeys.isEmpty()){ JSONObject findInfo = formatMatchInfoToJson(rule, CastUtils.setToString(findContainKeys)); findInfoJsonList.add(findInfo); } } else { //默认情况都用&&切割一次 if(isContainAllKey(locationText, matchKey, false, "&&")){ JSONObject findInfo = formatMatchInfoToJson(rule, matchKey); findInfoJsonList.add(findInfo); } } } } //匹配全部关键字规则 else if (currMatchType.equals(MatchType.ALL_KEYWORDS.getValue())) { boolean allMatched = true; // 标志位,用于判断是否所有正则都匹配成功 Set<String> allGroups = new HashSet<>(); //存储所有匹配结果 for (String matchKey : currMatchKeys) { //判断matchKey是否包含语法 if (matchKey.contains("||")) { //查找每个关键字,这个方案循环次数比较多,后续如果卡的话 isContainOneKeys(locationText, matchKey, "||") Set<String> findContainKeys = findContainKeys(locationText, matchKey, "||"); if (findContainKeys.isEmpty()) { allMatched = false; break; } else { allGroups.addAll(findContainKeys); } } else { //默认情况都用&&切割一次 if (!isContainAllKey(locationText, matchKey, false, "&&")) { allMatched = false; break; } else { allGroups.add(matchKey); } } } // 如果所有关键字都匹配成功 就保存所有匹配的关键字 if (allMatched) findInfoJsonList.add(formatMatchInfoToJson(rule, CastUtils.setToString(allGroups))); } //匹配任意正则规则 else if (currMatchType.equals(MatchType.ANY_REGULAR.getValue())){ for (String matchPatter : currMatchKeys){ Set<String> groups = AnalyseInfoUtils.extractInfoWithChunk(locationText, matchPatter, IProxyScanner.maxPatterChunkSize); if (isNotEmptyObj(groups)) findInfoJsonList.add(formatMatchInfoToJson(rule, CastUtils.setToString(groups))); } } //匹配所有正则规则 else if (currMatchType.equals(MatchType.ALL_REGULAR.getValue())) { boolean allMatched = true; Set<String> allGroups = new HashSet<>(); //存储所有匹配结果 for (String pattern : currMatchKeys) { Set<String> groups = AnalyseInfoUtils.extractInfoWithChunk(locationText, pattern, IProxyScanner.maxPatterChunkSize); if (isEmptyObj(groups)) { allMatched = false; // 如果有一个正则没有匹配成功,则标志位置为 false break; // 提前退出循环 } else { allGroups.addAll(groups); } } // 如果所有正则都匹配成功 就保存所有匹配的信息 if (allMatched) findInfoJsonList.add(formatMatchInfoToJson(rule, CastUtils.setToString(allGroups))); } } } return findInfoJsonList; } /** * 基于规则和结果生成格式化的敏感信息存储结构 * @param rule * @param group * @return */ private static JSONObject formatMatchInfoToJson(FingerPrintRule rule, String group) { JSONObject jsonObject = new JSONObject(); jsonObject.put(type, rule.getType()); // "type": "敏感内容", jsonObject.put(describe, rule.getDescribe()); //"describe": "身份证", jsonObject.put(accuracy, rule.getAccuracy()); //"accuracy": "high" jsonObject.put(important, rule.getIsImportant()); //"isImportant": true, jsonObject.put(matchType, rule.getMatchType()); //匹配位置 jsonObject.put(value, group); return jsonObject; } /** * 提取响应体中的URL和PATH * @param msgInfo * @return */ public static Set<String> findUriInfoByRegular(HttpMsgInfo msgInfo) { //存储所有提取的URL/URI Set<String> allExtractUriSet = new HashSet<>(); //转换响应体,后续可能需要解决编码问题 String respBody = new String(msgInfo.getRespInfo().getBodyBytes(), StandardCharsets.UTF_8); String rawUrlUsual = msgInfo.getUrlInfo().getRawUrlUsual(); if (isNotEmptyObj(respBody) && respBody.trim().length() > 5 ){ //进行Json解码 if(msgInfo.getRespInfo().getInferredMimeType().contains("JSON")||IProxyScanner.forceDecodeUnicode){ respBody = TextUtils.decodeAll(respBody); } // 针对通用的页面提取 for (Pattern pattern:BurpExtender.URI_MATCH_REGULAR_COMPILE){ Set<String> extractUri = AnalyseInfoUtils.extractUriMode1(respBody, pattern, IProxyScanner.maxPatterChunkSize); allExtractUriSet.addAll(extractUri); stdout_println(LOG_DEBUG, String.format("[*] 常规模式提取URI: %s -> %s", rawUrlUsual, extractUri.size())); } // 针对webpack js页面的提取 判断文件名是否是JS后缀 if ("js".equals(msgInfo.getUrlInfo().getSuffix())){ Set<String> extractUri = respBody.length() > 30000 ? RespWebpackJsParser.parseWebpackSimpleChunk(respBody, IProxyScanner.maxPatterChunkSize) : RespWebpackJsParser.parseWebpackSimple(respBody); allExtractUriSet.addAll(extractUri); stdout_println(LOG_DEBUG, String.format("[*] Webpack提取URI: %s -> %s", rawUrlUsual, extractUri.size())); } } return allExtractUriSet; } /** * 拆分提取出来的Uri集合中的URl和Path * @param matchUriSet * @return */ public static Map<String, List> SeparateUrlOrPath(Set<String> matchUriSet) { Map<String, List> hashMap = new HashMap<>(); ArrayList<String> urlList = new ArrayList<>(); ArrayList<String> pathList = new ArrayList<>(); for (String uri : matchUriSet){ if (uri.contains("https://") || uri.contains("http://")){ urlList.add(uri); }else { pathList.add(uri); } } hashMap.put(URL_KEY, urlList); hashMap.put(PATH_KEY, pathList); return hashMap; } } ================================================ FILE: src/main/java/burp/BurpExtender.java ================================================ package burp; import com.alibaba.fastjson2.JSON; import database.DBService; import model.FingerPrintRule; import model.FingerPrintRulesWrapper; import ui.BasicHostInfoPanel; import ui.BasicUrlInfoPanel; import ui.Tabs; import utils.BurpFileUtils; import utils.BurpPrintUtils; import utils.ConfigUtils; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.PrintWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isEmptyObj; import static utils.CastUtils.isNotEmptyObj; public class BurpExtender implements IBurpExtender, IExtensionStateListener, IContextMenuFactory { private static IBurpExtenderCallbacks callbacks; private static PrintWriter stdout; private static PrintWriter stderr; private static IExtensionHelpers helpers; private static IProxyScanner iProxyScanner; private static Tabs tags; public static PrintWriter getStdout() { return stdout; } public static PrintWriter getStderr() { return stderr; } public static IBurpExtenderCallbacks getCallbacks() { return callbacks; } public static IExtensionHelpers getHelpers() { return helpers; } public static IProxyScanner getIProxyScanner() { return iProxyScanner; } public static String extensionName = "APIFinderPlus"; public static List<FingerPrintRule> fingerprintRules; //响应体分割的大小 字符串长度 public static int maxPatterChunkSizeDefault=20000; //最大支持存储的响应 比特长度 public static int maxStoreRespBodyLenDefault=500000; //自动处理任务的时间频率,性能越低,频率越应该慢 public static int monitorExecutorIntervalsDefault=4; //是否启用增强的path过滤模式 //需要设置默认关闭,暂时功能没有完善、对于URL无法访问的情况没有正常处理、导致卡顿 public static boolean dynamicPathFilterIsOpenDefault=false; //是否启用自动记录每个请求的PATH //自动记录功能应该开启,不然没有pathTree生成 public static boolean autoRecordPathIsOpenDefault=true; //是否进行自动PathTree生成URL public static boolean autoPathsToUrlsIsOpenDefault=true; //是否进行递归URL扫描 public static boolean autoRecursiveIsOpenDefault=false; //开关插件的监听功能 public static boolean proxyListenIsOpenDefault=false; //自动刷新未访问URL的功能 public static boolean autoRefreshUnvisitedIsOpenDefault=false; //自动刷新表格 public static boolean autoRefreshUiIsOpenDefault=false; //自动解码响应Unicode字符 public static boolean forceDecodeUnicodeDefault=false; //自动添加由path直接拼接出来的url到未访问URL列表中 public static boolean addApiToUnvisitedUrlsDefault=true; //一些需要被排除|允许的情况 public static List<String> CONF_DEFAULT_PERFORMANCE = new ArrayList<>(); //默认的性能配置选项 public static List<String> CONF_WHITE_ROOT_URL = new ArrayList<>(); //仅保留的白名单主机,为空时忽略 public static List<String> CONF_WHITE_RECORD_PATH_STATUS = new ArrayList<>(); //作为正常访问结果的状态码 public static List<String> CONF_BLACK_URI_EXT_EQUAL = new ArrayList<>(); //不检查的URL后缀 public static List<String> CONF_BLACK_URI_PATH_KEYS = new ArrayList<>(); //不检查的URL路径 public static List<String> CONF_BLACK_ROOT_URL = new ArrayList<>(); //不检查的ROOT URL 关键字 public static List<String> CONF_BLACK_AUTO_RECORD_PATH = new ArrayList<>(); //不检查的ROOT URL 关键字 public static List<String> CONF_BLACK_AUTO_RECURSE_SCAN = new ArrayList<>(); //不检查的ROOT URL 关键字 public static List<String> CONF_BLACK_RECORD_PATH_TITLE = new ArrayList<>(); // 不记录到PATH 的 TITLE 关键字 public static List<String> CONF_BLACK_EXTRACT_PATH_EQUAL = new ArrayList<>(); //需要忽略的响应提取路径 完整路径 public static List<String> CONF_BLACK_EXTRACT_INFO_KEYS = new ArrayList<>(); //需要忽略的响应提取信息 public static List<String> CONF_REGULAR_EXTRACT_URIS = new ArrayList<>(); //URL提取正则表达式 public static List<Pattern> URI_MATCH_REGULAR_COMPILE = new ArrayList<>(); //存储编译后的正则表达式 //添加HTTP请求相关参数配置 public static List<String> CONF_BLACK_RECURSE_REQ_PATH_KEYS = new ArrayList<>(); //禁止递归访问的URL路径[包含]此项任一元素 public static List<String> CONF_RECURSE_REQ_HTTP_METHODS = new ArrayList<>(); //递归访问URL时的HTTP请求方法 public static List<String> CONF_RECURSE_REQ_HTTP_PARAMS = new ArrayList<>(); //递归访问URL时的HTTP请求参数 private static DBService dbService; //数据库实例 public static int SHOW_MSG_LEVEL = LOG_DEBUG; //显示消息级别 public static String configName = "finger-important.json"; public static boolean onlyScopeDomain = false; //是否仅显示本主机域名的URL @Override public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) { this.callbacks = callbacks; this.helpers = callbacks.getHelpers(); this.stdout = new PrintWriter(callbacks.getStdout(), true); this.stderr = new PrintWriter(callbacks.getStderr(), true); new BurpPrintUtils(this.stdout, this.stderr); //初始化输出类 SwingUtilities.invokeLater(new Runnable() { public void run() { // 读取配置文件参数 String configJson = BurpFileUtils.ReadPluginConfFile(callbacks, configName, StandardCharsets.UTF_8); // 加载配置规则 if(isNotEmptyObj(configJson)){ FingerPrintRulesWrapper rulesWrapper; try{ rulesWrapper = JSON.parseObject(configJson, FingerPrintRulesWrapper.class); } catch (Exception e){ stderr_println(LOG_ERROR, String.format("[!] JSON.parseObject Config Error:[%s]", e.getMessage())); configJson = BurpFileUtils.ReadPluginConfFile(callbacks, configName, Charset.forName("GBK")); rulesWrapper = JSON.parseObject(configJson, FingerPrintRulesWrapper.class); } // 使用Fastjson的parseObject方法将JSON字符串转换为Rule对象 fingerprintRules = rulesWrapper.getFingerprint(); ConfigUtils.reloadConfigArrayListFromRules(fingerprintRules); stdout_println(LOG_INFO, String.format("[*] Load Config Rules Size: %s", fingerprintRules.size())); } if (isEmptyObj(fingerprintRules)){ stderr_println(LOG_ERROR, "[!] 配置文件加载出错!!!"); return; } //加载UI 标签界面 tags = new Tabs(callbacks, extensionName); //初始化数据配置 dbService = DBService.getInstance(); dbService.initDBConnection(); dbService.initCreateTables(); //当数据库文件大于5G时自动清空数据库文件 dbService.clearBigDB(5); //注册监听操作 iProxyScanner = new IProxyScanner(); callbacks.registerProxyListener(iProxyScanner); // 注册插件状态监听操作 callbacks.registerExtensionStateListener(BurpExtender.this); callbacks.registerContextMenuFactory(BurpExtender.this); //注册右键菜单Factory //设置插件已加载完成 stdout_println(LOG_INFO, String.format("[+] Extension [%s] Loaded Successfully ...", extensionName)); }}); } @Override public void extensionUnloaded() { // 扩展卸载时,立刻关闭线程池 stdout_println(LOG_DEBUG, "[+] Extension Will Unloaded, Cleaning Resources ing ..."); // 立刻关闭线程池 if (iProxyScanner.executorService != null) { // 尝试立即关闭所有正在执行的任务 List<Runnable> notExecutedTasks = iProxyScanner.executorService.shutdownNow(); stdout_println(LOG_DEBUG, "[+] Try to Stop All Tasks, The Number of Not Executed Tasks:" + notExecutedTasks.size()); } //停止UI的定时任务 // 停止面板更新器 BasicUrlInfoPanel.stopTimerBasicUrl(); BasicHostInfoPanel.stopTimerBasicHost(); // 关闭计划任务 IProxyScanner.shutdownMonitorExecutor(); stdout_println(LOG_DEBUG, "[+] The Scheduled Task is Shutdown Successfully..."); // 关闭数据库连接 if (dbService != null) { dbService.closeConnection(); stdout_println(LOG_DEBUG, "[+] The Database Connection is Disconnected Successfully..."); } stdout_println(LOG_INFO, String.format("[-] Extension [%s] Unloaded Complete .", this.extensionName)); } //callbacks.registerContextMenuFactory(this);//必须注册右键菜单Factory //实现右键 感谢原作者Conanjun @Override public List<JMenuItem> createMenuItems(IContextMenuInvocation invocation) { final IHttpRequestResponse[] messages = invocation.getSelectedMessages(); JMenuItem menuItem = new JMenuItem(String.format("Send to %s", BurpExtender.extensionName)); menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { for (final IHttpRequestResponse message : messages) { IProxyScanner.addRightScanTask(message); } } }); return Arrays.asList(menuItem); } } ================================================ FILE: src/main/java/burp/IProxyScanner.java ================================================ package burp; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import database.*; import model.*; import sqlUtils.CommonFetchData; import sqlUtils.CommonUpdateStatus; import sqlUtils.Constants; import sqlUtils.UnionTableSql; import ui.BasicHostConfigPanel; import ui.BasicUrlConfigPanel; import utilbox.HelperPlus; import utils.*; import java.util.*; import java.util.concurrent.*; import static burp.BurpExtender.*; import static utils.BurpPrintUtils.*; import static utils.CastUtils.*; import static utils.ElementUtils.isContainOneKey; import static utils.ElementUtils.isEqualsOneKey; public class IProxyScanner implements IProxyListener { public static int totalRequestCount = 0; //记录所有经过插件的请求数量 public static RecordHashMap urlScanRecordMap = new RecordHashMap(); //记录已加入扫描列表的URL 防止重复扫描 public static ThreadPoolExecutor executorService = null; public static ScheduledExecutorService monitorExecutor; //响应体进行正则分割时的默认大小 public static int maxPatterChunkSize; //最大支持存储的响应 比特长度 public static int maxStoreRespBodyLen; //自动处理任务的时间频率,性能越低,频率越应该慢 public static int monitorExecutorIntervals; //是否启用增强的path过滤模式 //需要设置默认关闭,暂时功能没有完善、对于URL无法访问的情况没有正常处理、导致卡顿 public static boolean dynamicPathFilterIsOpen; //是否启用自动记录每个请求的PATH //自动记录功能应该开启,不然没有pathTree生成 public static boolean autoRecordPathIsOpen; //是否进行自动PathTree生成URL public static boolean autoPathsToUrlsIsOpen; //是否进行递归URL扫描 public static boolean autoRecursiveIsOpen; //开关插件的监听功能 public static boolean proxyListenIsOpen; //自动刷新未访问URL的功能 public static boolean autoRefreshUnvisitedIsOpen; //自动刷新UI的功能 public static boolean autoRefreshUiIsOpen; //自动解码Json和Unicode的功能 public static boolean forceDecodeUnicode; //将path直接拼接出来的URL发送到未访问的URL列表中 public static boolean addApiToUnvisitedUrls; //存储每个host的动态响应对比关系 public static Map<String, Map<String,Object>> urlCompareMap = new HashMap<>(); //在动态响应对比关系生成前,需要把响应信息先存起来,等后续再进行处理 private static ConcurrentHashMap<String, Map<String,Object>> waitingUrlCompareMap = new ConcurrentHashMap<>(); //持久化保存对象的Hash private String urlCompareMapCacheFile = String.format("%s.urlCompareMap.json", configName); private String urlCompareMapHistoryHash = null; //设置最大进程数量 private int maxPoolSize; public IProxyScanner() { //开关的 默认值配置 maxPatterChunkSize = maxPatterChunkSizeDefault; maxStoreRespBodyLen = maxStoreRespBodyLenDefault; monitorExecutorIntervals = monitorExecutorIntervalsDefault; dynamicPathFilterIsOpen = dynamicPathFilterIsOpenDefault; autoRecordPathIsOpen = autoRecordPathIsOpenDefault; autoPathsToUrlsIsOpen = autoPathsToUrlsIsOpenDefault; autoRecursiveIsOpen = autoRecursiveIsOpenDefault; proxyListenIsOpen = proxyListenIsOpenDefault; autoRefreshUnvisitedIsOpen = autoRefreshUnvisitedIsOpenDefault; autoRefreshUiIsOpen = autoRefreshUiIsOpenDefault; forceDecodeUnicode = forceDecodeUnicodeDefault; addApiToUnvisitedUrls = addApiToUnvisitedUrlsDefault; //加载缓存过滤器 urlCompareMap = BurpFileUtils.LoadJsonFromFile(urlCompareMapCacheFile); // 获取操作系统内核数量 int availableProcessors = Runtime.getRuntime().availableProcessors(); int coreCount = Math.min(availableProcessors, 16); maxPoolSize = coreCount * 2; long keepAliveTime = 60L; // 创建一个足够大的队列来处理您的任务 BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(10000); executorService = new ThreadPoolExecutor( coreCount, //CorePoolSize 线程池中始终保持运行的线程数 maxPoolSize, //线程池中的活动线程达到coreCount并且还有任务等待执行时 线程池可以扩展到的最大线程数 keepAliveTime, //如果线程池中的线程数超过coreCount,那么超出的线程将在60秒内被终止,除非它们在这段时间内获得新任务。 TimeUnit.SECONDS, workQueue, //BlockingQueue,用于保存等待执行的任务。当线程池中的线程数达到maxPoolSize时,新的任务会被放入队列中等待执行。 Executors.defaultThreadFactory(), //创建新线程。默认的工厂会创建具有默认优先级的守护线程。 new ThreadPoolExecutor.AbortPolicy() // 当workQueue满了且线程数达到maxPoolSize时,线程池会使用AbortPolicy来处理额外的任务 即抛出RejectedExecutionException。 // 可以根据需要替换为其他的策略,如CallerRunsPolicy(调用者运行),DiscardPolicy(丢弃任务),或DiscardOldestPolicy(丢弃队列中最老的任务)。 ); stdout_println(LOG_INFO,"[+] run executor maxPoolSize: " + coreCount + " ~ " + maxPoolSize + ", monitorExecutorIntervals: " + monitorExecutorIntervals); //使用单一的后台线程来执行所有周期性或定时任务。这通常用于那些不需要并行处理的定时任务,例如监控、定期日志记录等。 monitorExecutor = Executors.newSingleThreadScheduledExecutor(); startDatabaseMonitor(); } /** * 添加右键扫描任务 */ public static void addRightScanTask(IHttpRequestResponse iInterceptedProxyMessage) { if (true){ //记录并更新UI面板中的扫描计数 totalRequestCount += 1; BasicUrlConfigPanel.lbRequestCountOnUrl.setText(String.valueOf(totalRequestCount)); BasicHostConfigPanel.lbRequestCountOnHost.setText(String.valueOf(totalRequestCount)); //解析当前请求的信息 HttpMsgInfo msgInfo = new HttpMsgInfo(iInterceptedProxyMessage); String rawUrlUsual = msgInfo.getUrlInfo().getRawUrlUsual(); //看URL识别是否报错 不记录报错情况 if (msgInfo.getUrlInfo().getUrlToFileUsual() == null){ stdout_println(LOG_ERROR,"[-] URL转化失败 跳过url识别:" + rawUrlUsual); return; } if (msgInfo.getRespBytes() == null || msgInfo.getRespBytes().length == 0) { stdout_println(LOG_DEBUG,"[-] 没有响应内容 跳过插件处理:" + rawUrlUsual); return; } //判断是否是正常的响应 不记录无响应情况 if(autoRecordPathIsOpen && !msgInfo.getUrlInfo().getPathToDir().equals("/") //忽略没有目录的选项 && isEqualsOneKey(msgInfo.getRespStatusCode(), CONF_WHITE_RECORD_PATH_STATUS, false) //保留200|403等响应码的路径 && !isContainOneKey(msgInfo.getUrlInfo().getUrlToFileUsual(), CONF_BLACK_AUTO_RECORD_PATH, false) //忽略禁止自动进行有效PATH记录的目标 && !isContainOneKey(msgInfo.getRespInfo().getRespTitle(), CONF_BLACK_RECORD_PATH_TITLE, false) //忽略禁止自动进行有效PATH记录的响应标题 ){ executorService.submit(() -> enhanceRecordPathFilter(msgInfo, dynamicPathFilterIsOpen)); } executorService.submit(() -> { //更新所有有响应的主动访问请求URL记录到数据库中 //记录请求记录到数据库中(记录所有请求) RecordUrlTable.insertOrUpdateAccessedUrl(msgInfo); }); //判断URL是否已经扫描过 String msgHash = msgInfo.getMsgHash(); if (urlScanRecordMap.get(msgHash) < 1) { //应该放到后面,确保已经记录数据,不然会被过滤掉 urlScanRecordMap.add(msgHash); executorService.submit(() -> { //加入请求列表 insertOrUpdateReqDataAndReqMsgData(msgInfo,"Right"); }); } } } @Override public void processProxyMessage(boolean messageIsRequest, final IInterceptedProxyMessage iInterceptedProxyMessage) { if(!proxyListenIsOpen){ return; } if (!messageIsRequest) { //记录并更新UI面板中的扫描计数 totalRequestCount += 1; BasicUrlConfigPanel.lbRequestCountOnUrl.setText(String.valueOf(totalRequestCount)); BasicHostConfigPanel.lbRequestCountOnHost.setText(String.valueOf(totalRequestCount)); //解析当前请求的信息 HttpMsgInfo msgInfo = new HttpMsgInfo(iInterceptedProxyMessage); String reqRootUrl = msgInfo.getUrlInfo().getRootUrlUsual(); String rawUrlUsual = msgInfo.getUrlInfo().getRawUrlUsual(); //看URL识别是否报错 不记录报错情况 if (msgInfo.getUrlInfo().getUrlToFileUsual() == null){ stdout_println(LOG_ERROR,"[-] URL转化失败 跳过url识别:" + rawUrlUsual); return; } //如果白名单开启,对于其他URL直接忽略 if (!isContainOneKey(reqRootUrl, CONF_WHITE_ROOT_URL, true)){ //stdout_println(LOG_DEBUG,"[-] 不匹配白名单域名 跳过url识别:" + rawUrlUsual); return; } //匹配黑名单域名 黑名单域名相关的文件和路径都是无用的 if(isContainOneKey(reqRootUrl, CONF_BLACK_ROOT_URL, false)){ //stdout_println(LOG_DEBUG,"[-] 匹配黑名单域名 跳过url识别:" + rawUrlUsual); return; } if (msgInfo.getRespBytes() == null || msgInfo.getRespBytes().length == 0) { stdout_println(LOG_DEBUG,"[-] 没有响应内容 跳过插件处理:" + rawUrlUsual); return; } //判断是否是正常的响应 不记录无响应情况 if(autoRecordPathIsOpen && !msgInfo.getUrlInfo().getPathToDir().equals("/") //忽略没有目录的选项 && isEqualsOneKey(msgInfo.getRespStatusCode(), CONF_WHITE_RECORD_PATH_STATUS, false) //保留200|403等响应码的路径 && !isContainOneKey(msgInfo.getUrlInfo().getUrlToFileUsual(), CONF_BLACK_AUTO_RECORD_PATH, false) //忽略禁止自动进行有效PATH记录的目标 && !isContainOneKey(msgInfo.getRespInfo().getRespTitle(), CONF_BLACK_RECORD_PATH_TITLE, false) //忽略禁止自动进行有效PATH记录的响应标题 ){ executorService.submit(() -> enhanceRecordPathFilter(msgInfo, dynamicPathFilterIsOpen)); } //保留favicon.ico 但是排除其他后缀数据 List<String> faviconKeys = Arrays.asList("favicon", ".ico"); if (!isContainOneKey(msgInfo.getUrlInfo().getPathToFile(), faviconKeys, false)){ // 排除黑名单后缀 || 排除黑名单路径 "jquery.js|xxx.js" 这些JS文件是通用的、无价值的、 if(isEqualsOneKey(msgInfo.getUrlInfo().getSuffix(), CONF_BLACK_URI_EXT_EQUAL, false) || isContainOneKey(msgInfo.getUrlInfo().getPathToFile(), CONF_BLACK_URI_PATH_KEYS, false)) { //stdout_println(LOG_DEBUG, "[-] 匹配黑名单后缀|路径 跳过url识别:" + rawUrlUsual); return; } } executorService.submit(() -> { //更新所有有响应的主动访问请求URL记录到数据库中 //记录请求记录到数据库中(记录所有请求) RecordUrlTable.insertOrUpdateAccessedUrl(msgInfo); }); // 看status是否为30开头 || 看status是否为4 403 404 30x 都是没有敏感数据和URl的,可以直接忽略 if (String.valueOf(msgInfo.getRespStatusCode()).startsWith("3") || String.valueOf(msgInfo.getRespStatusCode()).startsWith("4")){ //stdout_println(LOG_DEBUG, "[-] 匹配30X|404 页面 跳过url识别:" + rawUrlUsual); return; } //判断URL是否已经扫描过 String msgHash = msgInfo.getMsgHash(); if (urlScanRecordMap.get(msgHash) < 1) { //应该放到后面,确保已经记录数据,不然会被过滤掉 urlScanRecordMap.add(msgHash); executorService.submit(() -> { //加入请求列表 insertOrUpdateReqDataAndReqMsgData(msgInfo,"Proxy"); }); } } else { //解析当前请求的信息 HttpMsgInfo msgInfo = new HttpMsgInfo(iInterceptedProxyMessage); String reqRootUrl = msgInfo.getUrlInfo().getRootUrlUsual(); //看URL识别是否报错 //如果白名单开启, //匹配黑名单域名 // 排除黑名单后缀 //排除黑名单路径文件 if (msgInfo.getUrlInfo().getUrlToFileUsual() == null ||!isContainOneKey(reqRootUrl, CONF_WHITE_ROOT_URL, true) ||isContainOneKey(reqRootUrl, CONF_BLACK_ROOT_URL, false) ||isEqualsOneKey(msgInfo.getUrlInfo().getSuffix(), CONF_BLACK_URI_EXT_EQUAL, false) ||isContainOneKey(msgInfo.getUrlInfo().getPathToFile(), CONF_BLACK_URI_PATH_KEYS, false) ){ return; } executorService.submit(() -> { //记录请求记录到数据库中(记录所有请求) RecordUrlTable.insertOrUpdateAccessedUrl(msgInfo); }); } } /** * 增强的有效路径判断过滤函数 */ public static void enhanceRecordPathFilter(HttpMsgInfo msgInfo, boolean openDynamicFilter) { if (!openDynamicFilter){ executorService.submit(() -> { //保存网站相关的所有 PATH, 便于后续path反查的使用 当响应状态 In [200 | 403 | 405] 说明路径存在 方法不准确, 暂时关闭 RecordPathTable.insertOrUpdateRecordPath(msgInfo); stdout_println(LOG_DEBUG, String.format("[*] Direct Record req Base Url: %s", msgInfo.getUrlInfo().getUrlToPathUsual())); }); } else { String reqRootUrl = msgInfo.getUrlInfo().getRootUrlUsual(); String reqUrlToFile = msgInfo.getUrlInfo().getUrlToFileUsual(); //首先转换为响应Map Map<String, Object> respFieldsMap = new RespFieldsModel(msgInfo.getRespInfo()).getAllFieldsAsMap(); //如果还没有生成对应的过滤条件 if (!urlCompareMap.containsKey(reqRootUrl)){ //存储未进行对比的目标,后续通过定时任务再进行对比 waitingUrlCompareMap.put(reqUrlToFile, respFieldsMap); //记录状态为正在生成,避免重复调用 GenerateDynamicFilterMap urlCompareMap.put(reqRootUrl, null); executorService.submit(() -> { //计算动态过滤条件 Map<String, Object> filterModel = RespFieldCompareutils.generateDynamicFilterMap(msgInfo, true); urlCompareMap.put(reqRootUrl, filterModel); }); } else { Map<String, Object> currentFilterMap = urlCompareMap.get(reqRootUrl); //如果正在生成过滤条件 if (currentFilterMap == null){ //存储未进行对比的目标,后续通过定时任务再进行对比 waitingUrlCompareMap.put(reqUrlToFile, respFieldsMap); } else { //如果已经生成过滤条件 //当存在对比规则的时候,就进行对比,没有规则,说明目录猜不出来,只能人工添加 executorService.submit(() -> { //插入数据库记录 当过滤条件为空时直接插入路径、过滤条件不为空时,就保存所有正常状态的结果 if (currentFilterMap.isEmpty() || !RespFieldCompareutils.sameFieldValueIsEquals(respFieldsMap, currentFilterMap, false)) { RecordPathTable.insertOrUpdateRecordPath(msgInfo); stdout_println(LOG_DEBUG, String.format("[+] Dynamic Compare Record req Base Url: %s", msgInfo.getUrlInfo().getUrlToPathUsual())); } }); } } } } /** * 合并添加请求数据和请求信息为一个函数 */ private static void insertOrUpdateReqDataAndReqMsgData(HttpMsgInfo msgInfo, String reqSource) { //防止响应体过大 if (msgInfo.getRespBytes().length > maxStoreRespBodyLen){ byte[] respBytes = Arrays.copyOf(msgInfo.getRespBytes(), maxStoreRespBodyLen); msgInfo.setRespBytes(respBytes); } //存储请求体|响应体数据 int msgDataIndex = ReqMsgDataTable.insertOrUpdateMsgData(msgInfo); if (msgDataIndex > 0){ // 存储到URL表 int insertOrUpdateOriginalDataIndex = ReqDataTable.insertOrUpdateReqData(msgInfo, msgDataIndex, reqSource); if (insertOrUpdateOriginalDataIndex > 0) stdout_println(LOG_INFO, String.format("[+] Success Add Task: %s -> msgHash: %s -> reqSource:%s", msgInfo.getUrlInfo().getUrlToFileUsual(), msgInfo.getMsgHash(), reqSource)); } } /** * 启动动态监听的数据处理 */ private void startDatabaseMonitor() { monitorExecutor.scheduleAtFixedRate(() -> { executorService.submit(() -> { try { //当添加进程还比较多的时候,暂时不进行响应数据处理 if (executorService.getActiveCount() >= 6) return; //定时清理URL记录表 防止无用数据占用空间过大 if (CommonFetchData.fetchTableCounts(RecordUrlTable.tableName) > 500){ stdout_println(LOG_INFO, "[*] cleaning the RecordUrlTable"); DBService.clearTable(RecordUrlTable.tableName); } //存储一下当前的动态过滤器 如果当前实际的过滤map内容和历史存储的内容不一样时,就写入到文件中 String currentJsonHash = RespHashUtils.calcCRC32(CastUtils.toJsonString(urlCompareMap)); if (!currentJsonHash.equals(urlCompareMapHistoryHash)){ urlCompareMapHistoryHash = currentJsonHash; BurpFileUtils.writeToPluginPathFileNotEx(urlCompareMapCacheFile, CastUtils.toJsonString(urlCompareMap)); } //获取需要解析的响应体数据并进行分析 然后插入到URL结果分析表 List<Integer> msgDataIndexList = ReqDataTable.fetchMsgDataIndexListByRunStatus(maxPoolSize, Constants.ANALYSE_WAIT); if (msgDataIndexList.size() > 0){ //更新对应的ids为检查中 防止其他进程获取这些数据 CommonUpdateStatus.updateStatusByMsgDataIndexList(ReqDataTable.tableName, msgDataIndexList, Constants.ANALYSE_ING); //循环进行数据获取和分析操作 for (int msgDataIndex : msgDataIndexList){ //逐个 获取 msgDataIndex 对应的数据 . 一次性获取数据太多了 ReqMsgDataModel msgData = ReqMsgDataTable.fetchMsgDataById(msgDataIndex); if (msgData != null){ HttpMsgInfo msgInfo = new HttpMsgInfo( msgData.getReqUrl(), msgData.getReqBytes(), msgData.getRespBytes(), msgData.getMsgHash() ); if (!msgData.getMsgHash().equals(msgInfo.getMsgHash())){ stderr_println(LOG_ERROR, String.format("[!] 发生严重错误 URL的新旧Hash不一致: %s -> %s", msgData.getMsgHash(), msgInfo.getMsgHash())); } //进行数据分析 AnalyseUrlResultModel analyseResult = AnalyseInfo.analyseMsgInfo(msgInfo); //存入分析结果 if(isNotEmptyObj(analyseResult.getInfoArray()) || isNotEmptyObj(analyseResult.getPathList()) || isNotEmptyObj(analyseResult.getUrlList())){ //将初次分析结果写入数据库 int analyseDataIndex = AnalyseUrlResultTable.insertOrUpdateBasicAnalyseResult(msgInfo, analyseResult); if (analyseDataIndex > 0){ stdout_println(LOG_INFO, String.format("[+] Analysis Result Write Success: %s -> %s", msgInfo.getUrlInfo().getRawUrlUsual(), msgInfo.getMsgHash())); } else { stderr_println(LOG_ERROR, String.format("[!] Analysis Result Write Error: %s -> %s", msgInfo.getUrlInfo().getRawUrlUsual(), msgInfo.getMsgHash())); } } else { //提示没有提取出任何信息的情况 考虑将没有提取成功的情况也写入数据库,实际上可能没啥意义,理论上会更加完整 stdout_println(LOG_DEBUG, String.format("[-] Analysis Result Is NULL: %s -> %s", msgInfo.getUrlInfo().getRawUrlUsual(), msgInfo.getMsgHash())); } } } //更新对应的ids为分析完成,实际上没啥用 CommonUpdateStatus.updateStatusByMsgDataIndexList(ReqDataTable.tableName, msgDataIndexList, Constants.ANALYSE_END); return; } // 新增 获取URL分析结果表中的数据,将其加入到HOST分析结果表 // 判断 URL分析结果数据表 中 是否存在没有加入到 HOST分析结果表的数据 waiting状态 List<String> urlResultMsgHashList = CommonFetchData.fetchMsgHashByRunStatus(AnalyseUrlResultTable.tableName, Constants.ANALYSE_WAIT, maxPoolSize); if (urlResultMsgHashList.size() > 0){ //更新对应的ids为检查中 防止其他进程获取这些数据 CommonUpdateStatus.updateStatusByMsgHashList(AnalyseUrlResultTable.tableName, urlResultMsgHashList, Constants.ANALYSE_ING); //由于数据不是很大,可以一次性获取需要处理的结果 List<AnalyseUrlResultModel> AnalyseUrlResultModels = AnalyseUrlResultTable.fetchUrlResultByMsgHashList(urlResultMsgHashList); //循环插入数据 到HOST结果表 for (AnalyseUrlResultModel analyseUrlResultModel : AnalyseUrlResultModels){ AnalyseHostResultModel analyseHostResultModel = new AnalyseHostResultModel(analyseUrlResultModel); AnalyseHostResultTable.insertOrUpdateAnalyseHostResult(analyseHostResultModel, addApiToUnvisitedUrls); } //更新对应的ids为分析完成,实际上没啥用 CommonUpdateStatus.updateStatusByMsgHashList(AnalyseUrlResultTable.tableName, urlResultMsgHashList, Constants.ANALYSE_END); return; } //清理在等待动态过滤Map生成过程中没有处理的响应对象 if (dynamicPathFilterIsOpen && isNotEmptyObj(waitingUrlCompareMap)){ // 创建一个ArrayList来保存所有的键,这是一个安全的迭代方式 ArrayList<String> keys = new ArrayList<>(waitingUrlCompareMap.keySet()); // 遍历键的列表 对每个缓存目标进行检查,看看对应的URL过滤信息是否已经生成了 for (String reqUrl : keys) { Map<String,Object> respFieldsMap = waitingUrlCompareMap.get(reqUrl); String rootUrl = new HttpUrlInfo(reqUrl).getRootUrlUsual(); Map<String, Object> currentFilterMap = urlCompareMap.get(rootUrl); if (currentFilterMap != null){ waitingUrlCompareMap.remove(reqUrl); if(isNotEmptyObj(currentFilterMap) && !RespFieldCompareutils.sameFieldValueIsEquals(respFieldsMap, currentFilterMap, false)){ int setStatusCode = respFieldsMap.get("StatusCode") == null ? 299: (int) respFieldsMap.get("StatusCode"); RecordPathTable.insertOrUpdateRecordPath(reqUrl, setStatusCode); stdout_println(LOG_DEBUG, String.format("[+] Insert Temp Record req Base Url: %s", reqUrl)); } }else { urlCompareMap.put(rootUrl, new HashMap<>()); stdout_println(String.format("[!] 未成功生成[%s]的动态响应过滤关系! 置空处理", rootUrl)); } } // 先返回进行其他操作 return; } //任务2、从path记录表中读取新增的网站路径,用于更新PathTree信息, 为动态计算 path to url 做准备 List<Integer> recordPathIds = CommonFetchData.fetchIdsByRunStatus(RecordPathTable.tableName, Constants.ANALYSE_WAIT, maxPoolSize * 2); if (recordPathIds.size() > 0){ //更新对应的ids为检查中 防止其他进程获取这些数据 CommonUpdateStatus.updateStatusByIds(RecordPathTable.tableName, recordPathIds, Constants.ANALYSE_ING); //由于数据不是很大,可以一次性获取需要处理的结果 List<RecordPathDirsModel> recordPathDirsModels = RecordPathTable.fetchPathRecordsByStatus(Constants.ANALYSE_ING); for (RecordPathDirsModel recordPathModel : recordPathDirsModels) { //根据新增的路径生成路径树 PathTreeModel pathTreeModel = PathTreeUtils.genPathsTree(recordPathModel); if (pathTreeModel != null){ //合并|插入新的路径树 int pathTreeIndex = PathTreeTable.insertOrUpdatePathTree(pathTreeModel); if (pathTreeIndex > 0) stdout_println(LOG_DEBUG, String.format("[+] Path Tree Update Success: %s",pathTreeModel.getRootUrl())); } } //更新对应的ids为检查完毕 CommonUpdateStatus.updateStatusByIds(RecordPathTable.tableName,recordPathIds, Constants.ANALYSE_END); } if (autoPathsToUrlsIsOpen){ //任务 获取 基准路径树 小于 PathTree基准的数据进行更新 List<FindPathModel> findPathModelList = UnionTableSql.fetchHostTableNeedUpdatePathDataList(maxPoolSize); if (findPathModelList.size()>0){ for (FindPathModel findPathModel:findPathModelList) { stdout_println(LOG_DEBUG, String.format("[*] 获取动态更新PATHTree进行重计算 PathNum: %s", findPathModel.getFindPath().size())); findPathsToUrlsByPathTree(findPathModel); } return; } } // 自动递归查询功能 if (autoRecursiveIsOpen && executorService.getActiveCount() < 2){ //获取一个未访问URL列表 executorService.submit(() -> { //将URL访问过程作为一个基本任务外放, 可能会频率过快, 目前没有问题 List<UnVisitedUrlsModel> unVisitedUrlsModels = AnalyseHostResultTable.fetchAllUnVisitedUrlsWithLimit(1); for (UnVisitedUrlsModel unVisitedUrlsModel: unVisitedUrlsModels){ accessUnVisitedUrlsModel(unVisitedUrlsModel, true); } }); return; } } catch (Exception e) { stderr_println(String.format("[!] scheduleAtFixedRate error: %s", e.getMessage())); e.printStackTrace(); } }); }, 0, monitorExecutorIntervals, TimeUnit.SECONDS); } /** * 进行URl访问测试 * @param unVisitedUrlsModel 需要进行访问的URL数据 * @param ignoreBlackRecurseHost 是否不递归黑名单限制的域名 */ public static void accessUnVisitedUrlsModel(UnVisitedUrlsModel unVisitedUrlsModel, boolean ignoreBlackRecurseHost) { if (unVisitedUrlsModel != null){ //获取URL String rootUrl = unVisitedUrlsModel.getRootUrl(); List<String> unvisitedUrls = unVisitedUrlsModel.getUnvisitedUrls(); //获取 这个Root URL 对应的最新的 请求体和响应体 List<String> referHeaders = null; ReqMsgDataModel reqMsgDataModel = ReqMsgDataTable.fetchMsgDataByRootUrlDesc(rootUrl); if (isEmptyObj(reqMsgDataModel)){ stderr_println(LOG_ERROR, String.format("[!] fetch MsgData By Like [%s] is NULL", rootUrl)); } else { //获取请求头作为参考数据 HelperPlus helperPlus = HelperPlus.getInstance(); referHeaders = helperPlus.getHeaderList(true, reqMsgDataModel.getReqBytes()); } //记录准备加入的请求 List<String> finalReferHeaders = referHeaders; for (String reqUrl:unvisitedUrls){ if (urlScanRecordMap.get(reqUrl) < 1){ //记录已访问的URL urlScanRecordMap.add(reqUrl); //防止循环扫描 // 记录URL已经扫描 不一定合适,因为没有扫描的URL很难处理 RecordUrlTable.insertOrUpdateAccessedUrl(reqUrl,299); //格式化URL HttpUrlInfo urlInfo = new HttpUrlInfo(reqUrl); //不递归扫描黑名单内的主机 //需要 放在记录URL后面 不然每次都会获取到这个目标 导致无法忽略正常扫描 if (ignoreBlackRecurseHost //禁止自动进行未访问URL扫描的目标RootUrl关键字 && isContainOneKey(urlInfo.getRootUrlUsual(), CONF_BLACK_AUTO_RECURSE_SCAN, false) //禁止递归访问的URL路径关键字 && isContainOneKey(urlInfo.getPathToFile(), CONF_BLACK_RECURSE_REQ_PATH_KEYS, false) ){ continue; } //记录总请求数增加 totalRequestCount += 1; try { //递归请求参数 for (String reqMethod: CONF_RECURSE_REQ_HTTP_METHODS){ //递归请求方法列表 for (String reqHttpParam: CONF_RECURSE_REQ_HTTP_PARAMS){ //循环处理请求方法 //发起HTTP请求 stdout_println(LOG_DEBUG, String.format("[*] Start Request Url: %s <--> %s <--> %s", reqUrl, reqMethod, reqHttpParam)); IHttpRequestResponse requestResponse = null; //进行http请求时,先测试连接是否成功 if (BurpHttpUtils.AddressCanConnectWithCache(urlInfo)){ //requestResponse = BurpHttpUtils.makeHttpRequest(reqUrl, finalReferHeaders); //makeHttpRequest(String reqMethod, String reqUrl, List<String> referReqHeaders, byte[] reqBody) requestResponse = BurpHttpUtils.makeHttpRequest(reqMethod, reqUrl, reqHttpParam, finalReferHeaders); } if (requestResponse != null) { HttpMsgInfo msgInfo = new HttpMsgInfo(requestResponse); //重新更新所有有响应的主动访问请求URL记录到数据库中 RecordUrlTable.insertOrUpdateAccessedUrl(msgInfo); //加入请求分析列表 if (msgInfo.getRespInfo().getRespLength() > 0){ insertOrUpdateReqDataAndReqMsgData(msgInfo,"Auto"); } //保存网站相关的所有 PATH, 便于后续path反查的使用 当响应状态 In [200 | 403 | 405] 说明路径存在 if(autoRecordPathIsOpen && !msgInfo.getUrlInfo().getPathToDir().equals("/") //忽略没有目录的选项 && isEqualsOneKey(msgInfo.getRespStatusCode(), CONF_WHITE_RECORD_PATH_STATUS, false) //保留200|403等响应码的路径 && !isContainOneKey(msgInfo.getUrlInfo().getUrlToFileUsual(), CONF_BLACK_AUTO_RECORD_PATH, false) //忽略禁止自动进行有效PATH记录的目标 && !isContainOneKey(msgInfo.getRespInfo().getRespTitle(), CONF_BLACK_RECORD_PATH_TITLE, false) //忽略禁止自动进行有效PATH记录的响应标题 ){ enhanceRecordPathFilter(msgInfo, dynamicPathFilterIsOpen); } } else { stdout_println(LOG_ERROR, String.format("[-] Failed Request Url: %s", reqUrl)); } } } Thread.sleep(500); } catch (InterruptedException e) { stderr_println(LOG_ERROR, String.format("Thread.sleep Error: %s", e.getMessage())); e.printStackTrace(); } } } //如果没有配置忽略黑名单主机,表明是右键调用,此时需要强制清空未访问数据 if (!ignoreBlackRecurseHost){ AnalyseHostResultTable.clearUnVisitedUrlsByRootUrls(Collections.singletonList(rootUrl)); } } } /** * 重复使用的独立的 path to url 路径计算+更新函数 */ private void findPathsToUrlsByPathTree(FindPathModel findPathModel) { if (findPathModel != null) { int findPathId = findPathModel.getId(); String rootUrl = findPathModel.getRootUrl(); JSONArray findPathArray = findPathModel.getFindPath(); //如果没有找到路径, 直接返回 if (isEmptyObj(findPathArray)) return; // 从数据库中获取当前 reqRootUrl 的 PathTree PathTreeModel pathTreeModel = PathTreeTable.fetchPathTreeByRootUrl(rootUrl); //如果 PATH TREE都没有添加过, pathTreeModel 就是空的 if (pathTreeModel == null){ //如果 PATH TREE 不应该是空的,因为任务二已经添加过了, stderr_println(LOG_ERROR, String.format("[!] 获取 [%s] 对应的 PathTree 失败!!! 可能需要手动生成PathTree!!!", rootUrl)); return; } Integer currBasicPathNum = pathTreeModel.getBasicPathNum(); JSONObject currPathTree = pathTreeModel.getPathTree(); // 当路径树不为空 且 不是根目录时 可以计算新的URL列表 if (isNotEmptyObj(currPathTree) && isNotEmptyObj(currPathTree.getJSONObject("ROOT"))) { List<String> findUrlsList = new ArrayList<>(); //遍历路径列表,开始进行查询 for (Object findPath: findPathArray){ //把路径放在 路径树 中去查找 JSONArray nodePath = PathTreeUtils.findNodePathInTree(currPathTree, (String) findPath); //没有查询到,就进行下一次查询 if (isEmptyObj(nodePath)) continue; //查询到结果就组合成URL,加到查询结果中 for (Object prefix:nodePath){ //组合URL、findNodePath、path String prefixPath = (String) prefix; prefixPath = prefixPath.replace("ROOT", rootUrl); String findUrl = AnalyseInfoUtils.concatUrlAddPath(prefixPath, (String) findPath); findUrlsList.add(findUrl); } } // 去重、格式化、过滤 不符合规则的URL findUrlsList = AnalyseInfo.filterFindUrls(rootUrl, findUrlsList, BurpExtender.onlyScopeDomain); boolean notHasNewFindUrl = true; if (findUrlsList.size() > 0){ //判断查找到的URL是全新的 //1、获取所有 id 对应的原始 findUrlsList PathToUrlsModel dynamicUrlsModel = AnalyseHostResultTable.fetchDynamicUrlsDataById(findPathId); List<String> rawPathToUrls = dynamicUrlsModel.getPathToUrls(); //2、计算新找到的URl的数量 List<String> newAddUrls = CastUtils.listReduceList(findUrlsList, rawPathToUrls); if (newAddUrls.size() > 0){ //TODO 排除已找到URL中的已访问URL //3、将当前新找到的URL合并更新 dynamicUrlsModel.setPathToUrls(CastUtils.listAddList(findUrlsList, rawPathToUrls)); List<String> rawUnvisitedUrls = dynamicUrlsModel.getUnvisitedUrls(); dynamicUrlsModel.setUnvisitedUrls(CastUtils.listAddList(rawUnvisitedUrls, newAddUrls)); dynamicUrlsModel.setBasicPathNum(currBasicPathNum); //4、更新动态的URL数据 int apiDataIndex = AnalyseHostResultTable.updateDynamicUrlsDataByModel(dynamicUrlsModel); if (apiDataIndex > 0){ notHasNewFindUrl = false; //标记已找到新的URL了 stdout_println(LOG_DEBUG, String.format("[+] New UnvisitedUrls: addUrls:[%s] + rawUrls:[%s] -> newUrls:[%s]", newAddUrls.size(),rawUnvisitedUrls.size(),dynamicUrlsModel.getUnvisitedUrls().size())); } } } // 5、没有找到新路径时,仅需要更新基础计数即可 if (notHasNewFindUrl) { AnalyseHostResultTable.updateDynamicUrlsBasicNumById(findPathId, currBasicPathNum); } } } } /** * 监听线程关闭函数 */ public static void shutdownMonitorExecutor() { // 关闭监控线程池 if (monitorExecutor != null && !monitorExecutor.isShutdown()) { monitorExecutor.shutdown(); try { // 等待线程池终止,设置一个合理的超时时间 if (!monitorExecutor.awaitTermination(5, TimeUnit.SECONDS)) { // 如果线程池没有在规定时间内终止,则强制关闭 monitorExecutor.shutdownNow(); } } catch (InterruptedException e) { // 如果等待期线程被中断,恢复中断状态 Thread.currentThread().interrupt(); // 强制关闭 monitorExecutor.shutdownNow(); } } } } ================================================ FILE: src/main/java/database/AnalyseHostResultTable.java ================================================ package database; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import model.*; import sqlUtils.Constants; import sqlUtils.buildSQL; import utils.CastUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import static utils.BurpPrintUtils.LOG_ERROR; import static utils.BurpPrintUtils.stderr_println; public class AnalyseHostResultTable { //数据表名称 public static String tableName = "ANALYSE_HOST_RESULT"; //创建用于存储 需要处理的URL的原始请求响应 static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (\n" + "id INTEGER PRIMARY KEY AUTOINCREMENT,\n" + "root_url TEXT NOT NULL,\n" //请求URL + "find_info TEXT DEFAULT '',\n" //分析出来的敏感信息(Json格式) + "find_info_num INTEGER DEFAULT -1,\n" //发现INFO的数量 + "has_important INTEGER DEFAULT 0,\n" //是否存在重要信息 + "find_url TEXT DEFAULT '',\n" //分析出来的URL信息 (Json格式) + "find_url_num INTEGER DEFAULT -1,\n" //发现URL的数量 + "find_path TEXT DEFAULT '',\n" //分析出来的URI信息 还需要补充路径 (Json格式) + "find_path_num INTEGER DEFAULT -1,\n" //发现PATH的数量 + "find_api TEXT DEFAULT '',\n" //基于分析的不完整URI信息 直接拼接 出来的URL (Json格式) + "find_api_num INTEGER DEFAULT -1,\n" //发现API的数量 + "path_to_url TEXT DEFAULT '',\n" //基于分析的不完整URI信息 智能计算 出来的URL (Json格式) + "path_to_url_num INTEGER DEFAULT -1,\n" //发现API的数量 + "unvisited_url TEXT DEFAULT '',\n" //合并所有URL 并去除已经访问过的URL (Json格式) + "unvisited_url_num INTEGER DEFAULT -1,\n" //合并所有URL 并去除已经访问过的URL的数量 //TODO 实现所有URL的简单状态码显示 + "all_url_status TEXT DEFAULT '',\n" //合并所有URL MAP<url,status json> 格式 + "all_url_num INTEGER DEFAULT -1,\n" + "basic_path_num INTEGER DEFAULT -1,\n" //是基于多少个路径算出来的结果? + "run_status TEXT NOT NULL DEFAULT 'RUN_STATUS'".replace("RUN_STATUS", Constants.HANDLE_WAIT) + ");"; /** * 为每个HOST插入分析结果, 此时不包含动态生成的URL * @param analyseHostResultModel 基于host的结果模型 * @param addApiList 是否将直接拼接的 apiList 加入到未访问URL列表中 * @return */ public static synchronized int insertOrUpdateAnalyseHostResult(AnalyseHostResultModel analyseHostResultModel, boolean addApiList){ String rootUrl = analyseHostResultModel.getRootUrl(); HashMap<String, JSONArray> urlInfoArrayMap = analyseHostResultModel.getUrlInfoArrayMap(); List<String> urlList = analyseHostResultModel.getUrlList(); List<String> pathList = analyseHostResultModel.getPathList(); List<String> apiList = analyseHostResultModel.getApiList(); Boolean hasImportant = analyseHostResultModel.getHasImportant(); List<String> unvisitedUrlList = analyseHostResultModel.getUnvisitedUrlList(addApiList); int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String selectSql = "SELECT * FROM "+ tableName +" WHERE root_url = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt1 = conn.prepareStatement(selectSql)) { // 检查记录是否存在 stmt1.setString(1, rootUrl); ResultSet rs = stmt1.executeQuery(); if (!rs.next()) { // 记录不存在,插入新记录 String insertSql = "INSERT INTO "+ tableName + " " + "(root_url, find_info, find_info_num, has_important, " + "find_url, find_url_num, find_path, find_path_num, find_api, find_api_num, " + "unvisited_url, unvisited_url_num, run_status) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; try (PreparedStatement stmt2 = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS)) { stmt2.setString(1, rootUrl); stmt2.setString(2, CastUtils.toJsonString(urlInfoArrayMap)); stmt2.setInt(3, urlInfoArrayMap.size()); stmt2.setBoolean(4, hasImportant); stmt2.setString(5, CastUtils.toJsonString(urlList)); stmt2.setInt(6, urlList.size()); stmt2.setString(7, CastUtils.toJsonString(pathList)); stmt2.setInt(8, pathList.size()); stmt2.setString(9, CastUtils.toJsonString(apiList)); stmt2.setInt(10, apiList.size()); stmt2.setString(11, CastUtils.toJsonString(unvisitedUrlList)); stmt2.setInt(12,unvisitedUrlList.size()); stmt2.setString(13,Constants.HANDLE_WAIT); //设置状态为等待处理 stmt2.executeUpdate(); // 获取生成的键值 try (ResultSet generatedKeys = stmt2.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); // 获取生成的ID } } } return 0; } else { int id = rs.getInt("id"); HashMap<String, JSONArray> oldUrlInfoArrayMap = CastUtils.toUrlInfoArrayMap(rs.getString("find_info")); Boolean oldHasImportant = rs.getBoolean("has_important"); List<String> oldUrlList = CastUtils.toStringList(rs.getString("find_url")); List<String> oldPathList = CastUtils.toStringList(rs.getString("find_path")); List<String> oldApiList = CastUtils.toStringList(rs.getString("find_api")); List<String> oldUnvisitedUrlList = CastUtils.toStringList(rs.getString("unvisited_url")); // 记录存在 合并旧的数据 更新记录 String updateSql = "UPDATE " + tableName + " SET " + "find_info = ?, find_info_num = ?, has_important = ?, " + "find_url = ?, find_url_num = ?, find_path = ?, find_path_num = ?, find_api = ?, find_api_num = ?, " + "unvisited_url = ?, unvisited_url_num = ? WHERE root_url = ?"; try (PreparedStatement stmt2 = conn.prepareStatement(updateSql)) { //find_info HashMap<String, JSONArray> newUrlInfoArrayMap = CastUtils.mapAddMap(oldUrlInfoArrayMap, urlInfoArrayMap); stmt2.setString(1, CastUtils.toJsonString(newUrlInfoArrayMap)); stmt2.setInt(2, newUrlInfoArrayMap.size()); //has_important stmt2.setBoolean(3, hasImportant||oldHasImportant); List<String> newUrlList = CastUtils.listAddList(urlList, oldUrlList); stmt2.setString(4, CastUtils.toJsonString(newUrlList)); stmt2.setInt(5, newUrlList.size()); List<String> newPathList = CastUtils.listAddList(pathList, oldPathList); stmt2.setString(6, CastUtils.toJsonString(newPathList)); stmt2.setInt(7, newPathList.size()); List<String> newApiList = CastUtils.listAddList(apiList, oldApiList); stmt2.setString(8, CastUtils.toJsonString(newApiList)); stmt2.setInt(9, newApiList.size()); //计算所有新增的URL List<String> oldAddUrlList = CastUtils.listAddList(oldUrlList, oldApiList); //历史上该主机采集的所有URL unvisitedUrlList = CastUtils.listReduceList(unvisitedUrlList,oldAddUrlList); //首先排除所有历史采集的URL List<String> newUnvisitedUrlList = CastUtils.listAddList(unvisitedUrlList, oldUnvisitedUrlList); //合并查询前未访问URL stmt2.setString(10, CastUtils.toJsonString(newUnvisitedUrlList)); stmt2.setInt(11, newUnvisitedUrlList.size()); stmt2.setString(12, rootUrl); stmt2.executeUpdate(); // 如果需要获取更新记录的ID,可以查询主键 generatedId = id; // 假设id是主键且名为"id" } } } catch (Exception e) { stderr_println(String.format("[-] Error inserting or updating table [%s] -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return generatedId; //返回ID值,无论是更新还是插入 } /** * 获取对应ID的动态 URL (当前是动态Path计算URL、未访问URL) */ public static synchronized PathToUrlsModel fetchDynamicUrlsDataById(int id){ PathToUrlsModel pathToUrlsModel = null; String selectSQL = "SELECT id,path_to_url,unvisited_url,basic_path_num FROM "+ tableName +" WHERE id = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setInt(1, id); ResultSet rs = stmt.executeQuery(); if (rs.next()) { pathToUrlsModel = new PathToUrlsModel( rs.getInt("id"), rs.getInt("basic_path_num"), rs.getString("path_to_url"), rs.getString("unvisited_url") ); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] path_to_url and unvisited_url By Id: %s", tableName, e.getMessage())); } return pathToUrlsModel; } /** * 基于ID更新动态URl数据 */ public static synchronized int updateDynamicUrlsDataByModel(PathToUrlsModel dynamicUrlModel){ int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String updateSQL = "UPDATE "+ tableName + " SET path_to_url = ?, path_to_url_num = ?, unvisited_url = ?, unvisited_url_num = ?, basic_path_num = ?, run_status = ? WHERE id = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(updateSQL)) { stmt.setString(1, CastUtils.toJsonString(dynamicUrlModel.getPathToUrls())); stmt.setInt(2, dynamicUrlModel.getPathToUrls().size()); stmt.setString(3, CastUtils.toJsonString(dynamicUrlModel.getUnvisitedUrls())); stmt.setInt(4, dynamicUrlModel.getUnvisitedUrls().size()); stmt.setInt(5, dynamicUrlModel.getBasicPathNum()); stmt.setString(6, Constants.HANDLE_WAIT);//更新状态为待处理 stmt.setInt(7, dynamicUrlModel.getId()); int affectedRows = stmt.executeUpdate(); if (affectedRows > 0) { generatedId = dynamicUrlModel.getId(); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error update [%] Path Data: %s", tableName, e.getMessage())); } return generatedId; // 返回ID值,无论是更新还是插入 } /** * 基于ID更新 PathToUrl 的基础计数数据 */ public static synchronized int updateDynamicUrlsBasicNumById(int id, int basicPathNum){ int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String updateSQL = "UPDATE "+ tableName +" SET basic_path_num = ? WHERE id = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(updateSQL)) { stmt.setInt(1, basicPathNum); stmt.setInt(2, id); int affectedRows = stmt.executeUpdate(); if (affectedRows > 0) { generatedId = id; } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error update [%] Basic Path Num: %s",tableName, e.getMessage())); } return generatedId; // 返回ID值,无论是更新还是插入 } /** * 获取多条 存在 Path 并且没有 动态计算过的 path数据 */ public static synchronized List<FindPathModel> fetchPathDataByRootUrl(List<String> rootUrls){ List<FindPathModel> findPathModelList = new ArrayList<>(); if (rootUrls.isEmpty()) return findPathModelList; String selectSQL = ("SELECT * FROM " + tableName + " WHERE root_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 1, rootUrls.get(i)); } ResultSet rs = stmt.executeQuery(); while (rs.next()) { FindPathModel findPathModel = new FindPathModel( rs.getInt("id"), rs.getString("root_url"), rs.getString("find_path") ); findPathModelList.add(findPathModel); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] Path Data By RootUrl List: %s", tableName, e.getMessage())); } return findPathModelList ; } /** * 获取 指定 rootUrl 对应的 所有 分析结果 数据 */ public static synchronized BasicHostTableTabDataModel fetchHostResultByRootUrl(String rootUrl){ BasicHostTableTabDataModel tabDataModel = null; String selectSQL = "SELECT * FROM " + tableName +" WHERE root_url = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setString(1, rootUrl); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { tabDataModel = new BasicHostTableTabDataModel( rs.getString("root_url"), rs.getString("find_info"), rs.getString("find_url"), rs.getString("find_path"), rs.getString("find_api"), rs.getString("path_to_url"), rs.getString("unvisited_url"), rs.getString("all_url_status") ); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Select Host Analyse Result Data By RootUrl: %s", e.getMessage())); } return tabDataModel; } /** * 获取 指定 rootUrls 对应的 所有 分析结果 数据 */ public static synchronized List<BasicHostTableTabDataModel> fetchHostResultByRootUrls(List<String> rootUrls){ List<BasicHostTableTabDataModel> tabDataModels = new ArrayList<>(); String selectSQL = ("SELECT * FROM " + tableName +" WHERE root_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 1, rootUrls.get(i)); } try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { BasicHostTableTabDataModel tabDataModel = new BasicHostTableTabDataModel( rs.getString("root_url"), rs.getString("find_info"), rs.getString("find_url"), rs.getString("find_path"), rs.getString("find_api"), rs.getString("path_to_url"), rs.getString("unvisited_url"), rs.getString("all_url_status") ); tabDataModels.add(tabDataModel); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Select Host Analyse Result Data By RootUrl: %s", e.getMessage())); } return tabDataModels; } /** * 基于ID更新动态URl数据 */ public static synchronized int updateUrlsStatusByRootUrl(String rootUrl, HashMap<String, JSONObject> allUrlStatus, Integer allUrlNum){ int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String updateSQL = "UPDATE "+ tableName + " SET all_url_status = ?, all_url_num = ? WHERE root_url = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(updateSQL)) { stmt.setString(1, CastUtils.toJsonString(allUrlStatus)); //stmt.setInt(2, allUrlStatus.keySet().size()); stmt.setInt(2, allUrlNum); stmt.setString(3, rootUrl); int affectedRows = stmt.executeUpdate(); generatedId = affectedRows; } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error update [%] Urls Status By RootUrl: %s", tableName, e.getMessage())); } return generatedId; // 返回ID值,无论是更新还是插入 } /** * 实现 基于 rootUrls 列表 删除 unvisitedUrls */ public static synchronized int clearUnVisitedUrlsByRootUrls(List<String> rootUrls) { int totalRowsAffected = 0; if (rootUrls.isEmpty()) return totalRowsAffected; // 构建SQL语句 String updateSQL = ("UPDATE "+ tableName + " SET unvisited_url = ?, unvisited_url_num = 0" + " WHERE root_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(updateSQL)) { // 设置第一个参数为JSON数组的toJSONString() stmt.setString(1, new JSONArray().toJSONString()); // 循环设置参数 // 开始于第二个参数位置,第一个参数已被设置 for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 2, rootUrls.get(i)); } // 执行更新操作并获取受影响行数 totalRowsAffected = stmt.executeUpdate(); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error clearing unvisited URLs by RootUrls: %s", e.getMessage())); } return totalRowsAffected; } /** * 获取 所有未访问URl (unvisited_url_num > 0) * @return */ public static synchronized List<UnVisitedUrlsModel> fetchAllUnVisitedUrlsWithLimit(Integer limit){ List<UnVisitedUrlsModel> list = new ArrayList<>(); String selectSQL = "SELECT id,root_url,unvisited_url FROM "+ tableName + " WHERE unvisited_url_num > 0 ORDER BY id ASC Limit ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setInt(1, limit); ResultSet rs = stmt.executeQuery(); while (rs.next()) { UnVisitedUrlsModel unVisitedUrlsModel = new UnVisitedUrlsModel( rs.getInt("id"), rs.getString("root_url"), rs.getString("unvisited_url") ); list.add(unVisitedUrlsModel); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] All UnVisited Urls: %s", tableName, e.getMessage())); } return list; } /** * 基于rootUrls查询对应的未访问URl */ public static List<UnVisitedUrlsModel> fetchUnVisitedUrlsByRootUrls(List<String> rootUrls) { List<UnVisitedUrlsModel> arrayList = new ArrayList<>(); if (rootUrls.isEmpty()) return arrayList; String selectSQL = ("SELECT id,root_url,unvisited_url FROM " + tableName + " WHERE root_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 1, rootUrls.get(i)); } ResultSet rs = stmt.executeQuery(); while (rs.next()) { UnVisitedUrlsModel tabDataModel = new UnVisitedUrlsModel( rs.getInt("id"), rs.getString("root_url"), rs.getString("unvisited_url") ); arrayList.add(tabDataModel); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] Result Data By MsgHash List: %s", tableName, e.getMessage())); } return arrayList; } /** * 实现 基于 ID 更新 unvisitedUrls */ public static synchronized int updateUnVisitedUrlsByModel(UnVisitedUrlsModel unVisitedUrlsModel) { int affectedRows = -1; // 默认ID值,如果没有生成ID,则保持此值 String updateSQL = "UPDATE " + tableName +" SET unvisited_url = ?, unvisited_url_num = ? WHERE id = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(updateSQL)) { stmt.setString(1, CastUtils.toJsonString(unVisitedUrlsModel.getUnvisitedUrls())); stmt.setInt(2, unVisitedUrlsModel.getUnvisitedUrls().size()); stmt.setInt(3, unVisitedUrlsModel.getId()); affectedRows = stmt.executeUpdate(); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error update unvisited Urls By Id: %s", e.getMessage())); } return affectedRows; } } ================================================ FILE: src/main/java/database/AnalyseUrlResultTable.java ================================================ package database; import model.AnalyseUrlResultModel; import model.BasicUrlTableTabDataModel; import model.FindPathModel; import model.HttpMsgInfo; import sqlUtils.Constants; import sqlUtils.buildSQL; import utils.CastUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import static utils.BurpPrintUtils.*; public class AnalyseUrlResultTable { //数据表名称 public static String tableName = "ANALYSE_URL_RESULT"; //创建用于存储 需要处理的URL的原始请求响应 static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (\n" + "id INTEGER PRIMARY KEY AUTOINCREMENT,\n" + "msg_hash TEXT UNIQUE,\n" //请求Hash信息 + "req_url TEXT NOT NULL,\n" //请求URL + "root_url TEXT NOT NULL,\n" //请求HOST PORT + "find_url TEXT DEFAULT '',\n" //分析出来的URL信息 (Json格式) + "find_url_num INTEGER DEFAULT -1,\n" //发现URL的数量 + "find_path TEXT DEFAULT '',\n" //分析出来的URI信息 还需要补充路径 (Json格式) + "find_path_num INTEGER DEFAULT -1,\n" //发现PATH的数量 + "find_info TEXT DEFAULT '',\n" //分析出来的敏感信息(Json格式) + "find_info_num INTEGER DEFAULT -1,\n" //发现INFO的数量 + "has_important INTEGER DEFAULT 0,\n" //是否存在重要信息 + "find_api TEXT DEFAULT '',\n" //基于分析的不完整URI信息 直接拼接 出来的URL (Json格式) + "find_api_num INTEGER DEFAULT -1,\n" //发现API的数量 + "run_status TEXT NOT NULL DEFAULT 'RUN_STATUS'".replace("RUN_STATUS", Constants.ANALYSE_WAIT) + ");"; /** * 插入第一次分析完毕的 URL和PATH结果, 此时不包含动态生成的URL * @param msgInfo * @param analyseInfo * @return */ public static synchronized int insertOrUpdateBasicAnalyseResult(HttpMsgInfo msgInfo, AnalyseUrlResultModel analyseInfo){ int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String selectSql = "SELECT id FROM "+ tableName +" WHERE msg_hash = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt1 = conn.prepareStatement(selectSql)) { // 检查记录是否存在 stmt1.setString(1, msgInfo.getMsgHash()); ResultSet rs = stmt1.executeQuery(); if (rs.next()) { // 记录存在,执行更新 stdout_println(LOG_INFO, String.format("[*] Update [%s] %s -> %s", tableName, msgInfo.getUrlInfo().getRawUrlUsual(), msgInfo.getMsgHash())); String updateSql = "UPDATE " + tableName + " SET " + "req_url = ?, root_url = ?, find_url = ?, find_url_num = ?, " + "find_path = ?, find_path_num = ?, find_info = ?, find_info_num = ?, " + "find_api = ?, find_api_num = ?, run_status = ?, has_important = ? " + "WHERE msg_hash = ?;"; // 注意最后的where子句 try (PreparedStatement stmtUpdate = conn.prepareStatement(updateSql)) { stmtUpdate.setString(1, msgInfo.getUrlInfo().getRawUrlUsual()); stmtUpdate.setString(2, msgInfo.getUrlInfo().getRootUrlUsual()); stmtUpdate.setString(3, CastUtils.toJsonString(analyseInfo.getUrlList())); stmtUpdate.setInt(4, analyseInfo.getUrlList().size()); stmtUpdate.setString(5, CastUtils.toJsonString(analyseInfo.getPathList())); stmtUpdate.setInt(6, analyseInfo.getPathList().size()); stmtUpdate.setString(7, CastUtils.toJsonString(analyseInfo.getInfoArray())); stmtUpdate.setInt(8, analyseInfo.getInfoArray().size()); stmtUpdate.setString(9, CastUtils.toJsonString(analyseInfo.getApiList())); stmtUpdate.setInt(10, analyseInfo.getApiList().size()); stmtUpdate.setString(11, Constants.ANALYSE_WAIT); stmtUpdate.setBoolean(12, analyseInfo.getHasImportant()); stmtUpdate.setString(13, msgInfo.getMsgHash()); // 设置where子句中的msg_hash stmtUpdate.executeUpdate(); generatedId = rs.getInt("id"); // 使用已存在的ID } } else { // 记录不存在,插入新记录 String insertSql = "INSERT INTO "+ tableName +"" + " (msg_hash, req_url, root_url, find_url, find_url_num, find_path, find_path_num," + " find_info, find_info_num, find_api, find_api_num, run_status, has_important)" + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; try (PreparedStatement stmt2 = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS)) { stmt2.setString(1, msgInfo.getMsgHash()); stmt2.setString(2, msgInfo.getUrlInfo().getRawUrlUsual()); stmt2.setString(3, msgInfo.getUrlInfo().getRootUrlUsual()); stmt2.setString(4, CastUtils.toJsonString(analyseInfo.getUrlList())); stmt2.setInt(5, analyseInfo.getUrlList().size()); stmt2.setString(6, CastUtils.toJsonString(analyseInfo.getPathList())); stmt2.setInt(7, analyseInfo.getPathList().size()); stmt2.setString(8, CastUtils.toJsonString(analyseInfo.getInfoArray())); stmt2.setInt(9, analyseInfo.getInfoArray().size()); stmt2.setString(10, CastUtils.toJsonString(analyseInfo.getApiList())); stmt2.setInt(11, analyseInfo.getApiList().size()); //设置初始的响应状态为 等待处理 stmt2.setString(12, Constants.ANALYSE_WAIT); stmt2.setBoolean(13, analyseInfo.getHasImportant()); stmt2.executeUpdate(); // 获取生成的键值 try (ResultSet generatedKeys = stmt2.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); // 获取生成的ID } } } } } catch (Exception e) { stderr_println(String.format("[-] Error inserting or updating table [%s] -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return generatedId; //返回ID值,无论是更新还是插入 } /** * 获取 指定 msgHashList 对应的 所有 分析结果 数据 * @return */ public static synchronized List<AnalyseUrlResultModel> fetchUrlResultByMsgHashList(List<String> msgHashList){ List<AnalyseUrlResultModel> AnalyseUrlResultModels = new ArrayList<>(); if (msgHashList.isEmpty()) return AnalyseUrlResultModels; String selectSQL = ("SELECT * FROM " + tableName + " WHERE msg_hash IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(msgHashList.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < msgHashList.size(); i++) { stmt.setString(i + 1, msgHashList.get(i)); } ResultSet rs = stmt.executeQuery(); while (rs.next()) { AnalyseUrlResultModel tabDataModel = new AnalyseUrlResultModel( rs.getString("req_url"), rs.getString("find_info"), rs.getString("find_url"), rs.getString("find_path"), rs.getString("find_api"), rs.getBoolean("has_important") ); AnalyseUrlResultModels.add(tabDataModel); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] Result Data By MsgHash List: %s",tableName, e.getMessage())); } return AnalyseUrlResultModels; } /** * 获取 指定 msgHash 对应的 所有 分析结果 数据, 用于填充 UI 表的下方 tab 数据 */ public static synchronized BasicUrlTableTabDataModel fetchUrlResultByMsgHash(String msgHash){ BasicUrlTableTabDataModel tabDataModel = null; String selectSQL = "SELECT * FROM "+ tableName +" WHERE msg_hash = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setString(1, msgHash); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { tabDataModel = new BasicUrlTableTabDataModel( rs.getString("msg_hash"), rs.getString("find_url"), rs.getString("find_path"), rs.getString("find_info"), rs.getString("find_api") ); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Select Analyse Result Data By MsgHash: %s", e.getMessage())); } return tabDataModel; } /** * 获取多条 存在 Path 并且没有 动态计算过的 path数据 */ public static synchronized List<FindPathModel> fetchPathDataByMsgHashList(List<String> msgHashList){ List<FindPathModel> findPathModelList = new ArrayList<>(); if (msgHashList.isEmpty()) return findPathModelList; String selectSQL = "SELECT * FROM " + tableName + " WHERE msg_hash IN $buildInParamList$;" .replace("$buildInParamList$", buildSQL.buildInParamList(msgHashList.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < msgHashList.size(); i++) { stmt.setString(i + 1, msgHashList.get(i)); } ResultSet rs = stmt.executeQuery(); while (rs.next()) { FindPathModel findPathModel = new FindPathModel( rs.getInt("id"), rs.getString("root_url"), rs.getString("find_path") ); findPathModelList.add(findPathModel); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] Path Data By MsgHash List: %s", tableName, e.getMessage())); } return findPathModelList ; } } ================================================ FILE: src/main/java/database/DBService.java ================================================ package database; import burp.BurpExtender; import org.sqlite.SQLiteConfig; import utils.BurpFileUtils; import java.io.File; import java.nio.file.Path; import java.sql.*; import static utils.BurpPrintUtils.*; public class DBService { private static DBService instance; private Connection connection; private String CONNECTION_STRING; //数据库链接字符串 //指定sqlite数据库配置文件路径 private String DBFileName = "APIFinderPlus.db"; private DBService() { Path DBFilePath = BurpFileUtils.getPluginDirFilePath(BurpExtender.getCallbacks(), DBFileName); CONNECTION_STRING = String.format("jdbc:sqlite:%s?journal_mode=WAL", DBFilePath); } public static synchronized DBService getInstance() { // 单例模式配置 if (instance == null) { instance = new DBService(); } return instance; } //创建数据库链接 public synchronized void initDBConnection() { try { // 自动注册 SQLite 驱动程序 Class.forName("org.sqlite.JDBC"); // 建立数据库连接 connection = DriverManager.getConnection(CONNECTION_STRING); // 启用外键支持 try (Statement stmt = connection.createStatement()) { stmt.execute("PRAGMA foreign_keys = ON"); } catch (SQLException e) { stderr_println(String.format("[!] set foreign_keys error. -> %s", e.getMessage())); e.printStackTrace(); } stdout_println(LOG_INFO, "[+] SQLite database connection initialized successfully. "); } catch (ClassNotFoundException e) { stderr_println(String.format("[!] JDBC driver not found. -> %s", e.getMessage())); e.printStackTrace(); } catch (SQLException e) { stderr_println(String.format("[!] Failed to connect db. -> %s", e.getMessage())); e.printStackTrace(); } } //创建数据表结构 public synchronized void initCreateTables() { // RecordUrlTable URL 访问记录表 用于后续排除已访问过的UR了 execCreatTableSql(RecordUrlTable.creatTableSQL, RecordUrlTable.tableName); // RecordPathTable URL PATH记录表 用于后续路径猜测记录 execCreatTableSql(RecordPathTable.creatTableSQL, RecordPathTable.tableName); // ReqMsgDataTable 用于存储 实际的请求体和响应体 execCreatTableSql(ReqMsgDataTable.creatTableSQL, ReqMsgDataTable.tableName); // ReqDataTable 存储需要提取敏感信息的数据 execCreatTableSql(ReqDataTable.creatTableSQL, ReqDataTable.tableName); // AnalyseUrlResultTable 存储分析后的数据 execCreatTableSql(AnalyseUrlResultTable.creatTableSQL, AnalyseUrlResultTable.tableName); // AnalyseHostResultTable 存储分析后的数据 的 集合 execCreatTableSql(AnalyseHostResultTable.creatTableSQL, AnalyseHostResultTable.tableName); // 创建存储根树的表 execCreatTableSql(PathTreeTable.creatTableSQL, PathTreeTable.tableName); } //创建数据表的语句 private void execCreatTableSql(String creatTableSql, String tableName) { try (Statement stmt = connection.createStatement()) { stmt.execute(creatTableSql); stdout_println(LOG_INFO, String.format("[+] create db %s success ...", tableName)); } catch (Exception e) { stderr_println(String.format("[!] create db %s failed -> %s", tableName, e.getMessage())); e.printStackTrace(); } } //获取一个数据库语句 public Connection getNewConn() throws SQLException { //勉强解决 [SQLITE_BUSY] The database file is locked (database is locked) 错误 SQLiteConfig config = new SQLiteConfig(); config.setBusyTimeout(5000); // 设置超时时间,单位是毫秒 return DriverManager.getConnection(CONNECTION_STRING, config.toProperties()); } // 关闭数据库连接的方法 public void closeConnection() { try { if (this.connection != null && !this.connection.isClosed()) { this.connection.close(); } } catch (SQLException e) { stderr_println(String.format("关闭数据库连接时发生错误: %s", e.getMessage())); e.printStackTrace(); } } /** * 清空表数据 * @param tableName */ public static void clearTable(String tableName) { // 用 DELETE 语句来清空表 String deleteSql = "DELETE FROM "+ tableName +" ;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(deleteSql)) { stmt.executeUpdate(); stdout_println(String.format("[-] table [%s] has been cleared.", tableName)); } catch (Exception e) { stderr_println(String.format("Error clearing table [%s] -> Error: %s",tableName, e.getMessage())); } } /** * 清空常用表的数据 */ public static void clearModelTables(){ clearTable(AnalyseUrlResultTable.tableName); clearTable(ReqDataTable.tableName); clearTable(ReqMsgDataTable.tableName); } /** * 清空记录表的数据 */ public static void clearRecordTables(){ clearTable(PathTreeTable.tableName); clearTable(RecordPathTable.tableName); clearTable(RecordUrlTable.tableName); clearTable(AnalyseHostResultTable.tableName); } /** * 清空所有表的数据 */ public static void clearAllTables(){ clearModelTables(); clearRecordTables(); } //判断大小是否超过 x G 超过就清空数据库文件 public boolean clearBigDB(int limit) { try { Path sqliteDBFilePath = BurpFileUtils.getPluginDirFilePath(BurpExtender.getCallbacks(), DBFileName); File dbFile = new File(sqliteDBFilePath.toString()); if (dbFile.length() > 1024 * 1024 * 1024 * limit){ DBService.clearModelTables(); stdout_println(String.format("DB File Is Big, Clear Model Tables Success ...")); return true; } } catch (Exception e){ stderr_println(String.format("DB File Is Big, Clear Model Tables Occur Error: [%s]", e.getMessage())); } return false; } } ================================================ FILE: src/main/java/database/PathTreeTable.java ================================================ package database; import com.alibaba.fastjson2.JSONObject; import model.PathTreeModel; import sqlUtils.buildSQL; import java.sql.*; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import static utils.CastUtils.isNotEmptyObj; import static utils.PathTreeUtils.deepMergeJsonTree; import static utils.BurpPrintUtils.*; public class PathTreeTable { //数据表名称 public static String tableName = "PATH_TREE"; //创建 基于 record_urls 生成的每个域名的 路径结构 树 static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (\n" + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n" //自增的id + " root_url TEXT NOT NULL,\n" + " path_tree TEXT NOT NULL,\n" //根树的序列化Json数据 + " basic_path_num INTEGER NOT NULL DEFAULT 0\n" //基于多少个路径计算出来的根树,最好使用根树的稳定 hash + ");"; //插入数据库 public static synchronized int insertOrUpdatePathTree(PathTreeModel pathTreeModel) { String rootUrl = pathTreeModel.getRootUrl(); Integer newBasicPathNum = pathTreeModel.getBasicPathNum(); JSONObject newPathTree = pathTreeModel.getPathTree(); int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 //查询 是否已存在记录 String checkSql = "SELECT id,path_tree,basic_path_num FROM " + tableName + " WHERE root_url = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement checkStmt = conn.prepareStatement(checkSql)) { checkStmt.setString(1, rootUrl); ResultSet rs = checkStmt.executeQuery(); if (rs.next()) { int selectedId = rs.getInt("id"); String oldPathTree = rs.getString("path_tree"); int oldBasicPathNum = rs.getInt("basic_path_num"); //合并新旧pathNum 输入的PATH TREE 是基于新找到的PATH 因此是增量的 newBasicPathNum = Math.max(0, oldBasicPathNum) + Math.max(0, newBasicPathNum); //合并新旧Json树 if (isNotEmptyObj(oldPathTree)){ JSONObject oldTree = JSONObject.parse(oldPathTree); newPathTree = deepMergeJsonTree(oldTree, newPathTree); } //更新索引对应的数据 String updateSQL = "UPDATE "+ tableName +" SET path_tree = ?, basic_path_num = ? WHERE id = ?;"; try (PreparedStatement updateStatement = conn.prepareStatement(updateSQL)) { updateStatement.setString(1, newPathTree.toJSONString()); updateStatement.setInt(2, newBasicPathNum); updateStatement.setInt(3, selectedId); int affectedRows = updateStatement.executeUpdate(); if (affectedRows > 0) { generatedId = selectedId; } } } else { // 记录不存在,插入新记录 String insertSql = "INSERT INTO "+ tableName +" (root_url, path_tree, basic_path_num) VALUES (?, ?, ?);"; try (PreparedStatement insertStmt = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS)) { insertStmt.setString(1, rootUrl); insertStmt.setString(2, newPathTree.toJSONString()); insertStmt.setInt(3, newBasicPathNum); int affectedRows = insertStmt.executeUpdate(); if (affectedRows > 0) { // 获取生成的键值 try (ResultSet generatedKeys = insertStmt.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); } else { throw new SQLException("Creating user failed, no ID obtained."); } } } } } } catch (Exception e) { stderr_println(String.format("[-] Error inserting or updating table [%s] -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return generatedId; // 返回ID值,无论是更新还是插入 } //根据域名查询对应的路径树 public static synchronized List<PathTreeModel> fetchPathTreeByRootUrls(List<String> rootUrls) { List<PathTreeModel> pathTreeModels = new ArrayList<>(); if (rootUrls.isEmpty()) return pathTreeModels; //查询 String selectSql = ("SELECT root_url, path_tree, basic_path_num FROM "+ tableName + " WHERE root_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSql)) { for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 1, rootUrls.get(i)); } ResultSet rs = stmt.executeQuery(); while (rs.next()) { PathTreeModel pathTreeModel = new PathTreeModel( rs.getString("root_url"), rs.getInt("basic_path_num"), rs.getString("path_tree") ); pathTreeModels.add(pathTreeModel); } } catch (Exception e) { stderr_println(String.format("[-] Error Fetch [%s] Data By Req Host Port List: %s", tableName, e.getMessage())); e.printStackTrace(); } return pathTreeModels; } //根据 rootUrl 查询对应的path_tree public static synchronized PathTreeModel fetchPathTreeByRootUrl(String rootUrl) { PathTreeModel pathTreeModel= null; //查询 String selectSql = "SELECT root_url, path_tree, basic_path_num FROM "+ tableName +" WHERE root_url = ? LIMIT 1;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSql)) { stmt.setString(1, rootUrl); ResultSet rs = stmt.executeQuery(); if (rs.next()) { pathTreeModel = new PathTreeModel( rs.getString("root_url"), rs.getInt("basic_path_num"), rs.getString("path_tree") ); } } catch (Exception e) { stderr_println(String.format("[-] Error Fetch [%s] Data: %s", tableName, e.getMessage())); e.printStackTrace(); } return pathTreeModel; } /** * 获取 所有 表中记录的 URL前置 * @return */ public static synchronized Set<String> fetchAllRecordPathRootUrls(){ Set<String> set = new HashSet<>(); String selectSQL = "SELECT DISTINCT root_url FROM "+ tableName + ";"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { ResultSet rs = stmt.executeQuery(); while (rs.next()) { String urlPrefix = rs.getString("root_url"); set.add(urlPrefix); } } catch (Exception e) { stderr_println(String.format("[-] Error fetch [%s] All Root URL: %s", tableName, e.getMessage())); e.printStackTrace(); } return set; } } ================================================ FILE: src/main/java/database/RecordPathTable.java ================================================ package database; import model.HttpMsgInfo; import model.HttpUrlInfo; import model.RecordPathDirsModel; import model.RecordPathModel; import sqlUtils.Constants; import java.sql.*; import java.util.ArrayList; import java.util.List; import static utils.BurpPrintUtils.*; public class RecordPathTable { //数据表名称 public static String tableName = "RECORD_PATH"; //创建用于存储所有 访问成功的 URL的数据库 record_urls static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (\n" + "id INTEGER PRIMARY KEY AUTOINCREMENT,\n" //自增的id + "req_hash TEXT UNIQUE, \n" // 添加一列 req_hash 作为 root_url req_path_dir resp_status_code 的 特征值 + "root_url TEXT NOT NULL,\n" + "req_path_dir TEXT NOT NULL,\n" + "resp_status_code TEXT NOT NULL, \n" + "run_status TEXT NOT NULL DEFAULT 'RUN_STATUS'".replace("RUN_STATUS", Constants.ANALYSE_WAIT) + ");"; /** * 插入一条路径记录 */ public static synchronized int insertOrUpdateRecordPath(RecordPathModel recordPathModel) { int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String selectSql = "SELECT id FROM "+ tableName +" WHERE req_hash = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSql)) { // 检查记录是否存在 stmt.setString(1, recordPathModel.getReqHash()); ResultSet rs = stmt.executeQuery(); if (rs.next()) { // 记录存在,忽略操作 return 0; } else { // 记录不存在,插入新记录 String insertSql = "INSERT INTO "+ tableName + " (root_url, req_path_dir, resp_status_code, req_hash)" + " VALUES (?, ?, ?, ?);"; try (PreparedStatement insertStmt = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS)) { insertStmt.setString(1, recordPathModel.getRootUrl()); insertStmt.setString(2, recordPathModel.getReqPathDir()); insertStmt.setInt(3, recordPathModel.getRespStatusCode()); insertStmt.setString(4, recordPathModel.getReqHash()); insertStmt.executeUpdate(); // 获取生成的键值 try (ResultSet generatedKeys = insertStmt.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); // 获取生成的ID } } } } } catch (Exception e) { stderr_println(String.format("[-] Error inserting or updating table -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return generatedId; // 返回ID值,无论是更新还是插入 } /** * 插入一条路径记录 复用insertOrUpdateRecordPath */ public static synchronized int insertOrUpdateRecordPath(HttpMsgInfo msgInfo) { RecordPathModel recordPathModel = new RecordPathModel(msgInfo.getUrlInfo(), msgInfo.getRespStatusCode()); return insertOrUpdateRecordPath(recordPathModel); } /** * 插入一条路径记录 复用insertOrUpdateRecordPath */ public static synchronized int insertOrUpdateRecordPath(String reqUrl, int respStatusCode) { RecordPathModel recordPathModel = new RecordPathModel(new HttpUrlInfo(reqUrl), respStatusCode ); return insertOrUpdateRecordPath(recordPathModel); } /** * 批量插入 recordPathModels */ public static int[] insertOrUpdateRecordPathsBatch(List<RecordPathModel> recordPathModels) { int[] generatedIds = null; String insertSql = "INSERT INTO "+ tableName + " (root_url, req_path_dir, resp_status_code, req_hash)" + " VALUES (?, ?, ?, ?)" + " ON CONFLICT(req_hash) DO NOTHING"; // 这个语句的作用是在尝试向表中插入一条记录时,如果发现有与之冲突的唯一约束 // (即在 root_url, req_path_dir, resp_status_code 这些字段上已经存在相同的值组合), // 那么数据库将不会执行任何操作,也不会抛出错误,而是简单地跳过这条记录的插入。 try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement insertStmt = conn.prepareStatement(insertSql)) { conn.setAutoCommit(false); // 开启事务处理 for (RecordPathModel record : recordPathModels) { insertStmt.setString(1, record.getRootUrl()); insertStmt.setString(2, record.getReqPathDir()); insertStmt.setInt(3, record.getRespStatusCode()); insertStmt.setString(4, record.getReqHash()); insertStmt.addBatch(); // 添加到批处理 } generatedIds = insertStmt.executeBatch(); conn.commit(); // 提交事务 } catch (Exception e) { stderr_println(String.format("[-] Error [%s] executing batch insert/update: %s",tableName, e.getMessage())); e.printStackTrace(); } return generatedIds; } /** * 实现URL批量插入 复用batchInsertOrUpdateRecordPath */ public static int[] insertOrUpdateRecordPathsBatch(List<String> findUrls, int respStatusCode) { List<RecordPathModel> recordPathModels = new ArrayList<>(); for (String findUrl: findUrls){ HttpUrlInfo urlInfo = new HttpUrlInfo(findUrl); RecordPathModel recordPathModel = new RecordPathModel( urlInfo.getRootUrlUsual(), urlInfo.getPathToDir(), respStatusCode ); recordPathModels.add(recordPathModel); } return insertOrUpdateRecordPathsBatch(recordPathModels); } /** * 获取 指定状态的数据 并封装为 路径模型 */ public static List<RecordPathDirsModel> fetchPathRecordsByStatus(String analyseStatus) { // 创建一个列表或集合来存储查询结果 List<RecordPathDirsModel> recordPathModels = new ArrayList<>(); String selectSQL = "SELECT root_url,GROUP_CONCAT(req_path_dir, ?) AS req_path_dirs " + "FROM "+ tableName +" WHERE run_status = ? GROUP BY root_url;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)){ //2、获取 解析中 状态的 Host、数据、ID列表 stmt.setString(1, Constants.SPLIT_SYMBOL); stmt.setString(2, analyseStatus); //获取查询数据 ResultSet rs = stmt.executeQuery(); while (rs.next()) { RecordPathDirsModel recordPathDirsModel = new RecordPathDirsModel( rs.getString("root_url"), rs.getString("req_path_dirs") ); recordPathModels.add(recordPathDirsModel); } } catch (Exception e) { stderr_println(String.format("[-] Error fetch [%s] Data To Analysis: %s", tableName, e.getMessage())); e.printStackTrace(); } return recordPathModels; } } ================================================ FILE: src/main/java/database/RecordUrlTable.java ================================================ package database; import model.AccessedUrlInfo; import model.HttpMsgInfo; import model.HttpUrlInfo; import utils.RespHashUtils; import java.sql.*; import java.util.ArrayList; import java.util.List; public class RecordUrlTable { //数据表名称 public static String tableName = "RECORD_URL"; public static String urlHashName = "url_hash"; //创建用于存储所有 访问成功的 URL的数据库 record_urls static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (\n" + "id INTEGER PRIMARY KEY AUTOINCREMENT,\n" //自增的id + "url_hash TEXT UNIQUE,\n" + "root_url TEXT NOT NULL,\n" + "req_url TEXT NOT NULL,\n" //记录访问过的URL + "resp_status_code INTEGER\n" //记录访问过的URL状态 + ");"; //插入访问的URl public static synchronized int insertOrUpdateAccessedUrl(String reqUrl,String rootUrl, int respStatusCode, String urlHash) { int generatedId = -1; String upsertSql = "INSERT INTO "+ tableName + " (req_url, root_url, resp_status_code, url_hash)" + " VALUES (?,?, ?, ?)" + " ON CONFLICT(url_hash) DO UPDATE SET resp_status_code = EXCLUDED.resp_status_code;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(upsertSql, Statement.RETURN_GENERATED_KEYS)) { stmt.setString(1, reqUrl); stmt.setString(2, rootUrl); stmt.setInt(3, respStatusCode); stmt.setString(4, urlHash); stmt.executeUpdate(); try (ResultSet generatedKeys = stmt.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); } } } catch (SQLException e) { System.err.println(String.format("Error insert Or Update Accessed Url On table [%s] -> Error:[%s]", tableName, e.getMessage())); } return generatedId; } //插入访问的URl 复用 public static synchronized int insertOrUpdateAccessedUrl(HttpMsgInfo msgInfo) { return insertOrUpdateAccessedUrl( msgInfo.getUrlInfo().getRawUrlUsual(), msgInfo.getUrlInfo().getRootUrlUsual(), msgInfo.getRespStatusCode(), RespHashUtils.calcCRC32(msgInfo.getUrlInfo().getRawUrlUsual()) ); } //插入访问的URl 复用 public static synchronized int insertOrUpdateAccessedUrl(String reqUrl, int respStatusCode) { return insertOrUpdateAccessedUrl( reqUrl, new HttpUrlInfo(reqUrl).getRootUrlUsual(), respStatusCode, RespHashUtils.calcCRC32(reqUrl) ); } //实现批量插入访问信息 public static synchronized int[] insertOrUpdateAccessedUrlsBatch(List<AccessedUrlInfo> accessedUrlInfos) { int[] generatedIds = null; String upsertSql = "INSERT INTO "+ tableName + " (req_url, root_url, resp_status_code, url_hash)" + " VALUES (?, ?, ?, ?)" + " ON CONFLICT(url_hash) DO UPDATE SET resp_status_code = EXCLUDED.resp_status_code;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(upsertSql, Statement.RETURN_GENERATED_KEYS)) { // 添加到批处理队列 conn.setAutoCommit(false); // 开启事务 for (AccessedUrlInfo accessedUrlInfo : accessedUrlInfos) { stmt.setString(1, accessedUrlInfo.getReqUrl()); stmt.setString(2, accessedUrlInfo.getRootUrl()); stmt.setInt(3, accessedUrlInfo.getRespStatusCode()); stmt.setString(4, accessedUrlInfo.getUrlHash()); stmt.addBatch(); } // 执行批处理 generatedIds = stmt.executeBatch(); conn.commit(); // 提交事务 } catch (Exception e) { System.err.println(String.format("Error [%s] batch insert Or Update Accessed Urls: %s", tableName, e.getMessage())); } return generatedIds; } //实现批量插入访问信息 复用 public static synchronized int[] insertOrUpdateAccessedUrlsBatch(List<String> accessedUrls, int respStatusCode){ List<AccessedUrlInfo> accessedUrlInfos = new ArrayList<>(); for (String reqUrl : accessedUrls){ AccessedUrlInfo accessedUrlInfo = new AccessedUrlInfo(reqUrl, new HttpUrlInfo(reqUrl).getRootUrlUsual(),respStatusCode); accessedUrlInfos.add(accessedUrlInfo); } return insertOrUpdateAccessedUrlsBatch(accessedUrlInfos); } } ================================================ FILE: src/main/java/database/ReqDataTable.java ================================================ package database; import model.HttpMsgInfo; import model.ReqUrlRespStatusModel; import sqlUtils.Constants; import sqlUtils.buildSQL; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import static utils.BurpPrintUtils.*; public class ReqDataTable { //数据表名称 public static String tableName = "REQ_DATA"; //创建用于存储 需要处理的URL的原始请求响应 static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "msg_hash TEXT UNIQUE," //作为实际的消息独立标记 + "req_url TEXT NOT NULL," + "req_method TEXT NOT NULL," + "resp_status_code INTEGER NOT NULL," + "resp_length INTEGER NOT NULL," //响应长度 + "msg_data_index INTEGER NOT NULL," + "req_source TEXT NOT NULL," //请求来源 + "run_status TEXT NOT NULL DEFAULT 'RUN_STATUS'".replace("RUN_STATUS", Constants.ANALYSE_WAIT) + ");"; //插入请求消息到数据库 public static synchronized int insertOrUpdateReqData(HttpMsgInfo msgInfo, int msgDataIndex, String reqSource) { int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String checkSql = "SELECT id FROM "+ tableName +" WHERE msg_hash = ? ;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement checkStmt = conn.prepareStatement(checkSql)) { // 检查记录是否存在 checkStmt.setString(1, msgInfo.getMsgHash()); ResultSet rs = checkStmt.executeQuery(); if (rs.next()) { // 记录存在,忽略操作 //stdout_println(LOG_INFO, String.format("[*] Ignore Update [%s] %s -> %s", tableName, msgInfo.getUrlInfo().getReqUrl(), msgInfo.getMsgHash())); return 0; } else { // 记录不存在,插入新记录 String insertSql = "INSERT INTO "+ tableName + " (msg_hash, req_url, req_method, resp_status_code, msg_data_index, req_source, resp_length)" + " VALUES (?, ?, ?, ?, ?, ?, ?)"; try (PreparedStatement insertStmt = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS)) { insertStmt.setString(1, msgInfo.getMsgHash()); insertStmt.setString(2, msgInfo.getUrlInfo().getRawUrlUsual()); insertStmt.setString(3, msgInfo.getReqMethod()); insertStmt.setInt(4, msgInfo.getRespStatusCode()); insertStmt.setInt(5, msgDataIndex); insertStmt.setString(6, reqSource); insertStmt.setInt(7, msgInfo.getRespBytes().length); insertStmt.executeUpdate(); // 获取生成的键值 try (ResultSet generatedKeys = insertStmt.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); // 获取生成的ID } } } } } catch (Exception e) { stderr_println(String.format("[-] Error inserting or updating table [%s] -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return generatedId; // 返回ID值,无论是更新还是插入 } /** * 根据运行状态取获取对应请求的实际消息ID */ public static synchronized List<Integer> fetchMsgDataIndexListByRunStatus(int limit, String analyseStatus) { List<Integer> msgDataIndexList = new ArrayList<>(); String selectSQL = "SELECT msg_data_index FROM " + tableName + " WHERE run_status = ? ORDER BY msg_data_index ASC LIMIT ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setString(1, analyseStatus); stmt.setInt(2, limit); // Set the limit parameter ResultSet rs = stmt.executeQuery(); while (rs.next()) { int msgDataIndex = rs.getInt("msg_data_index"); msgDataIndexList.add(msgDataIndex); } } catch (Exception e) { stderr_println(LOG_DEBUG, String.format("[-] Error fetching [%s] Req Data Index: %s",tableName, e.getMessage())); } return msgDataIndexList; } /** * 根据运行状态取获取对应请求的实际消息ID */ public static synchronized List<ReqUrlRespStatusModel> fetchReqUrlRespStatusByUrls(List<String> urls) { List<ReqUrlRespStatusModel> requestStatusModels = new ArrayList<>(); String selectSQL = ("SELECT * FROM " + tableName + " WHERE req_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(urls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < urls.size(); i++) { stmt.setString(i + 1, urls.get(i)); } ResultSet rs = stmt.executeQuery(); while (rs.next()) { ReqUrlRespStatusModel requestStatusModel = new ReqUrlRespStatusModel( rs.getInt("id"), rs.getString("req_url"), rs.getString("req_method"), rs.getInt("resp_status_code"), rs.getInt("resp_length") ); requestStatusModels.add(requestStatusModel); } } catch (Exception e) { stderr_println(LOG_DEBUG, String.format("[-] Error fetching [%s] Request Status By Urls: %s",tableName, e.getMessage())); } return requestStatusModels; } } ================================================ FILE: src/main/java/database/ReqMsgDataTable.java ================================================ package database; import model.HttpMsgInfo; import model.ReqMsgDataModel; import sqlUtils.buildSQL; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import static utils.BurpPrintUtils.*; public class ReqMsgDataTable { //数据表名称 public static String tableName = "REQ_MSG_DATA"; //创建用于存储 需要处理的URL的原始请求响应 static String creatTableSQL = "CREATE TABLE IF NOT EXISTS "+ tableName +" (\n" + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n" + " msg_hash TEXT UNIQUE,\n" + " req_url TEXT NOT NULL,\n" + " req_bytes BLOB,\n" + " resp_bytes BLOB\n" + ");"; //插入数据库 public static synchronized int insertOrUpdateMsgData(HttpMsgInfo msgInfo) { int generatedId = -1; // 默认ID值,如果没有生成ID,则保持此值 String checkSql = "SELECT id FROM "+ tableName +" WHERE msg_hash = ? ;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(checkSql)) { // 检查记录是否存在 stmt.setString(1, msgInfo.getMsgHash()); ResultSet rs = stmt.executeQuery(); if (rs.next()) { // 记录存在,忽略操作 // stdout_println(LOG_INFO, String.format("[*] Ignore Update [%s] %s -> %s", tableName, msgInfo.getUrlInfo().getReqUrl(), msgInfo.getMsgHash())); return 0; } else { // 记录不存在,插入新记录 String insertSql = "INSERT INTO "+ tableName + " (msg_hash, req_url, req_bytes, resp_bytes)" + " VALUES (?, ?, ?, ?)"; try (PreparedStatement insertStmt = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS)) { insertStmt.setString(1, msgInfo.getMsgHash()); insertStmt.setString(2, msgInfo.getUrlInfo().getRawUrlUsual()); insertStmt.setBytes(3, msgInfo.getReqBytes()); insertStmt.setBytes(4, msgInfo.getRespBytes()); insertStmt.executeUpdate(); // 获取生成的键值 try (ResultSet generatedKeys = insertStmt.getGeneratedKeys()) { if (generatedKeys.next()) { generatedId = generatedKeys.getInt(1); // 获取生成的ID } } } } } catch (Exception e) { stderr_println(String.format("[-] Error inserting or updating table [%s] -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return generatedId; // 返回ID值,无论是更新还是插入 } /** * 基于id获取对应的数据 考虑更换为msg_hash * @return */ public static synchronized ReqMsgDataModel fetchMsgDataById(Integer msgDataIndex){ ReqMsgDataModel msgData = null; String sql = "SELECT * FROM "+ tableName +" WHERE id = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setInt(1, msgDataIndex); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { msgData = new ReqMsgDataModel( rs.getString("msg_hash"), rs.getString("req_url"), rs.getBytes("req_bytes"), rs.getBytes("resp_bytes") ); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Select Msg Data By Id: %s -> %s", msgDataIndex, e.getMessage())); } return msgData; } /** * 根据消息ID查询请求内容 * @return */ public static synchronized ReqMsgDataModel fetchMsgDataByMsgHash(String msgHash){ ReqMsgDataModel msgData = null; String sql = "SELECT * FROM "+ tableName + " WHERE msg_hash = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, msgHash); try (ResultSet rs = stmt.executeQuery()) { if (rs.next()) { msgData = new ReqMsgDataModel( rs.getString("msg_hash"), rs.getString("req_url"), rs.getBytes("req_bytes"), rs.getBytes("resp_bytes") ); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Select Msg Data By Msg Hash: %s -> %s", msgHash, e.getMessage())); } return msgData; } /** * 根据 RootUrl 查询请求内容 最新的一条 * @return */ public static ReqMsgDataModel fetchMsgDataByRootUrlDesc(String rootUrl) { ReqMsgDataModel msgData = null; String sql = "SELECT * FROM "+ tableName + " WHERE req_url like ? ORDER BY id DESC Limit 1;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, rootUrl + '%'); ResultSet rs = stmt.executeQuery(); if (rs.next()) { msgData = new ReqMsgDataModel( rs.getString("msg_hash"), rs.getString("req_url"), rs.getBytes("req_bytes"), rs.getBytes("resp_bytes") ); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Select Msg Data By rootUrl: %s -> %s", rootUrl, e.getMessage())); } return msgData; } /** * 根据消息ID查询请求内容 */ public static synchronized List<ReqMsgDataModel> fetchMsgDataByMsgHashList(List<String> msgHashList){ List<ReqMsgDataModel> reqMsgDataModelList = new ArrayList<>(); if (msgHashList.isEmpty()) return reqMsgDataModelList; String selectSQL = ("SELECT * FROM "+ tableName + " WHERE msg_hash IN $buildInParameterList$;") .replace("$buildInParameterList$", buildSQL.buildInParamList(msgHashList.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < msgHashList.size(); i++) { stmt.setString(i + 1, msgHashList.get(i)); } try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { ReqMsgDataModel msgData = new ReqMsgDataModel( rs.getString("msg_hash"), rs.getString("req_url"), rs.getBytes("req_bytes"), rs.getBytes("resp_bytes") ); reqMsgDataModelList.add(msgData); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Batch Select Msg Data By Msg Hash: %s -> %s", msgHashList, e.getMessage())); } return reqMsgDataModelList; } } ================================================ FILE: src/main/java/database/TableLineDataModelBasicHostSQL.java ================================================ package database; import model.BasicHostTableLineDataModel; import sqlUtils.Constants; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import static utils.BurpPrintUtils.LOG_ERROR; import static utils.BurpPrintUtils.stderr_println; /** * 存储基于主机相关的SQL查询函数 */ public class TableLineDataModelBasicHostSQL { private static String genHostTableSqlByWhereCondition(String WhereCondition){ String selectSQL = ("SELECT id,root_url,find_info_num,has_important,find_url_num," + "find_path_num,find_api_num,path_to_url_num,unvisited_url_num,basic_path_num,all_url_num,run_status " + "FROM $tableName$ $WHERE$;") .replace("$tableName$", AnalyseHostResultTable.tableName); if (WhereCondition == null) WhereCondition= ""; return selectSQL.replace("$WHERE$", WhereCondition); } //联合 获取所有行数据 public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineBySQl(String selectSQL){ ArrayList<BasicHostTableLineDataModel> apiDataModels = new ArrayList<>(); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { BasicHostTableLineDataModel apiDataModel = new BasicHostTableLineDataModel( rs.getInt("id"), rs.getString("root_url"), rs.getInt("find_info_num"), rs.getBoolean("has_important"), rs.getInt("find_url_num"), rs.getInt("find_path_num"), rs.getInt("find_api_num"), rs.getInt("path_to_url_num"), rs.getInt("unvisited_url_num"), rs.getInt("all_url_num"), rs.getInt("basic_path_num"), rs.getString("run_status") ); apiDataModels.add(apiDataModel); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Fetch All ReqData Left Join InfoAnalyse On SQL: %s", e.getMessage())); } return apiDataModels; } // 获取当前所有记录 public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineAll() { String selectSQL = genHostTableSqlByWhereCondition(null); return fetchHostTableLineBySQl(selectSQL); } //获取有效数据的行 public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineHasInfoOrUri() { // 获取当前所有记录的数据 String WhereCondition = "Where find_url_num>0 or find_path_num>0 or find_info_num>0"; String selectSQL = genHostTableSqlByWhereCondition(WhereCondition); return fetchHostTableLineBySQl(selectSQL); } //获取有效数据的行 并且忽略已经处理的项 public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineHasInfoOrUriNotHandle() { // 获取当前所有记录的数据 String WhereCondition = ("Where (find_url_num>0 or find_path_num>0 or find_info_num>0) and run_status != 'RUN_STATUS'") .replace("RUN_STATUS", Constants.HANDLE_END); String selectSQL = genHostTableSqlByWhereCondition(WhereCondition); return fetchHostTableLineBySQl(selectSQL); } //获取敏感数据的行 public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineHasInfo() { // 获取当前所有记录的数据 String WhereCondition = "where find_info_num>0"; String selectSQL = genHostTableSqlByWhereCondition(WhereCondition); return fetchHostTableLineBySQl(selectSQL); } //获取敏感数据的行 并且忽略已经处理的项 public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineHasInfoNotHandle() { // 获取当前所有记录的数据 String WhereCondition = ("where find_info_num>0 and run_status != 'RUN_STATUS'") .replace("RUN_STATUS", Constants.HANDLE_END); String selectSQL = genHostTableSqlByWhereCondition(WhereCondition); return fetchHostTableLineBySQl(selectSQL); } public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineHasUnVisitedUrls() { // 获取当前所有记录的数据 String WhereCondition = "where unvisited_url_num>0"; String selectSQL = genHostTableSqlByWhereCondition(WhereCondition); return fetchHostTableLineBySQl(selectSQL); } public static synchronized ArrayList<BasicHostTableLineDataModel> fetchHostTableLineAnyIsNull() { // 获取当前所有记录的数据 String WhereCondition = "where (find_url_num is null and find_path_num is null and find_info_num is null) or (find_url_num <1 and find_path_num <1 and find_info_num <1) "; String selectSQL = genHostTableSqlByWhereCondition(WhereCondition); return fetchHostTableLineBySQl(selectSQL); } } ================================================ FILE: src/main/java/database/TableLineDataModelBasicUrlSQL.java ================================================ package database; import model.BasicUrlTableLineDataModel; import sqlUtils.Constants; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import static utils.BurpPrintUtils.*; public class TableLineDataModelBasicUrlSQL { private static String genUrlTableSqlByWhereCondition(String WhereCondition){ String selectSQL = ("SELECT A.id,A.msg_hash,A.req_url,A.req_method,A.resp_status_code,A.req_source,A.run_status,A.resp_length," + "B.find_url_num,B.find_path_num,B.find_info_num,B.has_important,B.find_api_num " + "from $tableName1$ A LEFT JOIN $tableName2$ B ON A.msg_hash = B.msg_hash $WHERE$ order by A.id;") .replace("$tableName1$", ReqDataTable.tableName) .replace("$tableName2$", AnalyseUrlResultTable.tableName); if (WhereCondition == null) WhereCondition=""; return selectSQL.replace("$WHERE$", WhereCondition); } //联合 获取所有行数据 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineBySQl(String selectSQL){ ArrayList<BasicUrlTableLineDataModel> apiDataModels = new ArrayList<>(); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { BasicUrlTableLineDataModel apiDataModel = new BasicUrlTableLineDataModel( rs.getInt("id"), rs.getString("msg_hash"), rs.getString("req_url"), rs.getString("req_method"), rs.getInt("resp_status_code"), rs.getString("req_source"), rs.getInt("find_url_num"), rs.getInt("find_path_num"), rs.getInt("find_info_num"), rs.getBoolean("has_important"), rs.getInt("find_api_num"), rs.getString("run_status"), rs.getInt("resp_length") ); apiDataModels.add(apiDataModel); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error Fetch All ReqData Left Join InfoAnalyse On MsgHash: %s", e.getMessage())); } return apiDataModels; } // 获取当前所有记录 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineAll() { String selectSQL = genUrlTableSqlByWhereCondition(null); return fetchUrlTableLineBySQl(selectSQL); } //获取有效数据的行 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineHasInfoOrUri() { // 获取当前所有记录的数据 String WhereCondition = "Where find_url_num>0 or find_path_num>0 or find_info_num>0"; String selectSQL = genUrlTableSqlByWhereCondition(WhereCondition); return fetchUrlTableLineBySQl(selectSQL); } //获取有效数据的行 并且忽略已处理的项 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineHasInfoOrUriNotHandle() { // 获取当前所有记录的数据 String WhereCondition = ("Where (find_url_num>0 or find_path_num>0 or find_info_num>0) and A.run_status != 'RUN_STATUS'") .replace("RUN_STATUS", Constants.HANDLE_END); String selectSQL = genUrlTableSqlByWhereCondition(WhereCondition); return fetchUrlTableLineBySQl(selectSQL); } //获取存在敏感信息的行 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineHasInfo() { // 获取当前所有记录的数据 String WhereCondition = "where find_info_num>0"; String selectSQL = genUrlTableSqlByWhereCondition(WhereCondition); return fetchUrlTableLineBySQl(selectSQL); } //获取存在敏感信息的行 并且忽略已处理的项 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineHasInfoNotHandle() { // 获取当前所有记录的数据 String WhereCondition = ("where find_info_num>0 and A.run_status != 'RUN_STATUS'") .replace("RUN_STATUS", Constants.HANDLE_END); String selectSQL = genUrlTableSqlByWhereCondition(WhereCondition); return fetchUrlTableLineBySQl(selectSQL); } //获取没有数据的行,备用,用于后续删除数据 public static synchronized ArrayList<BasicUrlTableLineDataModel> fetchUrlTableLineAnyIsNull() { // 获取当前所有记录的数据 String WhereCondition = "where (find_url_num is null and find_path_num is null and find_info_num is null) or (find_url_num <1 and find_path_num <1 and find_info_num <1) "; String selectSQL = genUrlTableSqlByWhereCondition(WhereCondition); return fetchUrlTableLineBySQl(selectSQL); } //获取没有数据的行,备用,用于后续删除数据 public static synchronized int clearUrlTableLineAnyIsNull() { int rowsAffected = -1; // 获取当前所有记录的数据 String deleteSQL = ("DELETE FROM $tableName1$ WHERE id IN (" + "SELECT A.id FROM $tableName1$ A LEFT JOIN $tableName2$ B ON A.msg_hash=B.msg_hash " + "WHERE (find_url_num IS NULL AND find_path_num IS NULL AND find_info_num IS NULL) " + "OR (find_url_num < 1 AND find_path_num < 1 AND find_info_num < 1));") .replace("$tableName1$", ReqDataTable.tableName) .replace("$tableName2$", AnalyseUrlResultTable.tableName); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(deleteSQL)) { rowsAffected = stmt.executeUpdate(); stdout_println(LOG_DEBUG, String.format(String.format("[-] table [%s] cleared Useless Data [%s] line.", ReqDataTable.tableName, rowsAffected))); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error clear Useless Data On Table [%s] -> Error:[%s]", ReqDataTable.tableName, e.getMessage())); e.printStackTrace(); } return rowsAffected; } } ================================================ FILE: src/main/java/model/AccessedUrlInfo.java ================================================ package model; import static utils.RespHashUtils.calcCRC32; public class AccessedUrlInfo { public String rootUrl; public String reqUrl; public String urlHash; public int respStatusCode; public AccessedUrlInfo(String reqUrl, String rootUrl, int respStatusCode) { this.reqUrl = reqUrl; this.rootUrl = rootUrl; this.respStatusCode = respStatusCode; this.urlHash = calcCRC32(reqUrl); } public String getUrlHash() { return urlHash; } public String getReqUrl() { return reqUrl; } public String getRootUrl() { return rootUrl; } public int getRespStatusCode() { return respStatusCode; } } ================================================ FILE: src/main/java/model/AnalyseHostResultModel.java ================================================ package model; import com.alibaba.fastjson2.JSONArray; import utils.CastUtils; import java.util.HashMap; import java.util.List; /** * 用来存储基于主机的结果的模型 */ public class AnalyseHostResultModel { private String rootUrl; private HashMap<String, JSONArray> urlInfoArrayMap; private List<String> urlList; private List<String> pathList; private List<String> apiList; private Boolean hasImportant; // 中转构造函数 public AnalyseHostResultModel(AnalyseUrlResultModel analyseUrlResultModel) { this.rootUrl = new HttpUrlInfo(analyseUrlResultModel.getReqUrl()).getRootUrlUsual(); this.urlInfoArrayMap = analyseUrlResultModel.getUrlInfoArrayMap(); this.urlList = analyseUrlResultModel.getUrlList(); this.pathList = analyseUrlResultModel.getPathList(); this.apiList = analyseUrlResultModel.getApiList(); this.hasImportant = analyseUrlResultModel.getHasImportant(); } public String getRootUrl() { return rootUrl; } public HashMap<String, JSONArray> getUrlInfoArrayMap() { return urlInfoArrayMap; } public List<String> getUrlList() { return urlList; } public List<String> getPathList() { return pathList; } public List<String> getApiList() { return apiList; } public Boolean getHasImportant() { return hasImportant; } public List<String> getUnvisitedUrlList() { return CastUtils.listAddList(this.urlList, this.apiList); } public List<String> getUnvisitedUrlList(boolean addApiList) { if (addApiList) return CastUtils.listAddList(this.urlList, this.apiList); else return this.urlList; } } ================================================ FILE: src/main/java/model/AnalyseUrlResultModel.java ================================================ package model; import com.alibaba.fastjson2.JSONArray; import utils.CastUtils; import java.util.HashMap; import java.util.List; import java.util.Map; public class AnalyseUrlResultModel { private String reqUrl; private JSONArray infoArray; private List<String> urlList; private List<String> pathList; private List<String> apiList; private Boolean hasImportant; //新增一个URL类型的 public AnalyseUrlResultModel(String reqUrl, JSONArray infoArray, List<String> urlList, List<String> pathList, List<String> apiList, Boolean hasImportant) { this.reqUrl = reqUrl; this.infoArray = infoArray; this.urlList = urlList; this.pathList = pathList; this.apiList = apiList; this.hasImportant = hasImportant; } public AnalyseUrlResultModel(String reqUrl, String infoJsonArrayStr, String urlListStr, String pathListStr, String apiListStr, Boolean hasImportant) { this.reqUrl = reqUrl; this.infoArray = CastUtils.toJsonArray(infoJsonArrayStr); this.urlList = CastUtils.toStringList(urlListStr); this.pathList = CastUtils.toStringList(pathListStr); this.apiList = CastUtils.toStringList(apiListStr); this.hasImportant = hasImportant; } public String getReqUrl() { return reqUrl; } public JSONArray getInfoArray() { return infoArray; } public List<String> getUrlList() { return urlList; } public List<String> getPathList() { return pathList; } public List<String> getApiList() { return apiList; } public Boolean getHasImportant() { return hasImportant; } public HashMap<String, JSONArray> getUrlInfoArrayMap() { HashMap<String,JSONArray> urlInfoArrayMap= new HashMap<>(); if (!infoArray.isEmpty()){ urlInfoArrayMap.put(reqUrl,infoArray); } return urlInfoArrayMap; } } ================================================ FILE: src/main/java/model/BasicHostTableLineDataModel.java ================================================ package model; public class BasicHostTableLineDataModel { private Integer id; private String rootUrl; private String host; private String domain; private Integer findInfoNum; private Boolean hasImportant; private Integer findUrlNum; private Integer findPathNum; private Integer findApiNum; private Integer pathToUrlNum; private Integer unvisitedUrlNum; private Integer allUrlNum; private Integer basicPathNum; private String runStatus; // 构造函数 public BasicHostTableLineDataModel(int id, String rootUrl, int findInfoNum, boolean hasImportant, int findUrlNum, int findPathNum, int findApiNum, int pathToUrlNum, int unvisitedUrlNum, int allUrlNum, int basicPathNum, String runStatus) { this.id = id; this.rootUrl = rootUrl; this.host = parseHostFromUrl(rootUrl); this.domain = parseDomainFromUrl(rootUrl); this.findInfoNum = findInfoNum; this.hasImportant = hasImportant; this.findUrlNum = findUrlNum; this.findPathNum = findPathNum; this.findApiNum = findApiNum; this.pathToUrlNum = pathToUrlNum; this.unvisitedUrlNum = unvisitedUrlNum; this.allUrlNum = allUrlNum; this.basicPathNum = basicPathNum; this.runStatus = runStatus; } private String parseHostFromUrl(String rootUrl) { //从URL中解析出host return new HttpUrlInfo(rootUrl).getHostPort(); } private String parseDomainFromUrl(String rootUrl) { //从URL中解析出domain return new HttpUrlInfo(rootUrl).getRootDomain(); } public Object[] toRowDataArray() { return new Object[]{ this.getId(), this.getRootUrl(), this.getHost(), this.getDomain(), this.getHasImportant(), this.getFindInfoNum(), this.getFindUrlNum(), this.getFindPathNum(), this.getFindApiNum(), this.getPathToUrlNum(), this.getUnvisitedUrlNum(), this.getAllUrlNum(), this.getBasicPathNum(), this.getRunStatus() }; } public Integer getId() { return id; } public String getRootUrl() { return rootUrl; } public Integer getFindInfoNum() { return findInfoNum; } public Boolean getHasImportant() { return hasImportant; } public Integer getFindUrlNum() { return findUrlNum; } public Integer getFindPathNum() { return findPathNum; } public Integer getFindApiNum() { return findApiNum; } public Integer getPathToUrlNum() { return pathToUrlNum; } public Integer getUnvisitedUrlNum() { return unvisitedUrlNum; } public Integer getBasicPathNum() { return basicPathNum; } public String getRunStatus() { return runStatus; } public Integer getAllUrlNum() { return allUrlNum; } public String getHost() { return host; } public String getDomain() { return domain; } } ================================================ FILE: src/main/java/model/BasicHostTableTabDataModel.java ================================================ package model; public class BasicHostTableTabDataModel { private String rootUrl; private String findInfo; private String findUrl; private String findPath; private String findApi; private String pathToUrl; private String unvisitedUrl; private String allUrlStatus; public BasicHostTableTabDataModel(String rootUrl, String findInfo, String findUrl, String findPath, String findApi, String pathToUrl, String unvisitedUrl, String allUrlStatus) { this.rootUrl = rootUrl; this.findUrl = findUrl; this.findPath = findPath; this.findInfo = findInfo; this.findApi = findApi; this.pathToUrl = pathToUrl; this.unvisitedUrl = unvisitedUrl; this.allUrlStatus = allUrlStatus; } public String getRootUrl() { return rootUrl; } public String getFindUrl() { return findUrl; } public String getFindPath() { return findPath; } public String getFindInfo() { return findInfo; } public String getFindApi() { return findApi; } public String getPathToUrl() { return pathToUrl; } public String getUnvisitedUrl() { return unvisitedUrl; } public String getAllUrlStatus() { return allUrlStatus; } } ================================================ FILE: src/main/java/model/BasicUrlTableLineDataModel.java ================================================ package model; public class BasicUrlTableLineDataModel { private Integer id; private String msgHash; private String reqUrl; private String reqMethod; private Integer respStatusCode; private String reqSource; private Integer findUrlNum; private Integer findPathNum; private Integer findInfoNum; private Integer findApiNum; private String runStatus; private Integer respLength; private Boolean hasImportant; // 构造函数 public BasicUrlTableLineDataModel(int id, String msgHash, String reqUrl, String reqMethod, int respStatusCode, String reqSource, int findUrlNum, int findPathNum, int findInfoNum, boolean hasImportant, int findApiNum, String runStatus, int respLength) { this.id = id; this.msgHash = msgHash; this.reqUrl = reqUrl; this.reqMethod = reqMethod; this.respStatusCode = respStatusCode; this.reqSource = reqSource; this.findUrlNum = findUrlNum; this.findPathNum = findPathNum; this.findInfoNum = findInfoNum; this.findApiNum = findApiNum; this.runStatus = runStatus; this.respLength = respLength; this.hasImportant = hasImportant; } public Object[] toRowDataArray() { return new Object[]{ this.getId(), this.getReqSource(), this.getMsgHash(), this.getReqUrl(), this.getReqMethod(), this.getRespStatusCode(), this.getRespLength(), this.getHasImportant(), this.getFindInfoNum(), this.getFindUrlNum(), this.getFindPathNum(), this.getFindApiNum(), this.getRunStatus() }; } public Integer getId() { return id; } public String getMsgHash() { return msgHash; } public String getReqUrl() { return reqUrl; } public String getReqMethod() { return reqMethod; } public Integer getRespStatusCode() { return respStatusCode; } public String getReqSource() { return reqSource; } public Integer getFindUrlNum() { return findUrlNum; } public Integer getFindPathNum() { return findPathNum; } public Integer getFindInfoNum() { return findInfoNum; } public Integer getFindApiNum() { return findApiNum; } public String getRunStatus() { return runStatus; } public Integer getRespLength() { return respLength; } public Boolean getHasImportant() { return hasImportant; } } ================================================ FILE: src/main/java/model/BasicUrlTableTabDataModel.java ================================================ package model; public class BasicUrlTableTabDataModel { private String msgHash; private String findUrl; private String findPath; private String findInfo; private String findApi; public BasicUrlTableTabDataModel(String msgHash, String findUrl, String findPath, String findInfo, String findApi) { this.msgHash = msgHash; this.findUrl = findUrl; this.findPath = findPath; this.findInfo = findInfo; this.findApi = findApi; } public String getMsgHash() { return msgHash; } public String getFindUrl() { return findUrl; } public String getFindPath() { return findPath; } public String getFindInfo() { return findInfo; } public String getFindApi() { return findApi; } } ================================================ FILE: src/main/java/model/FindPathModel.java ================================================ package model; import com.alibaba.fastjson2.JSONArray; import utils.PathTreeUtils; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; public class FindPathModel { private int id; private String rootUrl; private JSONArray findPath; public FindPathModel(int id, String rootUrl, String findPath) { this.id = id; this.rootUrl = rootUrl; this.findPath = JSONArray.parse(findPath); } public int getId() { return id; } public String getRootUrl() { return rootUrl; } public JSONArray getFindPath() { return findPath; } /** * 从路径模型中获取单层路径 * @param findPathModelList * @return */ public static Set<String> getSingleLayerPathSet(List<FindPathModel> findPathModelList) { Set<String> pathSet = new LinkedHashSet<>(); //查询msgHash列表对应的所有数据find path 数据 for (FindPathModel findPathModel: findPathModelList){ //逐个提取PATH 并 加入 pathSet JSONArray findPaths = findPathModel.getFindPath(); if (!findPaths.isEmpty()){ // 提取 path中的单层路径 for (Object uriPath : findPaths){ List<String> uriPart = PathTreeUtils.getUrlPart((String) uriPath); if (uriPart.size() == 1){ pathSet.add(PathTreeUtils.formatUriPath((String) uriPath)); } } } } return pathSet; } } ================================================ FILE: src/main/java/model/FingerPrintRule.java ================================================ package model; import utils.CastUtils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class FingerPrintRule { private String matchType; private String location; private String describe; private List<String> matchKeys; private boolean isImportant; private String type; private boolean isOpen; private String accuracy; // 新添加的构造函数 public FingerPrintRule(String type, String describe, boolean isImportant, String matchType, String location, List<String> matchKeys, boolean isOpen, String accuracy) { this.matchType = matchType; this.describe = describe; this.location = location; this.matchKeys = matchKeys; this.type = type; this.isImportant = isImportant; this.isOpen = isOpen; this.accuracy = accuracy; } public boolean getIsOpen(){ return isOpen; } public void setOpen(boolean isOpen){ this.isOpen = isOpen; } public String getAccuracy(){ return accuracy; } public void setAccuracy(String accuracy){ this.accuracy = accuracy; } public String getDescribe(){return describe;} public void setDescribe(String describe){ this.describe = describe; } public String getType(){return type;} public void setType(String type){this.type = type;} public boolean getIsImportant(){return isImportant;} public void setIsImportant(boolean isImportant){this.isImportant = isImportant;} public String getMatchType() { return matchType; } public void setMatchType(String matchType) { this.matchType = matchType; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public List<String> getMatchKeys() { return matchKeys; } public void setMatchKeys(List<String> matchKeys) { this.matchKeys = matchKeys; } public String getInfo(String color){ return "Time: " + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date()) + "<br>matchType: " + matchType + "<br>Type: " + type + "<br>accuracy: " + accuracy + "<br>describe: <span style='color: " + color + ";'>" + describe + "</span><br>location: " + location + "<br>matchKeys: " + CastUtils.listToString(matchKeys) + "<br>"; } } ================================================ FILE: src/main/java/model/FingerPrintRulesWrapper.java ================================================ package model; import java.util.List; public class FingerPrintRulesWrapper { private List<FingerPrintRule> fingerprint; public List<FingerPrintRule> getFingerprint() { return fingerprint; } public void setFingerprint(List<FingerPrintRule> fingerprint) { this.fingerprint = fingerprint; } } ================================================ FILE: src/main/java/model/HttpMsgInfo.java ================================================ package model; import burp.*; import java.nio.charset.StandardCharsets; import java.util.zip.CRC32; import static utils.CastUtils.isNotEmptyObj; //创建一个类用于存储 代理 流量的解析结果 public class HttpMsgInfo { private static final IExtensionHelpers helpers = BurpExtender.getHelpers(); private byte[] reqBytes; private byte[] respBytes; private String reqMethod; private HttpUrlInfo urlInfo; private HttpRespInfo respInfo; private int respStatusCode; private String respTitle; private String msgHash; // 构造函数 public HttpMsgInfo(IInterceptedProxyMessage iInterceptedProxyMessage) { IHttpRequestResponse messageInfo = iInterceptedProxyMessage.getMessageInfo(); reqBytes = messageInfo.getRequest(); //请求方法 IRequestInfo requestInfoBetter = helpers.analyzeRequest(messageInfo); reqMethod = requestInfoBetter.getMethod(); //从请求URL解析部分信息 //直接从请求体是没有办法获取到请求URL信息的, URL此时只能从外部传入 String reqUrl = requestInfoBetter.getUrl().toString(); urlInfo = new HttpUrlInfo(reqUrl); //从响应结果解析部分信息 respBytes = messageInfo.getResponse(); respInfo = new HttpRespInfo(respBytes); //响应码是常用的 respStatusCode = respInfo.getStatusCode(); respTitle = respInfo.getRespTitle(); //请求响应信息的简单hash值 msgHash = calcMsgHash(urlInfo.getUrlToFileUsual(),reqMethod,respStatusCode,respInfo.getBodyLenVague()); } // 构造函数 public HttpMsgInfo(IHttpRequestResponse iHttpRequestResponse) { //请求信息 reqBytes = iHttpRequestResponse.getRequest(); //请求方法 IHttpService httpService = iHttpRequestResponse.getHttpService(); IRequestInfo requestInfoBetter = helpers.analyzeRequest(httpService,reqBytes); reqMethod = requestInfoBetter.getMethod(); //从请求URL解析部分信息 String reqUrl = requestInfoBetter.getUrl().toString(); urlInfo = new HttpUrlInfo(reqUrl); //从响应结果解析部分信息 respBytes = iHttpRequestResponse.getResponse(); respInfo = new HttpRespInfo(respBytes); //响应码是常用的 respStatusCode = respInfo.getStatusCode(); respTitle = respInfo.getRespTitle(); //请求响应信息的简单hash值 msgHash = calcMsgHash(urlInfo.getUrlToFileUsual(),reqMethod,respStatusCode,respInfo.getBodyLenVague()); } // 构造函数 public HttpMsgInfo(String requestUrl, byte[] requestBytes, byte[] responseBytes, String msgInfoHash) { //请求信息 reqBytes = requestBytes; //请求方法 IRequestInfo requestInfoSimple = helpers.analyzeRequest(reqBytes); reqMethod = requestInfoSimple.getMethod(); //从请求URL解析部分信息 String reqUrl = requestUrl; urlInfo = new HttpUrlInfo(reqUrl); //从响应结果解析部分信息 respBytes = responseBytes; respInfo = new HttpRespInfo(respBytes); //响应码是常用的 respStatusCode = respInfo.getStatusCode(); respTitle = respInfo.getRespTitle(); //请求响应信息的简单hash值 因为中间可能截断了超大的响应体 , 因此最好手动传入 msgHash msgHash = msgInfoHash; } /** * 计算消息Hash */ private String calcMsgHash(String urlToFileUsual, String reqMethod, int respStatusCode, int respBodyLenVague) { return calcCRC32(String.format("%s|%s|%s|%s", urlToFileUsual, reqMethod, respStatusCode, respBodyLenVague)); } /** * 计算给定字符串的CRC32校验和,并以十六进制字符串形式返回。 * @param string 要计算CRC32的字符串 * @return 字符串的CRC32校验和的十六进制表示 */ private static String calcCRC32(String string) { // 使用 UTF-8 编码将字符串转换为字节数组 byte[] inputBytes = string.getBytes(StandardCharsets.UTF_8); // 初始化CRC32对象 CRC32 crc32 = new CRC32(); // 更新CRC值 crc32.update(inputBytes, 0, inputBytes.length); // 将计算后的CRC32值转换为十六进制字符串并返回 return Long.toHexString(crc32.getValue()).toLowerCase(); } public String getReqMethod() { return reqMethod; } public byte[] getRespBytes() { return respBytes; } public byte[] getReqBytes() { return reqBytes; } public String getMsgHash() { return msgHash; } public void setRespBytes(byte[] respBytes) { this.respBytes = respBytes; } public HttpUrlInfo getUrlInfo() { return urlInfo; } public HttpRespInfo getRespInfo() { return respInfo; } public int getRespStatusCode() { return respStatusCode; } public String getRespTitle() { return respTitle; } } ================================================ FILE: src/main/java/model/HttpRespInfo.java ================================================ package model; import burp.BurpExtender; import burp.IExtensionHelpers; import burp.IResponseInfo; import utils.RespHashUtils; import utils.RespTitleUtils; import java.util.Arrays; public class HttpRespInfo { private static final IExtensionHelpers helpers = BurpExtender.getHelpers(); private byte[] respBytes = "".getBytes(); private int statusCode = -1; private int respLength = -1; private int bodyLength = -1; private int bodyLenVague = -1; private String inferredMimeType = ""; private String statedMimeType = ""; private int bodyOffset = -1; private String respTitle = ""; private String iconHash = ""; //记录响应体的hash值 public String getIconHash() { return iconHash; } HttpRespInfo(byte[] responseBytes) { if (responseBytes == null || responseBytes.length <= 0){ // Warning: That response body is empty !!! return; } respBytes = responseBytes; //响应长度 respLength = respBytes.length; //响应信息 IResponseInfo responseInfo = helpers.analyzeResponse(respBytes); //响应状态码 statusCode = responseInfo.getStatusCode(); //获取响应类型 inferredMimeType = responseInfo.getInferredMimeType(); //根据响应的内容自动推断出的 MIME 类型 statedMimeType = responseInfo.getStatedMimeType(); //由服务器明确声明的内容类型 //响应体分割标记 bodyOffset = responseInfo.getBodyOffset(); bodyLength = getBodyBytes().length; //大致的响应长度 bodyLenVague = bodyLength / 200; //响应文本标题 respTitle = RespTitleUtils.parseTextTitle(respBytes); //当响应类型是 ico 类型时计算一下hash值 if (getStatedMimeType() != null && getStatedMimeType().contains("ico")){ iconHash = RespHashUtils.getFaviconHash(getBodyBytes()); } } /** * 获取 请求体或响应体的body部分 */ public byte[] getBodyBytes() { // 确保 bodyOffset 不会导致数组越界 int bodyLength = Math.max(0, respBytes.length - bodyOffset); // 从 bytes 数组中复制 body 的部分 return Arrays.copyOfRange(respBytes, bodyOffset, bodyOffset + bodyLength); } /** * 获取 请求或响应的头部信息部分 */ public byte[] getHeaderBytes() { // 确保 headerOffset 不会导致数组越界,并且至少是从0开始 int headerLength = Math.max(0, bodyOffset); // 从 bytes 数组中复制 header 的部分 return Arrays.copyOfRange(respBytes, 0, headerLength); } public int getStatusCode() { return statusCode; } public int getRespLength() { return respLength; } public int getBodyLength() { return bodyLength; } public int getBodyLenVague() { return bodyLenVague; } public String getInferredMimeType() { return inferredMimeType; } public String getStatedMimeType() { return statedMimeType; } public int getBodyOffset() { return bodyOffset; } public byte[] getRespBytes() { return respBytes; } public String getRespTitle() { return respTitle; } } ================================================ FILE: src/main/java/model/HttpUrlInfo.java ================================================ package model; import utilbox.DomainUtils; import java.net.MalformedURLException; import java.net.URL; import static utils.BurpPrintUtils.stderr_println; import static utils.CastUtils.*; //创建一个类用于存储 URL解析结果的类 public class HttpUrlInfo { private String rawUrl; private String rawUrlUsual; private String proto = null; private String host = null; private int port = -1; private String file = null; private String query = null; private String ref = null; private String hostPort = null; private String hostPortUsual = null; private String pathToFile = null; private String pathToDir = null; private String pathToEnd = null; private String suffix = null; private String suffixUsual = null; private String rootDomain = null; private String rootUrl = null; private String rootUrlUsual = null; private String rootUrlNotSlash = null; private String urlToFile = null; private String urlToPath = null; private String urlToFileUsual = null; private String urlToPathUsual = null; public HttpUrlInfo(String requestUrl){ rawUrl = requestUrl; //基于URL获取其他请求信息 try { URL urlObj = new URL(rawUrl); //协议 (protocol):如 http 或 https proto = urlObj.getProtocol(); //协议 (protocol):如 http 或 https //主机 (host):如 www.example.com host = urlObj.getHost(); //端口 (port):如 80 或 443(默认情况下,如果未指定,http 默认为 80,https 默认为 443) 同时 检查reqPort为-1的情况 port = urlObj.getPort() < 0 ? urlObj.getDefaultPort() : urlObj.getPort(); //文件 resource file = urlObj.getFile(); //查询参数 (query):如 ?key=value&anotherKey=anotherValue query = urlObj.getQuery(); //片段标识符 (fragment):如 #section1 ref = urlObj.getRef(); //添加个HostPort对象 www.baidu.com:80 | www.baidu.com:8080 hostPort = String.format("%s:%s", host, port); //获取没有默认端口的请求头 www.baidu.com | www.baidu.com:8080 hostPortUsual = removeHostDefaultPort(hostPort,host,port); //获取前缀URL // http://www.baidu.com:80/ rootUrl = String.format("%s://%s/", proto, hostPort); //获取前缀URL // http://www.baidu.com/ rootUrlUsual = String.format("%s://%s/", proto, hostPortUsual); //获取前缀URL // http://www.baidu.com rootUrlNotSlash = String.format("%s://%s", proto, hostPortUsual); //解析请求文件的后缀 php html suffix = parseUrlExtStrict(file); //严重错误,域名中是有.符号的,因此不能直接截断域名 //解析请求文件的后缀 .php .html suffixUsual = isEmptyObj(suffix) ? suffix:"." + suffix; //获取主域名 baidu.com rootDomain = DomainUtils.getRootDomain(host); //路径 (path):如 /path/to/resource pathToFile = urlObj.getPath(); // 重新构造基本URL,不包含查询参数 http://www.baidu.com/path/to/resource urlToFile = new URL(proto, host, port, pathToFile).toString(); urlToFileUsual = removeUrlDefaultPort(urlToFile); //获取请求路径的目录部分 /path/to/ pathToDir = parseReqPathDir(pathToFile); //构造基本URL, 不包含请求文件 http://www.baidu.com/path/to/ urlToPath = new URL(proto, host, port, pathToDir).toString(); urlToPathUsual = removeUrlDefaultPort(urlToPath); //获取带有参数的完整Path 不带http信息 /path/to/resource?key=value#section1 pathToEnd = genFullPath(pathToFile, query, ref); //格式化URL 不显示默认端口 rawUrlUsual = removeUrlDefaultPort(rawUrl); } catch (MalformedURLException e) { stderr_println(String.format("Invalid URL: %s -> Error: %s", rawUrl, e.getMessage())); e.printStackTrace(); } } /** * 拼接 Path路径、?查询字符串、#索引 */ private String genFullPath(String pathToFile,String query,String ref) { StringBuilder fullPart = new StringBuilder(pathToFile); if (isNotEmptyObj(query)) { fullPart.append("?").append(query); } if (isNotEmptyObj(ref)) { fullPart.append("#").append(ref); } return fullPart.toString(); } /** * 从 path 解析请求后缀 严格模式 处理 # 和 ? */ private String parseUrlExtStrict(String path) { //忽略为空的情况 if (isEmptyObj(path)) return ""; int queryIndex = path.indexOf('?'); int fragmentIndex = path.indexOf('#'); int endIndex = -1; // 计算有效部分的结束索引 if (queryIndex > 0 && fragmentIndex >0){ endIndex = Math.min(queryIndex, fragmentIndex); } else if (queryIndex > 0 || fragmentIndex >0){ endIndex = Math.max(queryIndex, fragmentIndex); } else { endIndex = path.length(); } // 截取有效部分;否则使用整个URL String pureUrl = path.substring(0, endIndex); // 查找最后一个`.`的位置 int lastDotIndex = pureUrl.lastIndexOf('.'); // 如果有扩展名,提取它;否则返回空字符串 String extension = lastDotIndex > -1 ? pureUrl.substring(lastDotIndex + 1) : ""; // 将扩展名转换为小写 return extension.toLowerCase(); } /** * 从给定的URL字符串中提取请求的目录部分。 * @param reqPath 完整的URL字符串。 * @return 请求的目录路径,不包含最后一个路径分隔符。 */ public static String parseReqPathDir(String reqPath) { // 去除最后一个路径分隔符后面的文件名部分,如果有的话 int lastPathSepIndex = reqPath.lastIndexOf('/'); // 如果找到了路径分隔符(lastPathSepIndex 不等于 -1) if (lastPathSepIndex != -1) { // 从原始路径中截取出从开头到最后一个路径分隔符(包括该分隔符)的部分 +1是为了保留最后一个路径分隔符 return reqPath.substring(0, lastPathSepIndex + 1); } return "/"; } public String getRawUrlUsual() { return rawUrlUsual; } public String getProto() { return proto; } public String getHost() { return host; } public String getHostPort() { return hostPort; } public String getRootUrlUsual() { return rootUrlUsual; } private String getRootUrl() { return rootUrl; } public String getRootDomain() { return rootDomain; } public int getPort() { return port; } public String getQuery() { return query; } public String getRef() { return ref; } public String getPathToFile() { return pathToFile; } public String getPathToDir() { return pathToDir; } public String getSuffix() { return suffix; } public String getSuffixUsual() { return suffixUsual; } public String getUrlToFileUsual() { return urlToFileUsual; } public String getUrlToPathUsual() { return urlToPathUsual; } public String getPathToEnd() { return pathToEnd; } public String getHostPortUsual() { return hostPortUsual; } public String getRawUrl() { return rawUrl; } public String getFile() { return file; } public String getUrlToFile() { return urlToFile; } public String getUrlToPath() { return urlToPath; } public String getRootUrlNotSlash() { return rootUrlNotSlash; } /** * 1.remove default port(80\443) from the url * 2.add default path(/) to the url,if it's empty * 这个函数的目的是让URL的格式和通常从浏览器中复制的格式一致: * 在浏览器中,我们看到的是 baidu.com, 复制粘贴得到的是 https://www.baidu.com/ * <p> * 比如 * http://bit4woo.com:80/ ---> http://bit4woo.com/ * https://bit4woo.com:443 ---> https://bit4woo.com/ */ private String removeUrlDefaultPort(String urlString) { try { URL url = new URL(urlString); String proto = url.getProtocol(); String host = url.getHost(); int port = url.getPort(); //不包含端口时返回-1 String path = url.getPath(); if (port < 0 || (port == 80 && proto.equalsIgnoreCase("http")) || (port == 443 && proto.equalsIgnoreCase("https")) ) { String oldHost = url.getHost() + ":" + url.getPort(); urlString = urlString.replaceFirst(oldHost, host); } if (path.equals("")) { urlString = urlString + "/"; } return new URL(urlString).toString(); } catch (MalformedURLException e) { e.printStackTrace(); return urlString; } } private String removeHostDefaultPort(String hostPort, String host, int port) { if (port < 0 || (port == 80 && proto.equalsIgnoreCase("http")) || (port == 443 && proto.equalsIgnoreCase("https"))){ return host; } return hostPort; } /** * 1、这个函数的目的是:在【浏览器URL】的基础上,加上默认端口。 * <p> * https://www.baidu.com/ ---> https://www.baidu.com:443/ * http://www.baidu.com ---> http://www.baidu.com:80/ * <p> * 在浏览器中,我们看到的是 baidu.com, 复制粘贴得到的是 https://www.baidu.com/ * let url String contains default port(80\443) and default path(/) * <p> * burp中获取到的URL是包含默认端口的,但是平常浏览器中的URL格式都是不包含默认端口的。 * 应该尽量和平常使用习惯保存一致!所以尽量避免使用该函数。 * * @param urlStr * @return */ private String addUrlDefaultPort(String urlStr) { try { URL url = new URL(urlStr); String host = url.getHost(); int port = url.getPort(); String path = url.getPath(); if (port == -1) { String newHost = url.getHost() + ":" + url.getDefaultPort(); urlStr = urlStr.replaceFirst(host, newHost); } if (path.equals("")) { urlStr = urlStr + "/"; } return new URL(urlStr).toString(); } catch (MalformedURLException e) { e.printStackTrace(); return urlStr; } } } ================================================ FILE: src/main/java/model/PathToUrlsModel.java ================================================ package model; import com.alibaba.fastjson2.JSONArray; import utils.CastUtils; import java.util.List; public class PathToUrlsModel { private int id; private int basicPathNum; private List<String> pathToUrls; private List<String> unvisitedUrls; public PathToUrlsModel(int id, int basic_path_num, JSONArray pathToUrls, JSONArray unvisitedUrls) { this.id = id; this.basicPathNum = basic_path_num; this.pathToUrls = CastUtils.toStringList(pathToUrls); this.unvisitedUrls = CastUtils.toStringList(unvisitedUrls); } public PathToUrlsModel(int id, int basic_path_num, String pathToUrls, String unvisitedUrls) { this.id = id; this.basicPathNum = basic_path_num; this.pathToUrls = CastUtils.toStringList(pathToUrls); this.unvisitedUrls = CastUtils.toStringList(unvisitedUrls); } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getBasicPathNum() { return basicPathNum; } public void setBasicPathNum(int basicPathNum) { this.basicPathNum = basicPathNum; } public List<String> getPathToUrls() { return pathToUrls; } public void setPathToUrls(List<String> pathToUrls) { this.pathToUrls = pathToUrls; } public List<String> getUnvisitedUrls() { return unvisitedUrls; } public void setUnvisitedUrls(List<String> unvisitedUrls) { this.unvisitedUrls = unvisitedUrls; } } ================================================ FILE: src/main/java/model/PathTreeModel.java ================================================ package model; import com.alibaba.fastjson2.JSONObject; import utils.CastUtils; public class PathTreeModel { private String rootUrl; private Integer basicPathNum; private JSONObject pathTree; public PathTreeModel(String rootUrl, Integer basicPathNum, JSONObject pathTree) { this.rootUrl = rootUrl; this.basicPathNum = basicPathNum; this.pathTree = pathTree; } public PathTreeModel(String rootUrl, int basicPathNum, String pathTree) { this.rootUrl = rootUrl; this.basicPathNum = basicPathNum; this.pathTree = CastUtils.toJsonObject(pathTree); } public Integer getBasicPathNum() { return basicPathNum; } public JSONObject getPathTree() { return pathTree; } public String getRootUrl() { return rootUrl; } } ================================================ FILE: src/main/java/model/RecordHashMap.java ================================================ package model; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class RecordHashMap { private final ConcurrentHashMap<String, Integer> countMap; public RecordHashMap() { this.countMap = new ConcurrentHashMap<>(); } public Map<String, Integer> getStringMap() { return this.countMap; } public Integer get(String key) { Integer ret = this.countMap.get(key); if (ret == null) { return 0; } else { return ret; } } public void add(String key) { if (key == null || key.length() <= 0) { throw new IllegalArgumentException("Key 不能为空"); } synchronized (this.getStringMap()) { this.countMap.put(key, (this.get(key) + 1)); } } public void del(String key) { if (this.countMap.get(key) != null) { this.countMap.remove(key); } } } ================================================ FILE: src/main/java/model/RecordPathDirsModel.java ================================================ package model; public class RecordPathDirsModel { private String rootUrl; private String reqPathDirs; // 构造函数 public RecordPathDirsModel(String rootUrl, String reqPathDirs) { this.rootUrl = rootUrl; this.reqPathDirs = reqPathDirs; } public String getRootUrl() { return rootUrl; } public String getReqPathDirs() { return reqPathDirs; } } ================================================ FILE: src/main/java/model/RecordPathModel.java ================================================ package model; import java.nio.charset.StandardCharsets; import java.util.zip.CRC32; public class RecordPathModel { private String reqHash; private String rootUrl; private String reqPathDir; private int respStatusCode; public RecordPathModel(String rootUrl, String reqPathDir, int respStatusCode) { this.rootUrl = rootUrl; this.reqPathDir = reqPathDir; this.respStatusCode = respStatusCode; this.reqHash = getCalcCRC32(); } public RecordPathModel(HttpUrlInfo urlInfo, int respStatusCode) { this.rootUrl = urlInfo.getRootUrlUsual(); this.reqPathDir = urlInfo.getPathToDir(); this.respStatusCode = respStatusCode; this.reqHash = getCalcCRC32(); } private String getCalcCRC32() { return calcCRC32(String.format("%s|%s|%s", this.rootUrl, this.reqPathDir, this.respStatusCode)); } /** * 计算给定字符串的CRC32校验和,并以十六进制字符串形式返回。 * @param string 要计算CRC32的字符串 * @return 字符串的CRC32校验和的十六进制表示 */ private String calcCRC32(String string) { // 使用 UTF-8 编码将字符串转换为字节数组 byte[] inputBytes = string.getBytes(StandardCharsets.UTF_8); // 初始化CRC32对象 CRC32 crc32 = new CRC32(); // 更新CRC值 crc32.update(inputBytes, 0, inputBytes.length); // 将计算后的CRC32值转换为十六进制字符串并返回 return Long.toHexString(crc32.getValue()).toLowerCase(); } public String getReqPathDir() { return reqPathDir; } public int getRespStatusCode() { return respStatusCode; } public String getReqHash() { return reqHash; } public String getRootUrl() { return rootUrl; } } ================================================ FILE: src/main/java/model/ReqMsgDataModel.java ================================================ package model; public class ReqMsgDataModel { private String msgHash; private String reqUrl; private byte[] reqBytes; private byte[] respBytes; public ReqMsgDataModel(String msgHash, String reqUrl, byte[] reqBytes, byte[] respBytes) { this.msgHash = msgHash; this.reqUrl = reqUrl; this.reqBytes = reqBytes; this.respBytes = respBytes; } public String getMsgHash() { return msgHash; } public String getReqUrl() { return reqUrl; } public byte[] getReqBytes() { return reqBytes; } public byte[] getRespBytes() { return respBytes; } } ================================================ FILE: src/main/java/model/ReqUrlRespStatusModel.java ================================================ package model; public class ReqUrlRespStatusModel { private Integer id; private String reqUrl; private String reqMethod; private Integer respStatusCode; private Integer respLength; // 有参构造函数 public ReqUrlRespStatusModel(Integer id, String reqUrl, String reqMethod, Integer respStatusCode, Integer respLength) { this.id = id; this.reqUrl = reqUrl; this.reqMethod = reqMethod; this.respStatusCode = respStatusCode; this.respLength = respLength; } public Integer getId() { return id; } public String getReqUrl() { return reqUrl; } public String getReqMethod() { return reqMethod; } public Integer getRespStatusCode() { return respStatusCode; } public Integer getRespLength() { return respLength; } } ================================================ FILE: src/main/java/model/RespFieldsModel.java ================================================ package model; import com.alibaba.fastjson2.JSON; import utils.CastUtils; import utils.RespHashUtils; import java.util.*; /** * 用于响应信息对比的数据模型 */ public class RespFieldsModel { private Integer statusCode; // 响应状态码,需要忽略 200 的情况 private Integer respLength; // 响应头中的长度 需要忽略小于0的情况 private Integer respBodyLength; // 响应内容大小 private String respTextTitle; // 响应文本标题 private String respHashContent; // 响应内容HASH private String respRedirectUrl; // 响应重定向URL public RespFieldsModel(HttpRespInfo respInfo) { this.statusCode = respInfo.getStatusCode(); this.respLength = respInfo.getRespLength(); this.respBodyLength = respInfo.getBodyLength(); this.respTextTitle = respInfo.getRespTitle(); this.respRedirectUrl = CastUtils.parseRespRedirectUrl(respInfo.getHeaderBytes()); this.respHashContent = RespHashUtils.calcCRC32(respInfo.getBodyBytes()); } public String toJSONString(){ return JSON.toJSONString(getAllFieldsAsMap()); } // 新增方法:获取所有属性的名称和值 public Map<String, Object> getAllFieldsAsMap() { Map<String, Object> fieldMap = new HashMap<>(); fieldMap.put("StatusCode", statusCode); fieldMap.put("RespLength", respLength); fieldMap.put("BodyLength", respBodyLength); fieldMap.put("RespTitle", respTextTitle); fieldMap.put("RespHash", respHashContent); fieldMap.put("RedirectUrl", respRedirectUrl); return fieldMap; } } ================================================ FILE: src/main/java/model/UnVisitedUrlsModel.java ================================================ package model; import utils.CastUtils; import java.util.List; public class UnVisitedUrlsModel { private int id; private String rootUrl; private List<String> unvisitedUrls; public UnVisitedUrlsModel(int id, String rootUrl, String unvisitedUrl) { this.id = id; this.rootUrl = rootUrl; this.unvisitedUrls = CastUtils.toStringList(unvisitedUrl); } public int getId() { return id; } public String getRootUrl() { return rootUrl; } public List<String> getUnvisitedUrls() { return unvisitedUrls; } public void setUnvisitedUrls(List<String> unvisitedUrls) { this.unvisitedUrls = unvisitedUrls; } } ================================================ FILE: src/main/java/sqlUtils/CommonDeleteLine.java ================================================ package sqlUtils; import database.DBService; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.List; import static utils.BurpPrintUtils.stderr_println; import static utils.CastUtils.isEmptyObj; public class CommonDeleteLine { /** * 执行删除数据行的SQL语句 */ private static int runDeleteByStringsSQL(String tableName, List<String> stringList, String deleteSQL) { int totalRowsAffected = 0; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(deleteSQL)) { // 设置SQL语句中的参数值 i+1表示从第一个?号开始设置 for (int i = 0; i < stringList.size(); i++) { stmt.setString(i + 1, stringList.get(i)); } // 执行删除操作 totalRowsAffected = stmt.executeUpdate(); } catch (Exception e) { stderr_println(String.format("[-] runDeleteSql: [%s] -> Error: %s", tableName, e.getMessage())); e.printStackTrace(); } return totalRowsAffected; } //基于 rootUrls 列表 同时删除多行 public static synchronized int deleteLineByRootUrls(String tableName, List<String> rootUrls) { if (isEmptyObj(rootUrls)) return 0; // 构建SQL语句,使用占位符 ? 来代表每个ID String deleteSQL = ("DELETE FROM "+ tableName +" WHERE root_url IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(rootUrls.size())); return runDeleteByStringsSQL(tableName, rootUrls, deleteSQL); } //基于 msgHash 列表 同时删除多个 行 public static synchronized int deleteLineByMsgHashList(String tableName, List<String> msgHashList) { if (isEmptyObj(msgHashList)) return 0; // 构建SQL语句,使用占位符 ? 来代表每个ID String deleteSQL = ("DELETE FROM "+ tableName + " WHERE msg_hash IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(msgHashList.size())); return runDeleteByStringsSQL(tableName, msgHashList, deleteSQL); } /** * 基于 id 列表 同时删除多个 行 */ public static synchronized int deleteLineByIds(String tableName, List<Integer> ids) { int totalRowsAffected = 0; if (ids.isEmpty()) return totalRowsAffected; // 构建SQL语句,使用占位符 ? 来代表每个ID String deleteSQL = ("DELETE FROM "+ tableName + " WHERE id IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(ids.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(deleteSQL)) { // 设置SQL语句中的参数值 i+1表示从第一个?号开始设置 for (int i = 0; i < ids.size(); i++) { stmt.setInt(i + 1, ids.get(i)); } // 执行删除操作 totalRowsAffected = stmt.executeUpdate(); } catch (Exception e) { stderr_println(String.format("[-] Error deleting Data By Ids On Table [%s] -> Error:[%s]", tableName, e.getMessage())); e.printStackTrace(); } return totalRowsAffected; } /** * 基于 多个url前缀 列表 删除行 */ public static synchronized int deleteLineByUrlLikeRootUrls(String tableName, List<String> rootUrlList) { if (isEmptyObj(rootUrlList)) return 0; int totalRowsAffected = 0; String deleteSQL = "DELETE FROM "+ tableName + " WHERE req_url LIKE ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(deleteSQL)) { // 开启批处理 conn.setAutoCommit(false); // 遍历rootUrlList,为每个rootUrl准备并添加到批处理队列 for (String rootUrl : rootUrlList) { stmt.setString(1, rootUrl + "%"); stmt.addBatch(); } // 执行批处理 int[] rowsAffected = stmt.executeBatch(); conn.commit(); // 计算受影响的总行数 for (int row : rowsAffected) { totalRowsAffected += row; } } catch (Exception e) { stderr_println(String.format("[-] Error deleting [%s] Data By Starts With rootUrl List: %s", tableName, e.getMessage())); } return totalRowsAffected; } } ================================================ FILE: src/main/java/sqlUtils/CommonFetchData.java ================================================ package sqlUtils; import database.DBService; import database.ReqDataTable; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import static utils.BurpPrintUtils.*; public class CommonFetchData { /** * 统计数据表行数大小 */ public static synchronized int fetchTableCounts(String tableName) { int count = 0; String selectSQL = "SELECT COUNT(*) FROM "+ tableName +" ;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL); ResultSet rs = stmt.executeQuery()) { if (rs.next()) { count = rs.getInt(1); // 获取第一列的值,即 COUNT(*) 的结果 } } catch (Exception e) { stderr_println(String.format("Error Counts [%s]: %s",tableName, e.getMessage() )); } return count; } /** * 统计所有已经识别完成的URL的数量 * @return */ public static synchronized int fetchTableCountsByStatus(String analyseStatus) { int count = 0; String selectSQL = "SELECT COUNT(*) FROM "+ ReqDataTable.tableName + " WHERE run_status = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)){ stmt.setString(1, analyseStatus); ResultSet rs = stmt.executeQuery(); if (rs.next()) { count = rs.getInt(1); // 获取第一列的值,即 COUNT(*) 的结果 } } catch (Exception e) { stderr_println(String.format("Counts Table [%s] Error: %s", ReqDataTable.tableName, e.getMessage() )); } return count; } /** * 根据运行状态取获取对应 ID list */ public static synchronized List<Integer> fetchIdsByRunStatus(String tableName, String analyseStatus, int limit) { List<Integer> ids = new ArrayList<>(); String selectSQL = "SELECT id FROM " + tableName + " WHERE run_status = ? ORDER BY id ASC LIMIT ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setString(1, analyseStatus); stmt.setInt(2, limit); // Set the limit parameter ResultSet rs = stmt.executeQuery(); while (rs.next()) { int id = rs.getInt("id"); ids.add(id); } } catch (Exception e) { stderr_println(LOG_DEBUG, String.format("[-] Error fetching [%s] ids: %s", tableName, e.getMessage())); } return ids; } /** * 根据运行状态取获取对应请求 msghash list * @return */ public static synchronized List<String> fetchMsgHashByRunStatus(String tableName, String analyseStatus, int limit) { List<String> msgHashList = new ArrayList<>(); String selectSQL = "SELECT msg_hash FROM " + tableName + " WHERE run_status = ? ORDER BY id ASC LIMIT ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setString(1, analyseStatus); stmt.setInt(2, limit); // Set the limit parameter ResultSet rs = stmt.executeQuery(); while (rs.next()) { String msgHash = rs.getString("msg_hash"); msgHashList.add(msgHash); } } catch (Exception e) { stderr_println(LOG_DEBUG, String.format("[-] Error fetching [%s] MsgHash List from Analysis: %s",tableName, e.getMessage())); } return msgHashList; } ///////////////////////////// /** * 获取任意表的任意列的字符串列表 【基于msgHashList】 */ public static synchronized List<String> fetchColumnStrListByMsgHashList(String tableName, String columnName, List<String> msgHashList) { List<String> stringList = new ArrayList<>(); if (msgHashList.isEmpty()) return stringList; String selectSQL = ("SELECT " + columnName + " FROM "+ tableName +" WHERE msg_hash IN $buildInParameterList$;") .replace("$buildInParameterList$", buildSQL.buildInParamList(msgHashList.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { for (int i = 0; i < msgHashList.size(); i++) { stmt.setString(i + 1, msgHashList.get(i)); } try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { stringList.add(rs.getString(columnName)); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] fetchColumnStrListByMsgHashList: [%s] [%s] -> Error: %s",tableName, columnName, e.getMessage())); } return stringList; } ///////////////////////////// /** * 获取任意表的任意列的字符串拼接 【获取所有行】 */ public static synchronized String fetchColumnGroupConcatString(String tableName, String columnName) { String concatenatedURLs = null; String concatSQL = ("SELECT GROUP_CONCAT($columnName$,',') AS concatenated_urls FROM "+ tableName +";") .replace("$columnName$",columnName); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(concatSQL)) { ResultSet rs = stmt.executeQuery(); if (rs.next()) { concatenatedURLs = rs.getString("concatenated_urls"); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetching [%s] concatenating [%s]: %s",tableName, columnName, e.getMessage())); e.printStackTrace(); } return concatenatedURLs; } /** * 获取任意表的任意列的字符串拼接 InRootUrls */ public static synchronized String fetchColumnGroupConcatStringInRootUrls(String tableName, String columnName, List<String> rootUrls) { String concatenatedURLs = null; String concatSQL = ("SELECT GROUP_CONCAT($columnName$,',') AS concatenated_urls FROM "+ tableName + " WHERE root_url IN $buildInParameterList$;") .replace("$columnName$",columnName) .replace("$buildInParameterList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(concatSQL)) { for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 1, rootUrls.get(i)); } ResultSet rs = stmt.executeQuery(); if (rs.next()) { concatenatedURLs = rs.getString("concatenated_urls"); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] [%s] Column Group Concat String In RootUrls concatenating: %s",tableName, columnName, e.getMessage())); e.printStackTrace(); } return concatenatedURLs; } /** * 获取任意表的任意列的字符串拼接 NotInRootUrls */ public static synchronized String fetchColumnGroupConcatStringNotInRootUrls(String tableName, String columnName, List<String> rootUrls) { String concatenatedURLs = null; String concatSQL = ("SELECT GROUP_CONCAT($columnName$,',') AS concatenated_urls FROM "+ tableName + " WHERE root_url NOT IN $buildInParameterList$;") .replace("$columnName$",columnName) .replace("$buildInParameterList$", buildSQL.buildInParamList(rootUrls.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(concatSQL)) { for (int i = 0; i < rootUrls.size(); i++) { stmt.setString(i + 1, rootUrls.get(i)); } ResultSet rs = stmt.executeQuery(); if (rs.next()) { concatenatedURLs = rs.getString("concatenated_urls"); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch [%s] [%s] Column Group Concat String Not In RootUrls concatenating: %s",tableName, columnName, e.getMessage())); e.printStackTrace(); } return concatenatedURLs; } } ================================================ FILE: src/main/java/sqlUtils/CommonUpdateStatus.java ================================================ package sqlUtils; import database.DBService; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.List; import static utils.BurpPrintUtils.*; public class CommonUpdateStatus { /** * 更新多个 ID列表 的状态 */ public static synchronized int updateStatusByIds(String tableName, List<Integer> ids, String updateStatus) { int updatedCount = -1; String updateSQL = ("UPDATE " + tableName + " SET run_status = ? WHERE id IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(ids.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmtUpdate = conn.prepareStatement(updateSQL)) { stmtUpdate.setString(1, updateStatus); for (int i = 0; i < ids.size(); i++) { stmtUpdate.setInt(i + 2, ids.get(i)); } updatedCount = stmtUpdate.executeUpdate(); if (updatedCount != ids.size()) { stderr_println(LOG_DEBUG, "[!] Number of updated rows does not match number of selected rows."); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error updating [%s] Data Status: %s", tableName, e.getMessage())); } return updatedCount; } /** * 更新多个 msgHash 的状态 */ public static synchronized int updateStatusByMsgHashList(String tableName, List<String> msgHashList, String updateStatus) { int updatedCount = -1; String updateSQL = ("UPDATE " + tableName + " SET run_status = ? WHERE msg_hash IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(msgHashList.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmtUpdate = conn.prepareStatement(updateSQL)) { stmtUpdate.setString(1, updateStatus); for (int i = 0; i < msgHashList.size(); i++) { stmtUpdate.setString(i + 2, msgHashList.get(i)); } updatedCount = stmtUpdate.executeUpdate(); if (updatedCount != msgHashList.size()) { stderr_println(LOG_DEBUG, "[!] Number of updated rows does not match number of selected rows."); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error updating [%s] Data Status: %s",tableName, e.getMessage())); } return updatedCount; } /** * 基于 msgDataIndexList 更新 状态 */ public static synchronized int updateStatusByMsgDataIndexList(String tableName, List<Integer> msgDataIndexList, String updateStatus) { int updatedCount = -1; String updateSQL = ("UPDATE " + tableName + " SET run_status = ? WHERE msg_data_index IN $buildInParamList$;") .replace("$buildInParamList$", buildSQL.buildInParamList(msgDataIndexList.size())); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmtUpdate = conn.prepareStatement(updateSQL)) { stmtUpdate.setString(1, updateStatus); for (int i = 0; i < msgDataIndexList.size(); i++) { stmtUpdate.setInt(i + 2, msgDataIndexList.get(i)); } updatedCount = stmtUpdate.executeUpdate(); if (updatedCount != msgDataIndexList.size()) { stderr_println(LOG_DEBUG, "[!] Number of updated rows does not match number of selected rows."); } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error updating Req Data Status: %s", e.getMessage())); } return updatedCount; } /** * 当达到某个状态条件时 更新 msgHash 对应数据 的状态 */ public static synchronized int updateStatusWhenStatusByMsgHash(String tableName, String msgHash, String updateStatus, String whenStatus) { int updatedCount = -1; String updateSQL = "UPDATE " + tableName + " SET run_status = ? WHERE run_status = ? and msg_hash = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmtUpdate = conn.prepareStatement(updateSQL)) { stmtUpdate.setString(1, updateStatus); stmtUpdate.setString(2, whenStatus); stmtUpdate.setString(3, msgHash); updatedCount = stmtUpdate.executeUpdate(); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] updateStatusWhenStatusByMsgHash: [%s] Error->: %s",tableName, e.getMessage())); } return updatedCount; } /** * 当达到某个状态条件时 更新 root_url 对应数据 的状态 */ public static synchronized int updateStatusWhenStatusByRootUrl(String tableName, String rootUrl, String updateStatus, String whenStatus) { int updatedCount = -1; String updateSQL = "UPDATE " + tableName + " SET run_status = ? WHERE run_status = ? and root_url = ?;"; try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmtUpdate = conn.prepareStatement(updateSQL)) { stmtUpdate.setString(1, updateStatus); stmtUpdate.setString(2, whenStatus); stmtUpdate.setString(3, rootUrl); updatedCount = stmtUpdate.executeUpdate(); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] updateStatusWhenStatusByRootUrl: [%s] Error->: %s",tableName, e.getMessage())); } return updatedCount; } } ================================================ FILE: src/main/java/sqlUtils/Constants.java ================================================ package sqlUtils; public class Constants { public static final String ANALYSE_WAIT = "Waiting"; //等待自动处理 public static final String ANALYSE_ING = "Analysing"; //自动处理中 public static final String ANALYSE_END = "Analysed"; //自动处理完毕 public static final String HANDLE_WAIT = "Pending"; //等待手动处理 public static final String HANDLE_ING = "Handling"; //手动处理中 public static final String HANDLE_END = "Handled"; //手动处理完毕 public static final String SPLIT_SYMBOL = "<->"; public static final String RULE_CONF_PREFIX = "CONF_"; //配置文件中 配置规则的开头 } ================================================ FILE: src/main/java/sqlUtils/UnionTableSql.java ================================================ package sqlUtils; import database.AnalyseHostResultTable; import database.DBService; import database.PathTreeTable; import model.FindPathModel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import static utils.BurpPrintUtils.*; public class UnionTableSql { //联合 获取一条需要更新的Path数据 public static synchronized List<FindPathModel> fetchHostTableNeedUpdatePathDataList(int limit){ List<FindPathModel> findPathModels = new ArrayList<>(); // 首先选取一条记录的ID 状态是已经分析完毕,并且 当前 PathTree 的 基本路径数量 大于 生成分析数据时的 基本路径数量 String selectSQL = ("SELECT A.id, A.root_url, A.find_path " + "From $tableName1$ A LEFT JOIN $tableName2$ B ON A.root_url = B.root_url " + "WHERE B.basic_path_num > A.basic_path_num Limit ?;") .replace("$tableName1$", AnalyseHostResultTable.tableName) .replace("$tableName2$", PathTreeTable.tableName); try (Connection conn = DBService.getInstance().getNewConn(); PreparedStatement stmt = conn.prepareStatement(selectSQL)) { stmt.setInt(1, limit); try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { FindPathModel findPathModel = new FindPathModel( rs.getInt("id"), rs.getString("root_url"), rs.getString("find_path") ); findPathModels.add(findPathModel); } } } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[-] Error fetch Need Update Path Data List: %s", e.getMessage())); } return findPathModels; } } ================================================ FILE: src/main/java/sqlUtils/buildSQL.java ================================================ package sqlUtils; public class buildSQL { /** * 构建一个函数,实现根据参数列表数量自动拼接 IN (?,?,?)语句 * @param size * @return */ public static String buildInParamList(int size) { StringBuilder inParameterList = new StringBuilder(" ("); for (int i = 0; i < size; i++) { inParameterList.append("?"); if (i < size - 1) { inParameterList.append(", "); } } inParameterList.append(") "); return inParameterList.toString(); } } ================================================ FILE: src/main/java/ui/BasicHostConfigPanel.java ================================================ package ui; import burp.BurpExtender; import burp.IProxyScanner; import utils.UiUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import static utils.BurpPrintUtils.*; public class BasicHostConfigPanel extends JPanel { public static JLabel lbRequestCountOnHost; //记录所有加入到URL的请求 public static JLabel lbTaskerCountOnHost; //记录所有加入数据库的请求 public static JLabel lbAnalysisEndCountOnHost; //记录所有已经分析完成的结果数量 private static JComboBox<String> choicesComboBoxOnHost; //数据表显示快速选择框 private static JTextField urlSearchBoxOnHost; //URl搜索框 public static JToggleButton autoRefreshUiButtonOnHost; //自动刷新开关按钮状态 public static int timerDelayOnHost = 15; //定时器刷新间隔,单位秒 //用于两端联动使用 public static JToggleButton proxyListenButtonOnHost; public static JToggleButton autoRecordPathButtonOnHost; //自动保存响应状态码合适的URL 目前过滤功能不完善,只能手动开启 public static JToggleButton dynamicPathFilterButtonOnHost; public static JToggleButton autoPathsToUrlsButtonOnHost; public static JToggleButton autoRefreshUnvisitedButtonOnHost; public static JToggleButton autoRecursiveButtonOnHost; public static JToggleButton forceDecodeUnicodeButtonOnHost; public BasicHostConfigPanel() { GridBagLayout gridBagLayout = new GridBagLayout(); //GridBagLayout 允许以网格形式布局容器中的组件,同时为每个组件提供独立的定位和大小控制,非常适用于需要复杂布局设计的GUI界面。 // 列数,行数 //表示容器被划分为两列,每一列的初始宽度均为0。 // 这里的0不代表实际宽度为零,而是告诉布局管理器根据组件的实际大小和其他约束(如权重)来计算列宽。 gridBagLayout.columnWidths = new int[] { 0, 0}; gridBagLayout.rowHeights = new int[] {5}; // 各列占宽度比,各行占高度比 gridBagLayout.columnWeights = new double[] { 1.0D, Double.MIN_VALUE }; //设置了两列的扩展权重。第一列的权重为1.0,意味着当容器有多余空间时,这一列会优先扩展以填充可用空间。 // 第二列的权重设为Double.MIN_VALUE,表示这一列不应该扩展,保持最小或固定大小。 setLayout(gridBagLayout); //创建FilterPanel JPanel FilterPanel = new JPanel(); GridBagConstraints gbc_panel_1 = new GridBagConstraints(); gbc_panel_1.insets = new Insets(0, 5, 5, 5); gbc_panel_1.fill = 2; gbc_panel_1.gridx = 0; gbc_panel_1.gridy = 2; add(FilterPanel, gbc_panel_1); //设置一个名为FilterPanel的面板在父容器中的布局位置 // 布局约束包括: //insets: 设置了组件边缘的内边距,上5px,左5px,下5px,右5px,为组件提供一定的间距。 //fill: 设置组件在可扩展空间中的填充方式,值为2表示BOTH,即组件可以在水平和垂直方向上填充其显示区域。 //gridx 和 gridy: 分别设置组件在网格布局中的起始列和起始行,这里是第0列第2行。 //为 FilterPanel 设置布局 GridBagLayout gbl_panel_1 = new GridBagLayout(); gbl_panel_1.columnWidths = new int[] { 0, 0, 0, 0, 0 };//设置每列的初始宽度为0 指示布局管理器根据组件实际大小和其他约束来计算宽度。 gbl_panel_1.rowHeights = new int[] { 0, 0 }; //设置每行的初始高度为0,指按需计算行高。 // 指定每列的扩展权重。这里前9列的权重都设为0.0,意味着这些列不会随容器大小变化而扩展, // 而最后列的权重设为Double.MIN_VALUE,这通常用于指示该列应该尽可能小,不参与额外空间的分配。 //gbl_panel_1.columnWeights = new double[] { 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, Double.MIN_VALUE}; //第一行权重为0.0,不随容器扩展,第二行的权重为Double.MIN_VALUE,表示该行也不扩展。 gbl_panel_1.rowWeights = new double[] { 0.0D, Double.MIN_VALUE }; FilterPanel.setLayout(gbl_panel_1); // 在添加 "Requests Total" 和 lbRequestCount 之前添加一个占位组件 Component leftStrut = Box.createHorizontalStrut(5); // 你可以根据需要调整这个值 GridBagConstraints gbc_leftStrut = new GridBagConstraints(); gbc_leftStrut.insets = new Insets(0, 0, 0, 5); gbc_leftStrut.fill = GridBagConstraints.HORIZONTAL; gbc_leftStrut.weightx = 1.0; // 这个值决定了 leftStrut 占据的空间大小 gbc_leftStrut.gridx = 6; gbc_leftStrut.gridy = 0; FilterPanel.add(leftStrut, gbc_leftStrut); // 转发url总数,默认0 JLabel lbRequest = new JLabel("Requests Total:"); GridBagConstraints gbc_lbRequest = new GridBagConstraints(); gbc_lbRequest.insets = new Insets(0, 0, 0, 5); gbc_lbRequest.fill = GridBagConstraints.HORIZONTAL; gbc_lbRequest.weightx = 0.0; gbc_lbRequest.gridx = 0; gbc_lbRequest.gridy = 0; FilterPanel.add(lbRequest, gbc_lbRequest); lbRequestCountOnHost = new JLabel("0"); lbRequestCountOnHost.setForeground(new Color(0,0,255)); GridBagConstraints gbc_lbRequestCount = new GridBagConstraints(); gbc_lbRequestCount.insets = new Insets(0, 0, 0, 5); gbc_lbRequestCount.fill = GridBagConstraints.HORIZONTAL; gbc_lbRequestCount.weightx = 0.0; gbc_lbRequestCount.gridx = 1; gbc_lbRequestCount.gridy = 0; FilterPanel.add(lbRequestCountOnHost, gbc_lbRequestCount); // 转发成功url数,默认0 JLabel lbTasker = new JLabel("Tasker Total:"); GridBagConstraints gbc_lbTasker = new GridBagConstraints(); gbc_lbTasker.insets = new Insets(0, 0, 0, 5); gbc_lbTasker.fill = 0; gbc_lbTasker.gridx = 2; gbc_lbTasker.gridy = 0; FilterPanel.add(lbTasker, gbc_lbTasker); lbTaskerCountOnHost = new JLabel("0"); lbTaskerCountOnHost.setForeground(new Color(0, 255, 0)); GridBagConstraints gbc_lbTaskerCount = new GridBagConstraints(); gbc_lbTaskerCount.insets = new Insets(0, 0, 0, 5); gbc_lbTaskerCount.fill = 0; gbc_lbTaskerCount.gridx = 3; gbc_lbTaskerCount.gridy = 0; FilterPanel.add(lbTaskerCountOnHost, gbc_lbTaskerCount); // 分析URL的数量 JLabel lbAnalysisEnd = new JLabel("Analysis End:"); GridBagConstraints gbc_lbAnalysisEnd = new GridBagConstraints(); gbc_lbAnalysisEnd.insets = new Insets(0, 0, 0, 5); gbc_lbAnalysisEnd.fill = 0; gbc_lbAnalysisEnd.gridx = 4; gbc_lbAnalysisEnd.gridy = 0; FilterPanel.add(lbAnalysisEnd, gbc_lbAnalysisEnd); lbAnalysisEndCountOnHost = new JLabel("0"); lbAnalysisEndCountOnHost.setForeground(new Color(0, 0, 255)); // 蓝色 GridBagConstraints gbc_lbAnalysisEndCount = new GridBagConstraints(); gbc_lbAnalysisEndCount.insets = new Insets(0, 0, 0, 5); gbc_lbAnalysisEndCount.fill = 0; gbc_lbAnalysisEndCount.gridx = 5; gbc_lbAnalysisEndCount.gridy = 0; FilterPanel.add(lbAnalysisEndCountOnHost, gbc_lbAnalysisEndCount); // 添加填充以在左侧占位 Component horizontalBlank = Box.createHorizontalGlue(); //创建一个水平组件 GridBagConstraints gbc_leftFiller = new GridBagConstraints(); gbc_leftFiller.weightx = 1; // 使得这个组件吸收额外的水平空间 gbc_leftFiller.gridx = 6; // 位置设置为第一个单元格 gbc_leftFiller.gridy = 0; // 第一行 gbc_leftFiller.fill = GridBagConstraints.HORIZONTAL; // 水平填充 FilterPanel.add(horizontalBlank, gbc_leftFiller); // 开关 是否开启代理流量监听 //自动保存响应状态码合适的URL 目前过滤功能不完善,只能手动开启 proxyListenButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.proxyListenIsOpenDefault); proxyListenButtonOnHost.setToolTipText("Proxy模块流量监听开关"); proxyListenButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = proxyListenButtonOnHost.isSelected(); IProxyScanner.proxyListenIsOpen = BurpExtender.proxyListenIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("proxyListenIsOpen: %s", IProxyScanner.proxyListenIsOpen)); BasicUrlConfigPanel.proxyListenButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); // 刷新按钮按钮 JToggleButton clickRefreshButtonOnHost = new JToggleButton(UiUtils.getImageIcon("/icon/refreshButton2.png", 24, 24)); clickRefreshButtonOnHost.setPreferredSize(new Dimension(30, 30)); clickRefreshButtonOnHost.setBorder(null); // 设置无边框 clickRefreshButtonOnHost.setFocusPainted(false); // 移除焦点边框 clickRefreshButtonOnHost.setContentAreaFilled(false); // 移除选中状态下的背景填充 clickRefreshButtonOnHost.setToolTipText("点击强制刷新表格"); // 手动刷新按钮监听事件 clickRefreshButtonOnHost.addActionListener(new ActionListener() { private boolean canClick = true; @Override public void actionPerformed(ActionEvent e) { if (canClick) { canClick = false; ImageIcon originalIcon = (ImageIcon) clickRefreshButtonOnHost.getIcon(); // 保存原始图标 String originalTip = clickRefreshButtonOnHost.getToolTipText(); // 保存原始批注 // 更换为新图标 clickRefreshButtonOnHost.setIcon(UiUtils.getImageIcon("/icon/runningButton.png", 24, 24)); // 立即显示新图标 try{ // 调用更新未访问URL列的数据 BasicHostInfoPanel.getInstance().updateUnVisitedUrlsByRootUrls(null); // 调用刷新表格的方法 BasicHostInfoPanel.getInstance().refreshBasicHostTableModel(); //建议JVM清理内存 System.gc(); } catch (Exception ep){ stderr_println(LOG_ERROR, String.format("[!] 刷新表格发生错误:%s", ep.getMessage()) ); } // 设置定时器,5秒后允许再次点击并恢复图标 Timer timer = new Timer(3000, new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { canClick = true; clickRefreshButtonOnHost.setIcon(originalIcon); // 恢复原始图标 clickRefreshButtonOnHost.setToolTipText(originalTip); // 恢复原始批注 } }); timer.setRepeats(false); timer.start(); } } }); // 开关 是否开启自动记录PATH autoRecordPathButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRecordPathIsOpenDefault); autoRecordPathButtonOnHost.setToolTipText("自动保存有效请求PATH"); autoRecordPathButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRecordPathButtonOnHost.isSelected(); IProxyScanner.autoRecordPathIsOpen = BurpExtender.autoRecordPathIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRecordPathIsOpen: %s", IProxyScanner.autoRecordPathIsOpen)); BasicUrlConfigPanel.autoRecordPathButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); // 开关 是否开启复杂的动态PATH过滤 dynamicPathFilterButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.dynamicPathFilterIsOpenDefault); dynamicPathFilterButtonOnHost.setToolTipText("开启智能响应过滤(访问随机URL获取目标的404页面的条件)"); dynamicPathFilterButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = dynamicPathFilterButtonOnHost.isSelected(); IProxyScanner.dynamicPathFilterIsOpen = BurpExtender.dynamicPathFilterIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("dynamicPathFilterIsOpen: %s", IProxyScanner.dynamicPathFilterIsOpen)); BasicUrlConfigPanel.dynamicPathFilterButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); autoPathsToUrlsButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoPathsToUrlsIsOpenDefault); autoPathsToUrlsButtonOnHost.setToolTipText("自动基于PathTree结合FindPath生成URL"); autoPathsToUrlsButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoPathsToUrlsButtonOnHost.isSelected(); IProxyScanner.autoPathsToUrlsIsOpen = BurpExtender.autoPathsToUrlsIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoPathsToUrlsIsOpen: %s", IProxyScanner.autoPathsToUrlsIsOpen)); BasicUrlConfigPanel.autoPathsToUrlsButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); // 开关 是否开启自动刷新未访问URL autoRefreshUnvisitedButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRefreshUnvisitedIsOpenDefault); autoRefreshUnvisitedButtonOnHost.setToolTipText("自动刷新未访问URL"); autoRefreshUnvisitedButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRefreshUnvisitedButtonOnHost.isSelected(); //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 IProxyScanner.autoRefreshUnvisitedIsOpen = BurpExtender.autoRefreshUnvisitedIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRefreshUnvisitedIsOpen: %s", IProxyScanner.autoRefreshUnvisitedIsOpen)); BasicUrlConfigPanel.autoRefreshUnvisitedButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); // 开关 是否开启对提取URL进行发起请求 autoRecursiveButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRecursiveIsOpenDefault); autoRecursiveButtonOnHost.setToolTipText("自动测试未访问URL"); autoRecursiveButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRecursiveButtonOnHost.isSelected(); IProxyScanner.autoRecursiveIsOpen = BurpExtender.autoRecursiveIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRecursiveIsOpen: %s", IProxyScanner.autoRecursiveIsOpen)); BasicUrlConfigPanel.autoRecursiveButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); //刷新按钮 autoRefreshUiButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRefreshUiIsOpenDefault); autoRefreshUiButtonOnHost.setToolTipText(String.format("每[%s]秒刷新表格", timerDelayOnHost)); // 自动刷新按钮监听事件 autoRefreshUiButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRefreshUiButtonOnHost.isSelected(); IProxyScanner.autoRefreshUiIsOpen = BurpExtender.autoRefreshUiIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRefreshUiIsOpen: %s", IProxyScanner.autoRefreshUiIsOpen)); BasicUrlConfigPanel.autoRefreshUiButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 //根据当前刷新开关状态配置定时器暂停或者重启 UiUtils.setAutoRefreshUiByButton(IProxyScanner.autoRefreshUiIsOpen); } }); // 开关 是否开启对提取URL进行发起请求 forceDecodeUnicodeButtonOnHost = UiUtils.getToggleButtonByDefaultValue(BurpExtender.forceDecodeUnicodeDefault); forceDecodeUnicodeButtonOnHost.setToolTipText("强制解码响应Unicode 默认只对Json响应解码"); forceDecodeUnicodeButtonOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = forceDecodeUnicodeButtonOnHost.isSelected(); IProxyScanner.forceDecodeUnicode = BurpExtender.forceDecodeUnicodeDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("forceDecodeUnicode: %s", IProxyScanner.forceDecodeUnicode)); BasicUrlConfigPanel.forceDecodeUnicodeButtonOnUrl.setSelected(selected); //联动更新URL面板的情况 } }); // 设置按钮的 GridBagConstraints GridBagConstraints gbc_buttons = new GridBagConstraints(); gbc_buttons.insets = new Insets(0, 5, 0, 5); gbc_buttons.gridy = 0; // 设置按钮的纵坐标位置 gbc_buttons.fill = GridBagConstraints.NONE; // 不填充 // 点击按钮 点击后刷新数据 含未访问数据 gbc_buttons.gridx = 7; // 设置按钮的横坐标位置 FilterPanel.add(proxyListenButtonOnHost, gbc_buttons); gbc_buttons.gridx = 8; // 设置按钮的横坐标位置 FilterPanel.add(forceDecodeUnicodeButtonOnHost, gbc_buttons); // 自动记录有效的PATH到path表中 功能开关 gbc_buttons.gridx = 9; // 设置按钮的横坐标位置 FilterPanel.add(autoRecordPathButtonOnHost, gbc_buttons); // 高级动态有效路径过滤 功能开关 gbc_buttons.gridx = 10; FilterPanel.add(dynamicPathFilterButtonOnHost, gbc_buttons); // 高级动态有效路径过滤 功能开关 gbc_buttons.gridx = 11; FilterPanel.add(autoPathsToUrlsButtonOnHost, gbc_buttons); // 自动刷新 未访问URL列表 gbc_buttons.gridx = 12; // 设置按钮的横坐标位置 FilterPanel.add(autoRefreshUnvisitedButtonOnHost, gbc_buttons); // 自动递归 开关 gbc_buttons.gridx = 13; // 设置按钮的横坐标位置 FilterPanel.add(autoRecursiveButtonOnHost, gbc_buttons); // 定时刷新按钮 gbc_buttons.gridx = 14; // 将横坐标位置移动到下一个单元格 FilterPanel.add(autoRefreshUiButtonOnHost, gbc_buttons); // 点击按钮 点击后刷新数据 含未访问数据 gbc_buttons.gridx = 15; // 设置按钮的横坐标位置 FilterPanel.add(clickRefreshButtonOnHost, gbc_buttons); // 添加填充以在右侧占位 GridBagConstraints gbc_rightFiller = new GridBagConstraints(); gbc_rightFiller.weightx = 1; // 使得这个组件吸收额外的水平空间 gbc_rightFiller.gridx = 16; // 位置设置为最后一个单元格 gbc_rightFiller.gridy = 0; // 第一行 gbc_rightFiller.fill = GridBagConstraints.HORIZONTAL; // 水平填充 FilterPanel.add(horizontalBlank, gbc_rightFiller); // 全部按钮 choicesComboBoxOnHost = new JComboBox<>(new String[]{ "显示有效内容", "待处理有效内容", "显示敏感内容", "待处理敏感内容", "显示未访问路径", "显示全部内容", "显示无效内容", }); GridBagConstraints gbc_btnall = new GridBagConstraints(); gbc_btnall.insets = new Insets(0, 0, 0, 5); gbc_btnall.fill = 0; gbc_btnall.gridx = 17; // 根据该值来确定是确定从左到右的顺序 gbc_btnall.gridy = 0; FilterPanel.add(choicesComboBoxOnHost, gbc_btnall); // 检索框 urlSearchBoxOnHost = new JTextField(15); GridBagConstraints gbc_btnSearchField = new GridBagConstraints(); gbc_btnSearchField.insets = new Insets(0, 0, 0, 5); gbc_btnSearchField.fill = 0; gbc_btnSearchField.gridx = 18; // 根据该值来确定是确定从左到右的顺序 gbc_btnSearchField.gridy = 0; urlSearchBoxOnHost.setToolTipText("搜索URL关键字"); FilterPanel.add(urlSearchBoxOnHost, gbc_btnSearchField); // 检索按钮 JButton searchButton = new JButton(); searchButton.setIcon(UiUtils.getImageIcon("/icon/searchButton.png")); searchButton.setToolTipText("点击搜索"); GridBagConstraints gbc_btnSearch = new GridBagConstraints(); gbc_btnSearch.insets = new Insets(0, 0, 0, 5); gbc_btnSearch.fill = 0; gbc_btnSearch.gridx = 19; // 根据该值来确定是确定从左到右的顺序 gbc_btnSearch.gridy = 0; FilterPanel.add(searchButton, gbc_btnSearch); // 功能按钮 JButton moreButton = new JButton(); moreButton.setToolTipText("更多功能 "); moreButton.setIcon(UiUtils.getImageIcon("/icon/moreButton.png", 17, 17)); GridBagConstraints gbc_btnMore = new GridBagConstraints(); gbc_btnMore.insets = new Insets(0, 0, 0, 5); gbc_btnMore.fill = 0; gbc_btnMore.gridx = 20; // 根据该值来确定是确定从左到右的顺序 gbc_btnMore.gridy = 0; FilterPanel.add(moreButton, gbc_btnMore); // 快速选择框的监听事件 choicesComboBoxOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try{ // 触发显示所有行事件 String searchText = urlSearchBoxOnHost.getText(); if(searchText.isEmpty()){ searchText = ""; } String selectedOption = (String) choicesComboBoxOnHost.getSelectedItem(); BasicHostInfoPanel.showDataHostTableByFilter(selectedOption, searchText); } catch (Exception ex) { stderr_println(String.format("[!] choicesComboBoxOnHost: %s", ex.getMessage())); } } }); // 检索按钮事件监听器 searchButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String searchText = urlSearchBoxOnHost.getText(); String selectedOption = (String) BasicHostConfigPanel.choicesComboBoxOnHost.getSelectedItem(); BasicHostInfoPanel.showDataHostTableByFilter(selectedOption, searchText); } }); //搜索框的回车事件 urlSearchBoxOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String searchText = urlSearchBoxOnHost.getText(); String selectedOption = (String) BasicHostConfigPanel.choicesComboBoxOnHost.getSelectedItem(); BasicHostInfoPanel.showDataHostTableByFilter(selectedOption, searchText); } }); // 功能按钮 弹出选项 JPopupMenu moreMenu = UiUtils.createMoreMenuWithAction(); // 点击”功能“的监听事件 moreButton.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { moreMenu.show(e.getComponent(), e.getX(), e.getY()); } }); } public static String getUrlSearchBoxTextOnHost() { return urlSearchBoxOnHost.getText(); } public static void setUrlSearchBoxTextOnHost(String string) { urlSearchBoxOnHost.setText(string); } public static String getComboBoxSelectedOptionOnHost() { return (String) BasicHostConfigPanel.choicesComboBoxOnHost.getSelectedItem(); } } ================================================ FILE: src/main/java/ui/BasicHostInfoPanel.java ================================================ package ui; import burp.*; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONWriter; import database.*; import model.*; import sqlUtils.CommonDeleteLine; import sqlUtils.CommonFetchData; import sqlUtils.CommonUpdateStatus; import sqlUtils.Constants; import ui.MainTabRender.RunStatusCellRenderer; import ui.MainTabRender.TableHeaderWithTips; import ui.MainTabRender.HasImportantCellRenderer; import utils.CastUtils; import utils.PathTreeUtils; import utils.RespHashUtils; import utils.UiUtils; import javax.swing.Timer; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.*; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isEmptyObj; import static utils.CastUtils.isNotEmptyObj; public class BasicHostInfoPanel extends JPanel { private static volatile BasicHostInfoPanel instance; //实现单例模式 private static JTable basicHostMsgTableUI; //表格UI private static DefaultTableModel basicHostMsgTableModel; // 存储表格数据 private static JEditorPane basicHostFindInfoTextPane; //显示 响应中直接提取的敏感信息【支持颜色】 private static ITextEditor basicHostRespFindUrlTEditor; //显示 响应中直接提取的URL private static ITextEditor basicHostRespFindPathTEditor; //显示 响应中直接提取的PATH private static ITextEditor basicHostDirectPath2UrlTEditor; //显示 基于PATH直接拼接计算出的URL private static ITextEditor basicHostSmartPath2UrlTEditor; //显示 基于树算法+PATH提取结果计算出的URL private static ITextEditor basicHostUnvisitedUrlTEditor; //显示 目前提取URL结果中未访问过的URL private static JEditorPane basicHostAllUrlStatusTEditor; //显示 所有当前RootUrls的URL访问记录 private static ITextEditor basicHostPathTreeTEditor; //当前目标的路径树信息 private static Timer basicHostTimer; //定时器 为线程调度提供了一个简单的时间触发机制,广泛应用于需要定时执行某些操作的场景, public static BasicHostInfoPanel getInstance() { if (instance == null) { synchronized (BasicHostInfoPanel.class) { if (instance == null) { instance = new BasicHostInfoPanel(); } } } return instance; } public BasicHostInfoPanel() { // EmptyBorder 四周各有了5像素的空白边距 setBorder(new EmptyBorder(5, 5, 5, 5)); ////BorderLayout 将容器分为五个区域:北 南 东 西 中 每个区域可以放置一个组件, setLayout(new BorderLayout(0, 0)); // 主分隔面板 // JSplitPane可以包含两个(或更多)子组件,允许用户通过拖动分隔条来改变两个子组件的相对大小。 JSplitPane basicHostMainSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); // 首行配置面板 BasicHostConfigPanel basicHostConfigPanel = new BasicHostConfigPanel(); // 数据表格 initBasicHostDataTableUI(); //将包含table的滚动面板的upScrollPane 设置为另一个组件mainSplitPane的上半部分。 basicHostMainSplitPane.setTopComponent(new JScrollPane(basicHostMsgTableUI)); //获取下方的消息面板 JTabbedPane basicHostMsgTabs = getBasicHostMsgTabs(); basicHostMainSplitPane.setBottomComponent(basicHostMsgTabs); //组合最终的内容面板 add(basicHostConfigPanel, BorderLayout.NORTH); add(basicHostMainSplitPane, BorderLayout.CENTER); //初始化表格数据 initBasicHostDataTableUIData(basicHostMsgTableModel); // 初始化定时刷新页面函数 单位是毫秒 stopTimerBasicHost(); startTimerBasicHost(); } /** * 查询 TableLineDataModelBasicHostSQL 初始化 table 数据 */ private void initBasicHostDataTableUIData(DefaultTableModel tableModel) { SwingUtilities.invokeLater(new Runnable() { public void run() { //获取所有数据 查询 HOST信息表 ArrayList<BasicHostTableLineDataModel> allReqAnalyseData = TableLineDataModelBasicHostSQL.fetchHostTableLineAll(); //将数据赋值给表模型 basicHostPopulateModelFromList(tableModel, allReqAnalyseData); } }); } /** * 把 jsonArray 赋值到 model 中 * @param model * @param arrayList */ private void basicHostPopulateModelFromList(DefaultTableModel model, ArrayList<BasicHostTableLineDataModel> arrayList) { if (isEmptyObj(arrayList)) return; Iterator<BasicHostTableLineDataModel> iterator = arrayList.iterator(); while (iterator.hasNext()) { BasicHostTableLineDataModel apiDataModel = iterator.next(); Object[] rowData = apiDataModel.toRowDataArray(); model.addRow(rowData); } //刷新表数据模型 model.fireTableDataChanged(); } /** * 初始化Table */ private void initBasicHostDataTableUI() { // 数据展示面板 basicHostMsgTableModel = new DefaultTableModel(new Object[]{ "id", "root_url", "host", "domain", "important", "find_info", "find_url", "find_path", "find_api", "path_url", "unvisited", "all_url", "basic_num", "run_status" }, 0) { @Override public boolean isCellEditable(int row, int column) { //在数据模型层面禁止编辑行数据 return false; } }; basicHostMsgTableUI = UiUtils.creatTableUiWithTips(basicHostMsgTableModel); // 设置列选中模式 int listSelectionModel = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION; basicHostMsgTableUI.setSelectionMode(listSelectionModel); //自己实现TableHeader 支持请求头提示 String[] basicHostColHeaderTooltips = new String[]{ "【请求ID】", "【请求目标】", "【HOST信息】", "【根域名信息】", "【是否重要信息】", "【敏感信息数量】 == 当前网站响应中的敏感信息", "【直接URL数量】 == 当前网站响应中提取的URL", "【网站PATH数量】 == 当前网站响应中提取的PATH", "【拼接URL数量】 == 当前请求目录 直接组合 已提取PATH(已过滤)", "【动态URL数量】 == 网站有效目录 智能组合 已提取PATH(已过滤|只能计算带目录的PATH|跟随网站有效目录新增而变动)", "【未访问URL数量】 == 当前直接URL数量+拼接URL数量+动态URL数量-全局已访问URL", "【所有提取URL数量】 == 当前直接URL+PATH直接组合URL+PATH动态组合URL", "【动态URL计算基准】(表明动态URL基于多少个网站路径计算|跟随网站有效目录新增而变动)", "【请求上下文分析状态】(不为 Waiting 表示已提取[敏感信息|URL信息|PATH信息])" }; TableHeaderWithTips basicHostTableHeader = new TableHeaderWithTips(basicHostMsgTableUI.getColumnModel(), basicHostColHeaderTooltips); basicHostMsgTableUI.setTableHeader(basicHostTableHeader); //添加表头排序功能 UiUtils.tableAddActionSortByHeader(basicHostMsgTableUI, basicHostMsgTableModel); //设置数据表的宽度 UiUtils.tableSetColumnMaxWidth(basicHostMsgTableUI, 0, 50); UiUtils.tableSetColumnMinWidth(basicHostMsgTableUI, 1, 200); UiUtils.tableSetColumnMinWidth(basicHostMsgTableUI, 2, 100); //设置表格每列的对齐设置 List<Integer> leftColumns = Arrays.asList(1); UiUtils.tableSetColumnsAlignRender(basicHostMsgTableUI, leftColumns); //为重要信息列添加额外的渲染 HasImportantCellRenderer havingImportantRenderer = new HasImportantCellRenderer(); int ImportantColumnIndex = 3; //重要信息列所在的列号减1 basicHostMsgTableUI.getColumnModel().getColumn(ImportantColumnIndex).setCellRenderer(havingImportantRenderer); //为状态信息列添加额外的渲染 在最后一列,可以设置为动态值 RunStatusCellRenderer runStatusCellRenderer = new RunStatusCellRenderer(); int runStatusColumnIndex = basicHostMsgTableUI.getColumnCount() - 1; basicHostMsgTableUI.getColumnModel().getColumn(runStatusColumnIndex).setCellRenderer(runStatusCellRenderer); //为表格添加点击显示下方的消息动作 basicHostTableAddActionSetMsgTabData(); //为表的每一行添加右键菜单 basicHostTableAddRightClickMenu(basicHostMsgTableUI, listSelectionModel); } /** * 初始化任务定时器 定时刷新UI内容 * @return */ public static void initTimerBasicHost() { // 确保在重新初始化之前停止旧的定时器 int delay = BasicHostConfigPanel.timerDelayOnHost * 1000; basicHostTimer = new Timer(delay, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //当定时自动刷新URL功能是开启时进行操作 if (IProxyScanner.autoRefreshUiIsOpen && basicHostTimer.isRunning()) { // 调用刷新表格的方法 try{ stdout_println(LOG_DEBUG, String.format("[*] Timer Refresh UI Basic Host On [%s]", delay)); //仅当开启了 自动刷新未访问URL 时调用 更新未访问URL列的数据 if (IProxyScanner.autoRefreshUnvisitedIsOpen){ BasicHostInfoPanel.getInstance().updateUnVisitedUrlsByRootUrls(null); } // 调用刷新表格的方法 BasicHostInfoPanel.getInstance().refreshBasicHostTableModel(); //建议JVM清理内存 System.gc(); //提示自动刷新表格完成 } catch (Exception exception){ stderr_println(LOG_ERROR, String.format("[!] Timer Refresh UI Basic Host Error: %s", exception.getMessage()) ); } } } }); stdout_println(LOG_DEBUG, "[*] Init Timer Basic Host"); } // 启动定时器 public static void startTimerBasicHost() { if (basicHostTimer != null) { if (!basicHostTimer.isRunning()){ basicHostTimer.start(); stdout_println(LOG_DEBUG, "[*] Start Timer Basic Host"); } } else { initTimerBasicHost(); } } // 定义一个方法来停止定时器 public static void stopTimerBasicHost() { if (basicHostTimer != null && basicHostTimer.isRunning()) { basicHostTimer.stop(); stdout_println(LOG_DEBUG, "[*] Stop Timer Basic Host"); } } /** * 初始化创建表格下方的消息内容面板 */ private JTabbedPane getBasicHostMsgTabs() { IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks(); // 将 结果消息面板 添加到窗口下方 JTabbedPane tabs = new JTabbedPane(); //敏感信息结果面板 使用 "text/html" 可用于 html 渲染颜色 basicHostFindInfoTextPane = new JEditorPane("text/html", ""); JScrollPane basicHostFindInfoTextScrollPane = new JScrollPane(basicHostFindInfoTextPane); basicHostFindInfoTextScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); // 提取到URL的面板 basicHostRespFindUrlTEditor = callbacks.createTextEditor(); basicHostRespFindPathTEditor = callbacks.createTextEditor(); basicHostDirectPath2UrlTEditor = callbacks.createTextEditor(); basicHostSmartPath2UrlTEditor = callbacks.createTextEditor(); basicHostUnvisitedUrlTEditor = callbacks.createTextEditor(); basicHostPathTreeTEditor = callbacks.createTextEditor(); //响应状态结果面板 使用 "text/html" 可用于 html 渲染 basicHostAllUrlStatusTEditor = new JEditorPane("text/html", ""); JScrollPane basicHostAllUrlStatusScrollPane = new JScrollPane(basicHostAllUrlStatusTEditor); basicHostAllUrlStatusScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); tabs.addTab("RespFindInfo",null, basicHostFindInfoTextScrollPane, "基于当前响应体提取的敏感信息"); //显示提取的信息 tabs.addTab("RespFindUrl",null, basicHostRespFindUrlTEditor.getComponent(), "基于当前响应体提取的URL"); //显示在这个URL中找到的PATH tabs.addTab("RespFindPath",null, basicHostRespFindPathTEditor.getComponent(), "基于当前响应体提取的PATH"); //显示在这个URL中找到的PATH tabs.addTab("DirectPath2Url",null, basicHostDirectPath2UrlTEditor.getComponent(), "基于当前请求URL目录 拼接 提取的PATH"); //显示在这个URL中找到的PATH tabs.addTab("SmartPath2Url",null, basicHostSmartPath2UrlTEditor.getComponent(), "基于当前网站有效目录 和 提取的PATH 动态计算出的URL"); //显示在这个URL中找到的PATH tabs.addTab("UnvisitedUrl",null, basicHostUnvisitedUrlTEditor.getComponent(), "当前所有提取URL中的未访问过的URl"); //显示在这个URL中找到的Path 且还没有访问过的URL tabs.addTab("PathTreeInfo",null, basicHostPathTreeTEditor.getComponent(), "当前网站的路径树信息"); tabs.addTab("AllUrlStatus",null, basicHostAllUrlStatusScrollPane, "当前网站所有提取URL的响应状态聚合"); return tabs; } /** * 清空当前Msg tabs中显示的数据 */ private static void clearBasicHostMsgTabsShowData() { basicHostFindInfoTextPane.setText(""); basicHostRespFindUrlTEditor.setText(new byte[0]); basicHostRespFindPathTEditor.setText(new byte[0]); basicHostDirectPath2UrlTEditor.setText(new byte[0]); basicHostSmartPath2UrlTEditor.setText(new byte[0]); basicHostUnvisitedUrlTEditor.setText(new byte[0]); basicHostPathTreeTEditor.setText(new byte[0]); basicHostAllUrlStatusTEditor.setText(""); } /** * 鼠标点击或键盘移动到行时,自动更新下方的msgTab */ private void basicHostTableAddActionSetMsgTabData() { //为表格 添加 鼠标监听器 //获取点击事件发生时鼠标所在行的索引 根据选中行的索引来更新其他组件的状态或内容。 basicHostMsgTableUI.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // 只有在双击时才执行 //if (e.getClickCount() == 2) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { int row = basicHostMsgTableUI.rowAtPoint(e.getPoint()); if (row >= 0) { updateComponentsBasedOnSelectedRow(row); } }catch (Exception ef) { BurpExtender.getStderr().println("[-] Error click table: " + basicHostMsgTableUI.rowAtPoint(e.getPoint())); ef.printStackTrace(BurpExtender.getStderr()); } } }); } }); //为表格 添加 键盘按键释放事件监听器 //获取按键事件发生时鼠标所在行的索引 根据选中行的索引来更新其他组件的状态或内容。 basicHostMsgTableUI.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { //关注向上 和向下 的按键事件 if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { int row = basicHostMsgTableUI.getSelectedRow(); if (row >= 0) { updateComponentsBasedOnSelectedRow(row); } }catch (Exception ef) { BurpExtender.getStderr().println("[-] Error KeyEvent.VK_UP OR KeyEvent.VK_DOWN: "); ef.printStackTrace(BurpExtender.getStderr()); } } }); } } }); } private String recordRootUrl; /** * 更新表格行对应的下方数据信息 * @param row */ private void updateComponentsBasedOnSelectedRow(int row) { //清理下方数据内容 clearBasicHostMsgTabsShowData(); //1、获取当前行的 rootUrl String currentRootUrl = null; try { //实现排序后 视图行 数据的正确获取 currentRootUrl = UiUtils.getStringAtActualRow(basicHostMsgTableUI, row, 1); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[!] Table get Value At Row [%s] Error:%s", row, e.getMessage())); } //更新之前 msgHash Date为 处理中 注意 要修改 ReqDataTable if (isNotEmptyObj(recordRootUrl)){ //当原来的状态是手动处理中时,就修改状态为处理完成 CommonUpdateStatus.updateStatusWhenStatusByRootUrl(AnalyseHostResultTable.tableName, recordRootUrl, Constants.HANDLE_END, Constants.HANDLE_ING); } //更新当前 msgHash Date为 处理中 if (isNotEmptyObj(currentRootUrl) ){ //当原来的状态是自动分析完成时,就修改请求状态为手工处理中 CommonUpdateStatus.updateStatusWhenStatusByRootUrl(AnalyseHostResultTable.tableName, currentRootUrl, Constants.HANDLE_ING, Constants.HANDLE_WAIT); recordRootUrl = currentRootUrl; } else { return; } //点击时就调用更新数据 updateAllExtractUrRespStatus(Collections.singletonList(currentRootUrl), false); //查询路径树信息 并美化输出 PathTreeModel pathTreeModel = PathTreeTable.fetchPathTreeByRootUrl(currentRootUrl); if (pathTreeModel!=null){ JSONObject pathTree = pathTreeModel.getPathTree(); String prettyJson = JSON.toJSONString(pathTree, JSONWriter.Feature.PrettyFormat); prettyJson = CastUtils.removeJsonForMat(prettyJson); basicHostPathTreeTEditor.setText(prettyJson.getBytes()); } //查询详细数据 BasicHostTableTabDataModel tabDataModel = AnalyseHostResultTable.fetchHostResultByRootUrl(currentRootUrl); if (tabDataModel != null) { //格式化为可输出的类型 String findInfo = CastUtils.urlInfoJsonArrayMapFormatHtml(tabDataModel.getFindInfo()); String findUrl = CastUtils.stringJsonArrayFormat(tabDataModel.getFindUrl()); String findPath = CastUtils.stringJsonArrayFormat(tabDataModel.getFindPath()); String findApi = CastUtils.stringJsonArrayFormat(tabDataModel.getFindApi()); String pathToUrl = CastUtils.stringJsonArrayFormat(tabDataModel.getPathToUrl()); String unvisitedUrl = CastUtils.stringJsonArrayFormat(tabDataModel.getUnvisitedUrl()); String allUrlStatus = CastUtils.stringUrlStatusMapFormatHtml(tabDataModel.getAllUrlStatus()); basicHostFindInfoTextPane.setText(findInfo); basicHostRespFindUrlTEditor.setText(findUrl.getBytes()); basicHostRespFindPathTEditor.setText(findPath.getBytes()); basicHostDirectPath2UrlTEditor.setText(findApi.getBytes()); basicHostSmartPath2UrlTEditor.setText(pathToUrl.getBytes()); basicHostUnvisitedUrlTEditor.setText(unvisitedUrl.getBytes()); basicHostAllUrlStatusTEditor.setText(allUrlStatus); } } /** * 定时刷新表数据 */ public void refreshBasicHostTableModel() { //设置已加入数据库的数量 BasicHostConfigPanel.lbTaskerCountOnHost.setText(String.valueOf(CommonFetchData.fetchTableCounts(ReqDataTable.tableName))); //设置成功分析的数量 BasicHostConfigPanel.lbAnalysisEndCountOnHost.setText(String.valueOf(CommonFetchData.fetchTableCountsByStatus(Constants.ANALYSE_END))); // 获取搜索框和搜索选项 final String searchText = BasicHostConfigPanel.getUrlSearchBoxTextOnHost(); final String selectedOption = BasicHostConfigPanel.getComboBoxSelectedOptionOnHost(); // 使用SwingWorker来处理数据更新,避免阻塞EDT SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { try { // 执行耗时的数据操作 BasicHostInfoPanel.showDataHostTableByFilter(selectedOption, searchText.isEmpty() ? "" : searchText); } catch (Exception e) { // 处理数据操作中可能出现的异常 System.err.println("Error while updating data: " + e.getMessage()); e.printStackTrace(); } return null; } @Override protected void done() { // 更新UI组件 try { // 更新UI组件 SwingUtilities.invokeLater(() -> { try { basicHostMsgTableModel.fireTableDataChanged(); // 通知模型数据发生了变化 } catch (Exception e) { // 处理更新UI组件时可能出现的异常 System.err.println("Error while updating UI: " + e.getMessage()); e.printStackTrace(); } }); } catch (Exception e) { // 处理在done()方法中可能出现的异常,例如InterruptedException或ExecutionException System.err.println("Error in done method: " + e.getMessage()); e.printStackTrace(); } } }; worker.execute(); } /** * 基于过滤选项 和 搜索框内容 显示结果 * @param selectOption * @param searchText */ public static void showDataHostTableByFilter(String selectOption, String searchText) { // 在后台线程获取数据,避免冻结UI new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { // 构建一个新的表格模型 basicHostMsgTableModel.setRowCount(0); // 获取数据库中的所有ApiDataModels ArrayList<BasicHostTableLineDataModel> apiDataModels; switch (selectOption) { case "显示有效内容": apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineHasInfoOrUri(); break; case "待处理有效内容": apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineHasInfoOrUriNotHandle(); break; case "显示敏感内容": apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineHasInfo(); break; case "待处理敏感内容": apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineHasInfoNotHandle(); break; case "显示未访问路径": apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineHasUnVisitedUrls(); break; case "显示无效内容": apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineAnyIsNull(); break; case "显示全部内容": default: apiDataModels = TableLineDataModelBasicHostSQL.fetchHostTableLineAll(); break; } // 遍历apiDataModelMap for (BasicHostTableLineDataModel apiDataModel : apiDataModels) { String url = apiDataModel.getRootUrl(); //是否包含关键字,当输入了关键字时,使用本函数再次进行过滤 if (url.toLowerCase().contains(searchText.toLowerCase())) { Object[] rowData = apiDataModel.toRowDataArray(); //model.insertRow(0, rowData); //插入到首行 basicHostMsgTableModel.insertRow(basicHostMsgTableModel.getRowCount(), rowData); //插入到最后一行 } } return null; } @Override protected void done() { try { get(); } catch (InterruptedException | ExecutionException e) { stderr_println(String.format("[!] showFilter error: %s", e.getMessage())); //e.printStackTrace(BurpExtender.getStderr()); } } }.execute(); } /** * 查询所有 UnVisitedUrls 并逐个进行过滤 * @param rootUrls rootUrls目标列表, 为空 为Null时更新全部 */ public void updateUnVisitedUrlsByRootUrls(List<String> rootUrls) { // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { // 获取所有未访问URl 注意需要大于0 List<UnVisitedUrlsModel> unVisitedUrlsModels; if (rootUrls == null || rootUrls.isEmpty()) { //更新所有的结果 unVisitedUrlsModels = AnalyseHostResultTable.fetchAllUnVisitedUrlsWithLimit(99); } else { //仅更新指定 rootUrls 对应的未访问URL unVisitedUrlsModels = AnalyseHostResultTable.fetchUnVisitedUrlsByRootUrls(rootUrls); } //忽略没有内容的情况 if (unVisitedUrlsModels.isEmpty()) { stderr_println(LOG_ERROR, String.format("[!] 获取对应的未访问URL为空: %s", rootUrls)); return null; } else { stdout_println(LOG_DEBUG, String.format("[*] 刷新未访问URL开始...Size: %s", unVisitedUrlsModels.size())); } //代码执行模式, eachMode 减少内存占用,但是查询次数更多 boolean eachMode = true; if (eachMode){ //1、查询所有的非RootUrl的对应的Hash List<String> inRootUrls = new ArrayList<>(); if (isNotEmptyObj(rootUrls)){ inRootUrls = rootUrls; } else { for (UnVisitedUrlsModel urlsModel : unVisitedUrlsModels) { inRootUrls.add(urlsModel.getRootUrl()); } } //2、获取当前非预期RootUrl的对应访问记录用于过滤 String accessedUrlHashesNotInRootUrls = CommonFetchData.fetchColumnGroupConcatStringNotInRootUrls( RecordUrlTable.tableName, RecordUrlTable.urlHashName, inRootUrls ); System.out.println(String.format("accessedUrlHashesNotInRootUrls:%s", accessedUrlHashesNotInRootUrls)); //3、多次循环查询每个RootUrl对应的访问记录 for (UnVisitedUrlsModel urlsModel : unVisitedUrlsModels) { String currentRootUrl = urlsModel.getRootUrl(); List<String> rawUnVisitedUrls = urlsModel.getUnvisitedUrls(); if (rawUnVisitedUrls.isEmpty()) continue; //过滤黑名单中的URL 因为黑名单是不定时更新的 List<String> newUnVisitedUrls = AnalyseInfo.filterFindUrls(currentRootUrl, rawUnVisitedUrls, BurpExtender.onlyScopeDomain); //过滤 rootUrl无关的访问记录 if (newUnVisitedUrls.size() > 0 && isNotEmptyObj(accessedUrlHashesNotInRootUrls)){ List<String> tmpUnVisitedUrls = new ArrayList<>(); for (String url : newUnVisitedUrls) { String urlHash = RespHashUtils.calcCRC32(url); if (!accessedUrlHashesNotInRootUrls.contains(urlHash)) { tmpUnVisitedUrls.add(url); } } newUnVisitedUrls = tmpUnVisitedUrls; } //过滤 rootUrl相关的访问记录 if (newUnVisitedUrls.size() > 0){ String accessedUrlHashesInRootUrl = CommonFetchData.fetchColumnGroupConcatStringInRootUrls( RecordUrlTable.tableName, RecordUrlTable.urlHashName, Collections.singletonList(currentRootUrl) ); System.out.println(String.format("accessedUrlHashesInRootUrl:%s", accessedUrlHashesInRootUrl)); if (isNotEmptyObj(accessedUrlHashesInRootUrl)){ List<String> tmpUnVisitedUrls = new ArrayList<>(); for (String url : newUnVisitedUrls) { String urlHash = RespHashUtils.calcCRC32(url); if (!accessedUrlHashesInRootUrl.contains(urlHash)) { tmpUnVisitedUrls.add(url); } } newUnVisitedUrls = tmpUnVisitedUrls; } } //更新记录并保存 urlsModel.setUnvisitedUrls(newUnVisitedUrls); try { AnalyseHostResultTable.updateUnVisitedUrlsByModel(urlsModel); } catch (Exception ex) { stderr_println(String.format("[!] Updating unvisited URL Error:%s", ex.getMessage())); } } } else { // // 一次性获取所有 已经被访问过得URL列表【URL HASH】 // String accessedUrlHashes = CommonFetchData.fetchColumnGroupConcatString(RecordUrlTable.tableName, RecordUrlTable.urlHashName); // // //遍历 unVisitedUrlsModels 进行更新 // for (UnVisitedUrlsModel urlsModel : unVisitedUrlsModels) { // //更新 unVisitedUrls 对象 // List<String> rawUnVisitedUrls = urlsModel.getUnvisitedUrls(); // List<String> newUnVisitedUrls = new ArrayList<>(); // for (String url : rawUnVisitedUrls) { // String urlHash = CastUtils.calcCRC32(url); // if (!accessedUrlHashes.contains(urlHash)) { // newUnVisitedUrls.add(url); // } // } // // //过滤黑名单中的URL 因为黑名单是不定时更新的 // newUnVisitedUrls = AnalyseInfo.filterFindUrls(urlsModel.getRootUrl(), newUnVisitedUrls, BurpExtender.onlyScopeDomain); // urlsModel.setUnvisitedUrls(newUnVisitedUrls); // // // 执行更新插入数据操作 // try { // AnalyseHostUnVisitedUrls.updateUnVisitedUrlsByModel(urlsModel); // } catch (Exception ex) { // stderr_println(String.format("[!] Updating unvisited URL Error:%s", ex.getMessage())); // } // } // 一次性获取所有 已经被访问过得URL列表【URL HASH】 String accessedUrlHashes = CommonFetchData.fetchColumnGroupConcatString(RecordUrlTable.tableName, RecordUrlTable.urlHashName); //遍历 unVisitedUrlsModels 进行更新 unVisitedUrlsModels.parallelStream() .forEach( urlsModel -> { List<String> rawUnVisitedUrls = urlsModel.getUnvisitedUrls(); //过滤黑名单中的URL 因为黑名单是不定时更新的 rawUnVisitedUrls = AnalyseInfo.filterFindUrls(urlsModel.getRootUrl(), rawUnVisitedUrls, BurpExtender.onlyScopeDomain); //过滤访问记录 List<String> newUnVisitedUrls = rawUnVisitedUrls.stream() .filter(url -> !accessedUrlHashes.contains(RespHashUtils.calcCRC32(url))) .collect(Collectors.toList()); //更新记录并保存 urlsModel.setUnvisitedUrls(newUnVisitedUrls); try { AnalyseHostResultTable.updateUnVisitedUrlsByModel(urlsModel); } catch (Exception ex) { stderr_println(String.format("[!] Updating unvisited URL Error:%s", ex.getMessage())); } }); } return null; } }.execute(); } private List<Integer> getIdsAtActualRows(JTable tableUI, int[] selectedRows) { return UiUtils.getIdsAtActualRows(tableUI, selectedRows, 0); } private List<String> getRootUrlsAtActualRows(JTable tableUI, int[] selectedRows) { return UiUtils.getStringListAtActualRows(tableUI, selectedRows, 1); } /** * 为 table 设置每一列的 右键菜单 */ private void basicHostTableAddRightClickMenu(JTable tableUI, int selectModel) { // 创建右键菜单 JPopupMenu popupMenu = new JPopupMenu(); JMenuItem copyUrlItem = new JMenuItem("复制RootURL", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); // 添加 copyUrlItem 事件监听器 copyUrlItem.setToolTipText("[多行]复制选定行对应的RootURL到剪贴板"); copyUrlItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行模式下的调用 if (selectModel >= 0){ int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()) UiUtils.copyToSystemClipboard(String.join("\n", rootUrls)); } } }); JMenuItem deleteItem = new JMenuItem("删除数据行", UiUtils.getImageIcon("/icon/deleteButton.png", 15, 15)); // 添加 deleteItem 事件监听器 deleteItem.setToolTipText("[多行]删除选定行对应的聚合结果表数据"); deleteItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0){ int[] selectedRows = tableUI.getSelectedRows(); List<Integer> ids = getIdsAtActualRows(tableUI, selectedRows); // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonDeleteLine.deleteLineByIds(AnalyseHostResultTable.tableName, ids); refreshBasicHostTableModel(); return null; } }.execute(); } } }); JMenuItem ClearUnVisitedItem = new JMenuItem("清空当前未访问URL", UiUtils.getImageIcon("/icon/deleteButton.png", 15, 15)); // 添加 ClearUnVisitedItem 事件监听器 ClearUnVisitedItem.setToolTipText("[多行]清空选定行对应的未访问URL"); ClearUnVisitedItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0){ int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { AnalyseHostResultTable.clearUnVisitedUrlsByRootUrls(rootUrls); refreshBasicHostTableModel(); return null; } }.execute(); } } } }); JMenuItem IgnoreUnVisitedItem = new JMenuItem("忽略当前未访问URL", UiUtils.getImageIcon("/icon/editButton.png", 15, 15)); // 添加 IgnoreUnVisitedItem 事件监听器 IgnoreUnVisitedItem.setToolTipText("[多行]标记选定行对应的未访问URL为已访问 并清空 当访问URL后依然无法过滤时使用"); IgnoreUnVisitedItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0){ int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { //获取所有msgHash相关的结果 List<UnVisitedUrlsModel> unVisitedUrlsModels = AnalyseHostResultTable.fetchUnVisitedUrlsByRootUrls(rootUrls); //整合所有结果URL到一个Set Set<String> unvisitedUrlsSet = new HashSet<>(); for (UnVisitedUrlsModel unVisitedUrlsModel:unVisitedUrlsModels){ List<String> unvisitedUrls = unVisitedUrlsModel.getUnvisitedUrls(); unvisitedUrlsSet.addAll(unvisitedUrls); } //批量插入所有URL RecordUrlTable.insertOrUpdateAccessedUrlsBatch(new ArrayList<>(unvisitedUrlsSet), 299); //批量删除所有msgHashList AnalyseHostResultTable.clearUnVisitedUrlsByRootUrls(rootUrls); refreshBasicHostTableModel(); return null; } }.execute(); } } } }); JMenuItem updateUnVisitedItem = new JMenuItem("刷新当前未访问URL", UiUtils.getImageIcon("/icon/refreshButton2.png", 15, 15)); // 添加 updateUnVisitedItem 事件监听器 updateUnVisitedItem.setToolTipText("[多行]更新选定行对应的未访问URL情况"); updateUnVisitedItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { updateUnVisitedUrlsByRootUrls(rootUrls); refreshBasicHostTableModel(); return null; } }.execute(); } } } }); JMenuItem accessUnVisitedItem = new JMenuItem("访问当前未访问URL", UiUtils.getImageIcon("/icon/urlIcon.png", 15, 15)); // 添加 accessUnVisitedItem 事件监听器 accessUnVisitedItem.setToolTipText("[多行]访问选定行对应的当前所有未访问URL"); accessUnVisitedItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { //获取所有msgHash相关的结果 List<UnVisitedUrlsModel> unVisitedUrlsModels = AnalyseHostResultTable.fetchUnVisitedUrlsByRootUrls(rootUrls); //批量访问所有URL模型 for (UnVisitedUrlsModel unVisitedUrlsModel: unVisitedUrlsModels){ IProxyScanner.accessUnVisitedUrlsModel(unVisitedUrlsModel, false); } //更新 检查 rootUrls 对应的 未访问URl情况 updateUnVisitedUrlsByRootUrls(rootUrls); refreshBasicHostTableModel(); return null; } }.execute(); } } } }); JMenuItem removeHostFromPathTreeItem = new JMenuItem("清空HOST对应PathTree", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 removeHostFromPathTreeItem 事件监听器 removeHostFromPathTreeItem.setToolTipText("[多行]清空选定行对应的HOST在PathTree及RecordPath中的数据"); removeHostFromPathTreeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel>=0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonDeleteLine.deleteLineByRootUrls(PathTreeTable.tableName, rootUrls); CommonDeleteLine.deleteLineByRootUrls(RecordPathTable.tableName, rootUrls); refreshBasicHostTableModel(); return null; } }.execute(); } } } }); JMenuItem addRootUrlToBlackUrlRootItem = new JMenuItem("添加到RootUrl黑名单", UiUtils.getImageIcon("/icon/noFindUrlFromJS.png", 15, 15)); // 添加 addRootUrlToBlackUrlRootItem 事件监听器 addRootUrlToBlackUrlRootItem.setToolTipText("[多行]添加选定行对应的RootUrl到禁止扫描黑名单 CONF_BLACK_ROOT_URL"); addRootUrlToBlackUrlRootItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel>=0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { // 合并 rootUrls 到 BurpExtender.CONF_BLACK_ROOT_URL 保持唯一性 BurpExtender.CONF_BLACK_ROOT_URL =CastUtils.listAddList(rootUrls, BurpExtender.CONF_BLACK_ROOT_URL); //保存Json RuleConfigPanel.saveConfigToDefaultJson(); //2、删除 Root URL 对应的 结果数据 int countReq = CommonDeleteLine.deleteLineByUrlLikeRootUrls(ReqDataTable.tableName, rootUrls); int countUrl = CommonDeleteLine.deleteLineByRootUrls(AnalyseUrlResultTable.tableName, rootUrls); int countHost = CommonDeleteLine.deleteLineByRootUrls(AnalyseHostResultTable.tableName, rootUrls); stdout_println(LOG_DEBUG, String.format("delete ReqData Count:%s , delete Analyse Host Result Count:%s, delete Analyse Url Result Count:%s", countReq, countHost, countUrl)); //3、刷新表格 refreshBasicHostTableModel(); return null; } }.execute(); } } } }); JMenuItem addRootUrlToNotAutoRecurseItem = new JMenuItem("添加到禁止自动递归目标", UiUtils.getImageIcon("/icon/noFindUrlFromJS.png", 15, 15)); // 添加 addRootUrlToNotAutoRecurseItem 事件监听器 addRootUrlToNotAutoRecurseItem.setToolTipText("[多行]添加选定行对应的RootUrl加入到禁止自动递归列表 CONF_BLACK_AUTO_RECURSE_SCAN"); addRootUrlToNotAutoRecurseItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel>=0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { BurpExtender.CONF_BLACK_AUTO_RECURSE_SCAN = CastUtils.listAddList(rootUrls, BurpExtender.CONF_BLACK_AUTO_RECURSE_SCAN); RuleConfigPanel.saveConfigToDefaultJson(); return null; } }.execute(); } } } }); JMenuItem addRootUrlToAllowListenItem = new JMenuItem("添加到允许监听白名单", UiUtils.getImageIcon("/icon/findUrlFromJS.png", 15, 15)); // 添加 addRootUrlToAllowListenItem 事件监听器 addRootUrlToAllowListenItem.setToolTipText("[多行]添加选定行对应的RootUrl到仅监听的白名单 CONF_WHITE_ROOT_URL"); addRootUrlToAllowListenItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel>=0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { BurpExtender.CONF_WHITE_ROOT_URL = CastUtils.listAddList(rootUrls, BurpExtender.CONF_WHITE_ROOT_URL); //保存Json RuleConfigPanel.saveConfigToDefaultJson(); return null; } }.execute(); } } } }); JMenuItem pathTreeToPathListItem = new JMenuItem("提取当前HOST的所有PATH", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); //pathTreeToPathListItem pathTreeToPathListItem.setToolTipText("[多行]复制选定行对应的RootUrl在PathTree中的路径数据到剪贴板 并弹框"); pathTreeToPathListItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel>=0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI,selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { Set<String> pathSet = new LinkedHashSet<>(); for (String rootUrl:rootUrls){ //查询 rootUrl 对应的树 PathTreeModel pathTreeModel = PathTreeTable.fetchPathTreeByRootUrl(rootUrl); if (isNotEmptyObj(pathTreeModel)){ JSONObject currPathTree = pathTreeModel.getPathTree(); if (isNotEmptyObj(currPathTree) && isNotEmptyObj(currPathTree.getJSONObject("ROOT"))){ List<String> pathList = PathTreeUtils.covertTreeToPaths(currPathTree); for (String path:pathList){ pathSet.add(path.replace("ROOT", rootUrl) + "/"); } } } } //直接复制到用户的粘贴板 UiUtils.copyToSystemClipboard(String.join("\n", pathSet)); //弹框让用户查看 UiUtils.showOneMsgBoxToCopy(String.join("\n",pathSet), "所有路径信息"); return null; } }.execute(); } } } }); //提取当前API结果的单层节点 单层节点没有办法通过PATH树计算,必须手动拼接测试 JMenuItem copySingleLayerNodeItem = new JMenuItem("提取当前PATH结果中的单层节点", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); //copySingleLayerNodeItem copySingleLayerNodeItem.setToolTipText("[多行]复制选定行对应的提取PATH中的单层(无目录)路径到剪贴板 并弹框"); copySingleLayerNodeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { List<FindPathModel> findPathModelList = AnalyseHostResultTable.fetchPathDataByRootUrl(rootUrls); Set<String> pathSet = FindPathModel.getSingleLayerPathSet(findPathModelList); //直接复制到用户的粘贴板 UiUtils.copyToSystemClipboard(String.join("\n", pathSet)); //弹框让用户查看 UiUtils.showOneMsgBoxToCopy(String.join("\n",pathSet), "单层路径信息"); return null; } }.execute(); } } } }); JMenuItem calcSingleLayerNodeItemOnHost = new JMenuItem("输入URL前缀生成单层节点对应URL", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); //calcSingleLayerNodeItem calcSingleLayerNodeItemOnHost.setToolTipText("[多行]基于选定行对应的提取PATH中的单层(无目录)PATH和用户输入的URL前缀计算新的URL"); calcSingleLayerNodeItemOnHost.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { UiUtils.showInputBoxAndHandle(rootUrls, "calcSingleLayerNodeItemOnHost", "指定PATH生成单层节点URL"); return null; } }.execute(); } } } }); //标记选中消息 状态为自动分析完成 Constants.HANDLE_WAIT JMenuItem setRunStatusHandleWaitItem = new JMenuItem("修改状态为等待手动验证", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 setRunStatusHandleWaitItem 事件监听器 setRunStatusHandleWaitItem.setToolTipText("[多行]修改所选消息状态为等待手动验证"); setRunStatusHandleWaitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<Integer> ids = getIdsAtActualRows(tableUI, selectedRows); if (!ids.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonUpdateStatus.updateStatusByIds(AnalyseHostResultTable.tableName, ids, Constants.HANDLE_WAIT); return null; } }.execute(); } } } }); //标记选中消息 状态为手动分析完成 Constants.HANDLE_END JMenuItem setRunStatusHandleEndItem = new JMenuItem("修改状态为手动验证完成", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 setRunStatusHandleEndItem 事件监听器 setRunStatusHandleEndItem.setToolTipText("[多行]修改所选消息状态为手动验证完成"); setRunStatusHandleEndItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<Integer> ids = getIdsAtActualRows(tableUI, selectedRows); if (!ids.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonUpdateStatus.updateStatusByIds(AnalyseHostResultTable.tableName, ids, Constants.HANDLE_END); return null; } }.execute(); } } } }); //重新查询已提取URL的访问状态 JMenuItem initOrUpdateUrlStatusItem = new JMenuItem("重新查询URL访问状态", UiUtils.getImageIcon("/icon/refreshButton2.png", 15, 15)); // 添加 initOrUpdateUrlStatusItem 事件监听器 initOrUpdateUrlStatusItem.setToolTipText("[多行]重新查询已提取URL的访问状态"); initOrUpdateUrlStatusItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> rootUrls = getRootUrlsAtActualRows(tableUI, selectedRows); if (!rootUrls.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { updateAllExtractUrRespStatus(rootUrls, true); return null; } }.execute(); } } } }); popupMenu.add(copyUrlItem); popupMenu.add(deleteItem); popupMenu.add(accessUnVisitedItem); popupMenu.add(updateUnVisitedItem); popupMenu.add(ClearUnVisitedItem); popupMenu.add(IgnoreUnVisitedItem); popupMenu.add(initOrUpdateUrlStatusItem); popupMenu.add(setRunStatusHandleWaitItem); popupMenu.add(setRunStatusHandleEndItem); popupMenu.add(removeHostFromPathTreeItem); popupMenu.add(addRootUrlToBlackUrlRootItem); popupMenu.add(addRootUrlToNotAutoRecurseItem); popupMenu.add(addRootUrlToAllowListenItem); popupMenu.add(pathTreeToPathListItem); popupMenu.add(copySingleLayerNodeItem); popupMenu.add(calcSingleLayerNodeItemOnHost); // popupMenu.add(removeFindApiIListItem); // 将右键菜单添加到表格 tableUI.setComponentPopupMenu(popupMenu); } /** * 清空当前Msg tabs中显示的数据 */ public static void clearBasicHostMsgTabsData() { basicHostFindInfoTextPane.setText(""); basicHostRespFindUrlTEditor.setText(new byte[0]); basicHostRespFindPathTEditor.setText(new byte[0]); basicHostDirectPath2UrlTEditor.setText(new byte[0]); basicHostSmartPath2UrlTEditor.setText(new byte[0]); basicHostUnvisitedUrlTEditor.setText(new byte[0]); basicHostPathTreeTEditor.setText(new byte[0]); basicHostAllUrlStatusTEditor.setText(""); } public static void clearBasicHostMsgTableModel(){ basicHostMsgTableModel.setRowCount(0); } /** * 更新当前选定的RootURL的所有提取URL的状态 * @param rootUrls 选定的RootUrls * @param resetOldUrlStatus 是否需要充值历史状态记录 */ private void updateAllExtractUrRespStatus(List<String> rootUrls, boolean resetOldUrlStatus) { //查询 RootUrl 对应的 所有提取URL 信息 List<BasicHostTableTabDataModel> tabDataModels = AnalyseHostResultTable.fetchHostResultByRootUrls(rootUrls); if (!tabDataModels.isEmpty()) { for (BasicHostTableTabDataModel tabDataModel : tabDataModels){ List<String> findUrlList = CastUtils.toStringList(tabDataModel.getFindUrl()); List<String> findApiList = CastUtils.toStringList(tabDataModel.getFindApi()); List<String> pathToUrlList = CastUtils.toStringList(tabDataModel.getPathToUrl()); List<String> unvisitedUrl = CastUtils.toStringList(tabDataModel.getUnvisitedUrl()); //获取历史URL状态码记录、减少查询数量 HashMap<String, JSONObject> oldAllExtractUrlStatus = CastUtils.toUrlStatusJsonMap(tabDataModel.getAllUrlStatus()); //计算出当前所有提取URL List<String> newAllExtractUrls = CastUtils.listAddList(CastUtils.listAddList(findUrlList, findApiList), pathToUrlList); //当存在提取URL时进行操作 if (!newAllExtractUrls.isEmpty()){ //为所有URL补充状态 基本状态 后续需要覆盖 HashMap<String, JSONObject> newAllExtractUrlStatusMap = CastUtils.toUrlStatusJsonMap(newAllExtractUrls); //当没查到任何结果时候,显示这个 //忽略查询未访问URL的响应状态码,都没有访问,那应该是没有的 List<String> needQueryExtractUrls = CastUtils.listReduceList(newAllExtractUrls, unvisitedUrl); //计算出所有需要更新的提取URL if (oldAllExtractUrlStatus.size() > 0 && !resetOldUrlStatus){ //合并旧查询数据 newAllExtractUrlStatusMap = CastUtils.updateUrlStatusMap(newAllExtractUrlStatusMap, oldAllExtractUrlStatus); //分析旧状态中实际有响应信息的URL,这些不用再次查询 List<String> oldValidAllUrl = new ArrayList<>(); for (Map.Entry<String, JSONObject> entry : oldAllExtractUrlStatus.entrySet()){ String urlWithMethod = entry.getKey(); JSONObject urlStatusJson = entry.getValue(); //当 status == -1 || length == -1 时 也需要查询更新 if (urlStatusJson.getInteger("status") > -1 || urlStatusJson.getInteger("length") > -1){ String url = urlWithMethod.split(Constants.SPLIT_SYMBOL, 2)[0].trim(); oldValidAllUrl.add(url); } } //排除历史上已经查询过的有效URL needQueryExtractUrls = CastUtils.listReduceList(needQueryExtractUrls, oldValidAllUrl); } if (!needQueryExtractUrls.isEmpty()){ //查询所有对应 URL 的状态 并更新到Map中 List<ReqUrlRespStatusModel> reqUrlRespStatusModels = ReqDataTable.fetchReqUrlRespStatusByUrls(needQueryExtractUrls); for (ReqUrlRespStatusModel reqUrlRespStatusModel:reqUrlRespStatusModels){ JSONObject statusJson = new JSONObject() {{ put("status", reqUrlRespStatusModel.getRespStatusCode()); put("length", reqUrlRespStatusModel.getRespLength()); }}; //将 URL + Method 作为键 用于兼容多种请求方式下的不同值 String urlWithMethod = String.format("%s %s %s", reqUrlRespStatusModel.getReqUrl(), Constants.SPLIT_SYMBOL, reqUrlRespStatusModel.getReqMethod()); newAllExtractUrlStatusMap.put(urlWithMethod, statusJson); } } //更新ALL URL状态数据到数据库中 实际上只要新URL数量有增长,就应该更新数据,懒得判断了,全部更新吧 AnalyseHostResultTable.updateUrlsStatusByRootUrl(tabDataModel.getRootUrl(), newAllExtractUrlStatusMap, newAllExtractUrls.size()); } } } } } ================================================ FILE: src/main/java/ui/BasicUrlConfigPanel.java ================================================ package ui; import burp.BurpExtender; import burp.IProxyScanner; import utils.UiUtils; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import static utils.BurpPrintUtils.*; public class BasicUrlConfigPanel extends JPanel { public static JLabel lbRequestCountOnUrl; //记录所有加入到URL的请求 public static JLabel lbTaskerCountOnUrl; //记录所有加入数据库的请求 public static JLabel lbAnalysisEndCountOnUrl; //记录所有已经分析完成的结果数量 public static int timerDelayOnUrl=15; private static JComboBox<String> choicesComboBoxOnUrl; //数据表显示快速选择框 private static JTextField urlSearchBoxOnUrl; //URl搜索框 public static JToggleButton autoRefreshUiButtonOnUrl; //自动刷新开关按钮状态 public static JToggleButton forceDecodeUnicodeButtonOnUrl; //强制解码响应Unicode //用于两端联动使用 public static JToggleButton proxyListenButtonOnUrl; public static JToggleButton autoRecordPathButtonOnUrl; //自动保存响应状态码合适的URL 目前过滤功能不完善,只能手动开启 public static JToggleButton dynamicPathFilterButtonOnUrl; public static JToggleButton autoPathsToUrlsButtonOnUrl; public static JToggleButton autoRefreshUnvisitedButtonOnUrl; public static JToggleButton autoRecursiveButtonOnUrl; public BasicUrlConfigPanel() { GridBagLayout gridBagLayout = new GridBagLayout(); //GridBagLayout 允许以网格形式布局容器中的组件,同时为每个组件提供独立的定位和大小控制,非常适用于需要复杂布局设计的GUI界面。 // 列数,行数 //表示容器被划分为两列,每一列的初始宽度均为0。 // 这里的0不代表实际宽度为零,而是告诉布局管理器根据组件的实际大小和其他约束(如权重)来计算列宽。 gridBagLayout.columnWidths = new int[] { 0, 0}; gridBagLayout.rowHeights = new int[] {5}; // 各列占宽度比,各行占高度比 gridBagLayout.columnWeights = new double[] { 1.0D, Double.MIN_VALUE }; //设置了两列的扩展权重。第一列的权重为1.0,意味着当容器有多余空间时,这一列会优先扩展以填充可用空间。 // 第二列的权重设为Double.MIN_VALUE,表示这一列不应该扩展,保持最小或固定大小。 setLayout(gridBagLayout); //创建FilterPanel JPanel FilterPanel = new JPanel(); GridBagConstraints gbc_panel_1 = new GridBagConstraints(); gbc_panel_1.insets = new Insets(0, 5, 5, 5); gbc_panel_1.fill = 2; gbc_panel_1.gridx = 0; gbc_panel_1.gridy = 2; add(FilterPanel, gbc_panel_1); //设置一个名为FilterPanel的面板在父容器中的布局位置 // 布局约束包括: //insets: 设置了组件边缘的内边距,上5px,左5px,下5px,右5px,为组件提供一定的间距。 //fill: 设置组件在可扩展空间中的填充方式,值为2表示BOTH,即组件可以在水平和垂直方向上填充其显示区域。 //gridx 和 gridy: 分别设置组件在网格布局中的起始列和起始行,这里是第0列第2行。 //为 FilterPanel 设置布局 GridBagLayout gbl_panel_1 = new GridBagLayout(); gbl_panel_1.columnWidths = new int[] { 0, 0, 0, 0, 0 };//设置每列的初始宽度为0 指示布局管理器根据组件实际大小和其他约束来计算宽度。 gbl_panel_1.rowHeights = new int[] { 0, 0 }; //设置每行的初始高度为0,指按需计算行高。 // 指定每列的扩展权重。这里前9列的权重都设为0.0,意味着这些列不会随容器大小变化而扩展, // 而最后列的权重设为Double.MIN_VALUE,这通常用于指示该列应该尽可能小,不参与额外空间的分配。 //gbl_panel_1.columnWeights = new double[] { 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D, Double.MIN_VALUE}; //第一行权重为0.0,不随容器扩展,第二行的权重为Double.MIN_VALUE,表示该行也不扩展。 gbl_panel_1.rowWeights = new double[] { 0.0D, Double.MIN_VALUE }; FilterPanel.setLayout(gbl_panel_1); // 在添加 "Requests Total" 和 lbRequestCount 之前添加一个占位组件 Component leftStrut = Box.createHorizontalStrut(5); // 你可以根据需要调整这个值 GridBagConstraints gbc_leftStrut = new GridBagConstraints(); gbc_leftStrut.insets = new Insets(0, 0, 0, 5); gbc_leftStrut.fill = GridBagConstraints.HORIZONTAL; gbc_leftStrut.weightx = 1.0; // 这个值决定了 leftStrut 占据的空间大小 gbc_leftStrut.gridx = 6; gbc_leftStrut.gridy = 0; FilterPanel.add(leftStrut, gbc_leftStrut); // 转发url总数,默认0 JLabel lbRequest = new JLabel("Requests Total:"); GridBagConstraints gbc_lbRequest = new GridBagConstraints(); gbc_lbRequest.insets = new Insets(0, 0, 0, 5); gbc_lbRequest.fill = GridBagConstraints.HORIZONTAL; gbc_lbRequest.weightx = 0.0; gbc_lbRequest.gridx = 0; gbc_lbRequest.gridy = 0; FilterPanel.add(lbRequest, gbc_lbRequest); lbRequestCountOnUrl = new JLabel("0"); lbRequestCountOnUrl.setForeground(new Color(0,0,255)); GridBagConstraints gbc_lbRequestCount = new GridBagConstraints(); gbc_lbRequestCount.insets = new Insets(0, 0, 0, 5); gbc_lbRequestCount.fill = GridBagConstraints.HORIZONTAL; gbc_lbRequestCount.weightx = 0.0; gbc_lbRequestCount.gridx = 1; gbc_lbRequestCount.gridy = 0; FilterPanel.add(lbRequestCountOnUrl, gbc_lbRequestCount); // 转发成功url数,默认0 JLabel lbTasker = new JLabel("Tasker Total:"); GridBagConstraints gbc_lbTasker = new GridBagConstraints(); gbc_lbTasker.insets = new Insets(0, 0, 0, 5); gbc_lbTasker.fill = 0; gbc_lbTasker.gridx = 2; gbc_lbTasker.gridy = 0; FilterPanel.add(lbTasker, gbc_lbTasker); lbTaskerCountOnUrl = new JLabel("0"); lbTaskerCountOnUrl.setForeground(new Color(0, 255, 0)); GridBagConstraints gbc_lbTaskerCount = new GridBagConstraints(); gbc_lbTaskerCount.insets = new Insets(0, 0, 0, 5); gbc_lbTaskerCount.fill = 0; gbc_lbTaskerCount.gridx = 3; gbc_lbTaskerCount.gridy = 0; FilterPanel.add(lbTaskerCountOnUrl, gbc_lbTaskerCount); // 分析URL的数量 JLabel lbAnalysisEnd = new JLabel("Analysis End:"); GridBagConstraints gbc_lbAnalysisEnd = new GridBagConstraints(); gbc_lbAnalysisEnd.insets = new Insets(0, 0, 0, 5); gbc_lbAnalysisEnd.fill = 0; gbc_lbAnalysisEnd.gridx = 4; gbc_lbAnalysisEnd.gridy = 0; FilterPanel.add(lbAnalysisEnd, gbc_lbAnalysisEnd); lbAnalysisEndCountOnUrl = new JLabel("0"); lbAnalysisEndCountOnUrl.setForeground(new Color(0, 0, 255)); // 蓝色 GridBagConstraints gbc_lbAnalysisEndCount = new GridBagConstraints(); gbc_lbAnalysisEndCount.insets = new Insets(0, 0, 0, 5); gbc_lbAnalysisEndCount.fill = 0; gbc_lbAnalysisEndCount.gridx = 5; gbc_lbAnalysisEndCount.gridy = 0; FilterPanel.add(lbAnalysisEndCountOnUrl, gbc_lbAnalysisEndCount); // 添加填充以在左侧占位 Component horizontalBlank = Box.createHorizontalGlue(); //创建一个水平组件 GridBagConstraints gbc_leftFiller = new GridBagConstraints(); gbc_leftFiller.weightx = 1; // 使得这个组件吸收额外的水平空间 gbc_leftFiller.gridx = 6; // 位置设置为第一个单元格 gbc_leftFiller.gridy = 0; // 第一行 gbc_leftFiller.fill = GridBagConstraints.HORIZONTAL; // 水平填充 FilterPanel.add(horizontalBlank, gbc_leftFiller); // 开关 是否开启代理流量监听 //自动保存响应状态码合适的URL 目前过滤功能不完善,只能手动开启\ proxyListenButtonOnUrl = UiUtils.getToggleButtonByDefaultValue(BurpExtender.proxyListenIsOpenDefault); proxyListenButtonOnUrl.setToolTipText("Proxy模块流量监听开关"); proxyListenButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = proxyListenButtonOnUrl.isSelected(); IProxyScanner.proxyListenIsOpen = BurpExtender.proxyListenIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("proxyListenIsOpen: %s", IProxyScanner.proxyListenIsOpen)); BasicHostConfigPanel.proxyListenButtonOnHost.setSelected(selected); //联动更新Host面板的情况 } }); // 刷新按钮按钮 JToggleButton clickRefreshButtonOnUrl = new JToggleButton(UiUtils.getImageIcon("/icon/refreshButton2.png", 24, 24)); clickRefreshButtonOnUrl.setPreferredSize(new Dimension(30, 30)); clickRefreshButtonOnUrl.setBorder(null); // 设置无边框 clickRefreshButtonOnUrl.setFocusPainted(false); // 移除焦点边框 clickRefreshButtonOnUrl.setContentAreaFilled(false); // 移除选中状态下的背景填充 clickRefreshButtonOnUrl.setToolTipText("点击强制刷新表格"); // 手动刷新按钮监听事件 clickRefreshButtonOnUrl.addActionListener(new ActionListener() { private boolean canClick = true; @Override public void actionPerformed(ActionEvent e) { if (canClick) { canClick = false; ImageIcon originalIcon = (ImageIcon) clickRefreshButtonOnUrl.getIcon(); // 保存原始图标 String originalTip = clickRefreshButtonOnUrl.getToolTipText(); // 保存原始批注 // 更换为新图标 clickRefreshButtonOnUrl.setIcon(UiUtils.getImageIcon("/icon/runningButton.png", 24, 24)); // 立即显示新图标 // 调用刷新表格的方法 try{ BasicUrlInfoPanel.getInstance().refreshBasicUrlTableModel(false); //建议JVM清理内存 System.gc(); } catch (Exception ep){ stderr_println(LOG_ERROR, String.format("[!] 刷新表格发生错误:%s", ep.getMessage()) ); } // 设置定时器,5秒后允许再次点击并恢复图标 Timer timer = new Timer(3000, new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { canClick = true; clickRefreshButtonOnUrl.setIcon(originalIcon); // 恢复原始图标 clickRefreshButtonOnUrl.setToolTipText(originalTip); // 恢复原始批注 } }); timer.setRepeats(false); timer.start(); } } }); // 开关 是否开启自动记录PATH autoRecordPathButtonOnUrl = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRecordPathIsOpenDefault); autoRecordPathButtonOnUrl.setToolTipText("自动保存有效请求PATH"); autoRecordPathButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRecordPathButtonOnUrl.isSelected(); IProxyScanner.autoRecordPathIsOpen = BurpExtender.autoRecordPathIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRecordPathIsOpen: %s", IProxyScanner.autoRecordPathIsOpen)); BasicHostConfigPanel.autoRecordPathButtonOnHost.setSelected(selected); //联动更新URL面板的情况 } }); // 开关 是否开启复杂的动态PATH过滤 dynamicPathFilterButtonOnUrl= UiUtils.getToggleButtonByDefaultValue(BurpExtender.dynamicPathFilterIsOpenDefault); dynamicPathFilterButtonOnUrl.setToolTipText("开启智能响应过滤(访问随机URL获取目标的404页面的条件)"); dynamicPathFilterButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = dynamicPathFilterButtonOnUrl.isSelected(); IProxyScanner.dynamicPathFilterIsOpen = BurpExtender.dynamicPathFilterIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("dynamicPathFilterIsOpen: %s", IProxyScanner.dynamicPathFilterIsOpen)); BasicHostConfigPanel.dynamicPathFilterButtonOnHost.setSelected(selected); //联动更新URL面板的情况 } }); autoPathsToUrlsButtonOnUrl= UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoPathsToUrlsIsOpenDefault); autoPathsToUrlsButtonOnUrl.setToolTipText("自动基于PathTree结合FindPath生成URL"); autoPathsToUrlsButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoPathsToUrlsButtonOnUrl.isSelected(); IProxyScanner.autoPathsToUrlsIsOpen = BurpExtender.autoPathsToUrlsIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoPathsToUrlsIsOpen: %s", IProxyScanner.autoPathsToUrlsIsOpen)); BasicHostConfigPanel.autoPathsToUrlsButtonOnHost.setSelected(selected); //联动更新URL面板的情况 } }); // 开关 是否开启自动刷新未访问URL autoRefreshUnvisitedButtonOnUrl = UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRefreshUnvisitedIsOpenDefault); autoRefreshUnvisitedButtonOnUrl.setToolTipText("自动刷新未访问URL"); autoRefreshUnvisitedButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRefreshUnvisitedButtonOnUrl.isSelected(); IProxyScanner.autoRefreshUnvisitedIsOpen = BurpExtender.autoRefreshUnvisitedIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRefreshUnvisitedIsOpen: %s", IProxyScanner.autoRefreshUnvisitedIsOpen)); BasicHostConfigPanel.autoRefreshUnvisitedButtonOnHost.setSelected(selected); //联动更新URL面板的情况 } }); // 开关 是否开启对提取URL进行发起请求 autoRecursiveButtonOnUrl= UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRecursiveIsOpenDefault); autoRecursiveButtonOnUrl.setToolTipText("自动测试未访问URL"); autoRecursiveButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRecursiveButtonOnUrl.isSelected(); IProxyScanner.autoRecursiveIsOpen = BurpExtender.autoRecursiveIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRecursiveIsOpen: %s", IProxyScanner.autoRecursiveIsOpen)); BasicHostConfigPanel.autoRecursiveButtonOnHost.setSelected(selected); //联动更新URL面板的情况 } }); //刷新按钮 autoRefreshUiButtonOnUrl= UiUtils.getToggleButtonByDefaultValue(BurpExtender.autoRefreshUiIsOpenDefault); autoRefreshUiButtonOnUrl.setToolTipText(String.format("每[%s]秒刷新表格", timerDelayOnUrl)); // 自动刷新按钮监听事件 autoRefreshUiButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = autoRefreshUiButtonOnUrl.isSelected(); IProxyScanner.autoRefreshUiIsOpen = BurpExtender.autoRefreshUiIsOpenDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("autoRefreshUiIsOpen: %s", IProxyScanner.autoRefreshUiIsOpen)); BasicHostConfigPanel.autoRefreshUiButtonOnHost.setSelected(selected); //联动更新URL面板的情况 //根据当前刷新开关状态配置定时器暂停或者重启 UiUtils.setAutoRefreshUiByButton(IProxyScanner.autoRefreshUiIsOpen); } }); // 开关 是否开启对提取URL进行发起请求 forceDecodeUnicodeButtonOnUrl = UiUtils.getToggleButtonByDefaultValue(BurpExtender.forceDecodeUnicodeDefault); forceDecodeUnicodeButtonOnUrl.setToolTipText("强制解码响应Unicode 默认只对Json响应解码"); forceDecodeUnicodeButtonOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //默认开启本功能, 点击后应该关闭配置 //默认关闭本功能, 点击后应该开启配置 boolean selected = forceDecodeUnicodeButtonOnUrl.isSelected(); IProxyScanner.forceDecodeUnicode = BurpExtender.forceDecodeUnicodeDefault ? !selected : selected; stdout_println(LOG_DEBUG, String.format("forceDecodeUnicode: %s", IProxyScanner.forceDecodeUnicode)); BasicHostConfigPanel.forceDecodeUnicodeButtonOnHost.setSelected(selected); //联动更新URL面板的情况 } }); // 设置按钮的 GridBagConstraints GridBagConstraints gbc_buttons = new GridBagConstraints(); gbc_buttons.insets = new Insets(0, 5, 0, 5); gbc_buttons.gridy = 0; // 设置按钮的纵坐标位置 gbc_buttons.fill = GridBagConstraints.NONE; // 不填充 // 点击按钮 点击后刷新数据 含未访问数据 gbc_buttons.gridx = 7; // 设置按钮的横坐标位置 FilterPanel.add(proxyListenButtonOnUrl, gbc_buttons); gbc_buttons.gridx = 8; // 设置按钮的横坐标位置 FilterPanel.add(forceDecodeUnicodeButtonOnUrl, gbc_buttons); // 自动记录有效的PATH到path表中 功能开关 gbc_buttons.gridx = 9; // 设置按钮的横坐标位置 FilterPanel.add(autoRecordPathButtonOnUrl, gbc_buttons); // 高级动态有效路径过滤 功能开关 gbc_buttons.gridx = 10; FilterPanel.add(dynamicPathFilterButtonOnUrl, gbc_buttons); // 高级动态有效路径过滤 功能开关 gbc_buttons.gridx = 11; FilterPanel.add(autoPathsToUrlsButtonOnUrl, gbc_buttons); // 自动刷新 未访问URL列表 gbc_buttons.gridx = 12; // 设置按钮的横坐标位置 FilterPanel.add(autoRefreshUnvisitedButtonOnUrl, gbc_buttons); // 自动递归 开关 gbc_buttons.gridx = 13; // 设置按钮的横坐标位置 FilterPanel.add(autoRecursiveButtonOnUrl, gbc_buttons); // 定时刷新按钮 gbc_buttons.gridx = 14; // 将横坐标位置移动到下一个单元格 FilterPanel.add(autoRefreshUiButtonOnUrl, gbc_buttons); // 点击按钮 点击后刷新数据 含未访问数据 gbc_buttons.gridx = 15; // 设置按钮的横坐标位置 FilterPanel.add(clickRefreshButtonOnUrl, gbc_buttons); // 添加填充以在右侧占位 GridBagConstraints gbc_rightFiller = new GridBagConstraints(); gbc_rightFiller.weightx = 1; // 使得这个组件吸收额外的水平空间 gbc_rightFiller.gridx = 16; // 位置设置为最后一个单元格 gbc_rightFiller.gridy = 0; // 第一行 gbc_rightFiller.fill = GridBagConstraints.HORIZONTAL; // 水平填充 FilterPanel.add(horizontalBlank, gbc_rightFiller); // 全部按钮 choicesComboBoxOnUrl = new JComboBox<>(new String[]{ "显示有效内容", "待处理有效内容", "显示敏感内容", "待处理敏感内容", "显示全部内容", "显示无效内容", }); GridBagConstraints gbc_btnall = new GridBagConstraints(); gbc_btnall.insets = new Insets(0, 0, 0, 5); gbc_btnall.fill = 0; gbc_btnall.gridx = 17; // 根据该值来确定是确定从左到右的顺序 gbc_btnall.gridy = 0; FilterPanel.add(choicesComboBoxOnUrl, gbc_btnall); // 检索框 urlSearchBoxOnUrl = new JTextField(15); GridBagConstraints gbc_btnSearchField = new GridBagConstraints(); gbc_btnSearchField.insets = new Insets(0, 0, 0, 5); gbc_btnSearchField.fill = 0; gbc_btnSearchField.gridx = 18; // 根据该值来确定是确定从左到右的顺序 gbc_btnSearchField.gridy = 0; urlSearchBoxOnUrl.setToolTipText("搜索URL关键字"); FilterPanel.add(urlSearchBoxOnUrl, gbc_btnSearchField); // 检索按钮 JButton searchButton = new JButton(); searchButton.setIcon(UiUtils.getImageIcon("/icon/searchButton.png")); searchButton.setToolTipText("点击搜索"); GridBagConstraints gbc_btnSearch = new GridBagConstraints(); gbc_btnSearch.insets = new Insets(0, 0, 0, 5); gbc_btnSearch.fill = 0; gbc_btnSearch.gridx = 19; // 根据该值来确定是确定从左到右的顺序 gbc_btnSearch.gridy = 0; FilterPanel.add(searchButton, gbc_btnSearch); // 功能按钮 JButton moreButton = new JButton(); moreButton.setToolTipText("更多功能 "); moreButton.setIcon(UiUtils.getImageIcon("/icon/moreButton.png", 17, 17)); GridBagConstraints gbc_btnMore = new GridBagConstraints(); gbc_btnMore.insets = new Insets(0, 0, 0, 5); gbc_btnMore.fill = 0; gbc_btnMore.gridx = 20; // 根据该值来确定是确定从左到右的顺序 gbc_btnMore.gridy = 0; FilterPanel.add(moreButton, gbc_btnMore); // 功能按钮 弹出选项 JPopupMenu moreMenu = UiUtils.createMoreMenuWithAction(); // 快速选择框的监听事件 choicesComboBoxOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try{ // 触发显示所有行事件 String searchText = urlSearchBoxOnUrl.getText(); if(searchText.isEmpty()){ searchText = ""; } String selectedOption = (String) choicesComboBoxOnUrl.getSelectedItem(); BasicUrlInfoPanel.showDataUrlTableByFilter(selectedOption, searchText); } catch (Exception ex) { stderr_println(String.format("[!] choicesComboBoxOnUrl: %s", ex.getMessage())); } } }); // 检索按钮事件监听器 searchButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String searchText = urlSearchBoxOnUrl.getText(); String selectedOption = (String) BasicUrlConfigPanel.choicesComboBoxOnUrl.getSelectedItem(); BasicUrlInfoPanel.showDataUrlTableByFilter(selectedOption, searchText); } }); //搜索框的回车事件 urlSearchBoxOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String searchText = urlSearchBoxOnUrl.getText(); String selectedOption = (String) BasicUrlConfigPanel.choicesComboBoxOnUrl.getSelectedItem(); BasicUrlInfoPanel.showDataUrlTableByFilter(selectedOption, searchText); } }); // 点击”功能“的监听事件 moreButton.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { moreMenu.show(e.getComponent(), e.getX(), e.getY()); } }); } public static String getUrlSearchBoxTextOnUrl() { return urlSearchBoxOnUrl.getText(); } public static void setUrlSearchBoxTextOnUrl(String string) { urlSearchBoxOnUrl.setText(string); } public static String getComboBoxSelectedOptionOnUrl() { return (String) BasicUrlConfigPanel.choicesComboBoxOnUrl.getSelectedItem(); } } ================================================ FILE: src/main/java/ui/BasicUrlInfoPanel.java ================================================ package ui; import burp.*; import database.*; import model.*; import sqlUtils.CommonDeleteLine; import sqlUtils.CommonFetchData; import sqlUtils.CommonUpdateStatus; import sqlUtils.Constants; import ui.MainTabRender.RunStatusCellRenderer; import ui.MainTabRender.TableHeaderWithTips; import ui.MainTabRender.HasImportantCellRenderer; import utils.*; import javax.swing.*; import javax.swing.Timer; import javax.swing.border.EmptyBorder; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.List; import java.util.concurrent.ExecutionException; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isEmptyObj; import static utils.CastUtils.isNotEmptyObj; public class BasicUrlInfoPanel extends JPanel implements IMessageEditorController { private static volatile BasicUrlInfoPanel instance; //实现单例模式 private static JTable basicUrlMsgTableUI; //表格UI private static DefaultTableModel basicUrlMsgTableModel; // 存储表格数据 private static JSplitPane msgInfoViewer; //请求消息|响应消息 二合一 面板 private static IMessageEditor requestTextEditor; //请求消息面板 private static IMessageEditor responseTextEditor; //响应消息面板 private static JEditorPane basicUrlFindInfoTextPane; //敏感信息文本面板 private static ITextEditor basicUrlRespFindUrlTEditor; //显示找到的URL private static ITextEditor basicUrlRespFindPathTEditor; //显示找到的PATH private static ITextEditor basicUrlDirectPath2UrlTEditor; //基于PATH计算出的URL private static byte[] requestsData; //请求数据,设置为全局变量,便于IMessageEditorController函数调用 private static byte[] responseData; //响应数据,设置为全局变量,便于IMessageEditorController函数调用 private static IHttpService iHttpService; //请求服务信息,设置为全局变量,便于IMessageEditorController函数调用 private static Timer basicUrlTimer; //定时器 为线程调度提供了一个简单的时间触发机制,广泛应用于需要定时执行某些操作的场景, public static BasicUrlInfoPanel getInstance() { if (instance == null) { synchronized (BasicUrlInfoPanel.class) { if (instance == null) { instance = new BasicUrlInfoPanel(); } } } return instance; } public BasicUrlInfoPanel() { // EmptyBorder 四周各有了5像素的空白边距 setBorder(new EmptyBorder(5, 5, 5, 5)); ////BorderLayout 将容器分为五个区域:北 南 东 西 中 每个区域可以放置一个组件, setLayout(new BorderLayout(0, 0)); // 主分隔面板 // JSplitPane可以包含两个(或更多)子组件,允许用户通过拖动分隔条来改变两个子组件的相对大小。 JSplitPane basicUrlMainSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); // 首行配置面板 BasicUrlConfigPanel basicUrlConfigPanel = new BasicUrlConfigPanel(); // 数据表格 initBasicUrlDataTableUI(); // JScrollPane是一个可滚动的视图容器,通常用于包裹那些内容可能超出其显示区域的组件,比如表格(JTable)、文本区(JTextArea)等。 //将包含table的滚动面板的upScrollPane 设置为另一个组件mainSplitPane的上半部分。 basicUrlMainSplitPane.setTopComponent(new JScrollPane(basicUrlMsgTableUI)); //获取下方的消息面板 JTabbedPane basicUrlMsgInfoTabs = getBasicUrlMsgTabs(); basicUrlMainSplitPane.setBottomComponent(basicUrlMsgInfoTabs); //组合最终的内容面板 add(basicUrlConfigPanel, BorderLayout.NORTH); add(basicUrlMainSplitPane, BorderLayout.CENTER); //初始化表格数据 initBasicUrlDataTableUIData(basicUrlMsgTableModel); // 初始化定时刷新页面函数 单位是毫秒 stopTimerBasicUrl(); startTimerBasicUrl(); } /** * 查询 TableLineDataModelBasicUrlSQL 初始化 table 数据 */ private void initBasicUrlDataTableUIData(DefaultTableModel tableModel) { SwingUtilities.invokeLater(new Runnable() { public void run() { //获取所有数据 ArrayList<BasicUrlTableLineDataModel> allReqAnalyseData = TableLineDataModelBasicUrlSQL.fetchUrlTableLineAll(); //将数据赋值给表模型 basicUrlPopulateModelFromList(tableModel, allReqAnalyseData); } }); } /** * 把 jsonArray 赋值到 model 中 * @param model * @param arrayList */ private void basicUrlPopulateModelFromList(DefaultTableModel model, ArrayList<BasicUrlTableLineDataModel> arrayList) { if (isEmptyObj(arrayList)) return; Iterator<BasicUrlTableLineDataModel> iterator = arrayList.iterator(); while (iterator.hasNext()) { BasicUrlTableLineDataModel apiDataModel = iterator.next(); Object[] rowData = apiDataModel.toRowDataArray(); model.addRow(rowData); } //刷新表数据模型 model.fireTableDataChanged(); } /** * 初始化Table */ private void initBasicUrlDataTableUI() { // 数据展示面板 basicUrlMsgTableModel = new DefaultTableModel(new Object[]{ "id", "source", "hash", "url", "method", "status", "length", "important", "find_info", "find_url", "find_path", "find_api", "run_status" }, 0) { @Override public boolean isCellEditable(int row, int column) { //在数据模型层面禁止编辑行数据 return false; } }; basicUrlMsgTableUI = UiUtils.creatTableUiWithTips(basicUrlMsgTableModel); // 设置列选中模式 // SINGLE_SELECTION:单行选择模式 // 使用 int selectedRow = table.getSelectedRow(); 获取行号 // MULTIPLE_INTERVAL_SELECTION: 多行选定, 可以选择Shift连续|Ctrl不连续的区间。 // SINGLE_INTERVAL_SELECTION: 多行选定,但是必须选择连续的区间 // 多选模式下调用应该调用 int[] rows = table.getSelectedRows(); 如果调用 getSelectedRow 只会获取第一个选项 //int listSelectionModel = ListSelectionModel.SINGLE_SELECTION; int listSelectionModel = ListSelectionModel.MULTIPLE_INTERVAL_SELECTION; basicUrlMsgTableUI.setSelectionMode(listSelectionModel); //自己实现TableHeader 支持请求头提示 String[] basicUrlColHeaderTooltips = new String[]{ "【请求ID】", "【请求来源】", "【消息HASH】", "【请求URL】", "【请求方法】", "【响应状态】", "【响应长度】", "【是否重要信息】", "【敏感信息数量】 == 当前URL响应中的敏感信息", "【直接URL数量】 == 当前URL响应中提取的URL", "【网站PATH数量】 == 当前网站URL响应中提取的PATH", "【拼接URL数量】 == 当前请求目录 直接组合 已提取PATH(已过滤)", "【请求上下文分析状态】(不为 Waiting 表示已提取[敏感信息|URL信息|PATH信息])" }; TableHeaderWithTips basicUrlTableHeader = new TableHeaderWithTips(basicUrlMsgTableUI.getColumnModel(), basicUrlColHeaderTooltips); basicUrlMsgTableUI.setTableHeader(basicUrlTableHeader); //添加表头排序功能 UiUtils.tableAddActionSortByHeader(basicUrlMsgTableUI, basicUrlMsgTableModel); //设置表格每列的宽度 UiUtils.tableSetColumnMaxWidth(basicUrlMsgTableUI, 0, 50); UiUtils.tableSetColumnMaxWidth(basicUrlMsgTableUI, 2, 100); UiUtils.tableSetColumnMinWidth(basicUrlMsgTableUI, 3, 300); //设置表格每列的对齐设置 List<Integer> leftColumns = Arrays.asList(3); UiUtils.tableSetColumnsAlignRender(basicUrlMsgTableUI, leftColumns); //为重要信息列添加额外的渲染 HasImportantCellRenderer havingImportantRenderer = new HasImportantCellRenderer(); int ImportantColumnIndex = 7; //重要信息列所在的列号减1 basicUrlMsgTableUI.getColumnModel().getColumn(ImportantColumnIndex).setCellRenderer(havingImportantRenderer); //为状态信息列添加额外的渲染 在最后一列,可以设置为动态值 RunStatusCellRenderer runStatusCellRenderer = new RunStatusCellRenderer(); int runStatusColumnIndex = basicUrlMsgTableUI.getColumnCount() - 1; basicUrlMsgTableUI.getColumnModel().getColumn(runStatusColumnIndex).setCellRenderer(runStatusCellRenderer); //为表格添加点击显示下方的消息动作 basicUrlTableAddActionSetMsgTabData(); //为表的每一行添加右键菜单 basicUrlTableAddRightClickMenu(basicUrlMsgTableUI, listSelectionModel); } /** * 为 table 设置每一列的 右键菜单 */ private void basicUrlTableAddRightClickMenu(JTable tableUI, int selectModel) { // 创建右键菜单 JPopupMenu popupMenu = new JPopupMenu(); JMenuItem copyUrlItem = new JMenuItem("复制请求URL", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); // 添加 copyUrlItem 事件监听器 copyUrlItem.setToolTipText("[多行]复制选定行对应的请求URL到剪贴板"); copyUrlItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行模式下的调用 if (selectModel >= 0){ int[] selectedRows = tableUI.getSelectedRows(); List<String> urls = getUrlsAtActualRows(tableUI, selectedRows); if (!urls.isEmpty()) UiUtils.copyToSystemClipboard(String.join("\n", urls)); } } }); JMenuItem deleteItem = new JMenuItem("删除数据行", UiUtils.getImageIcon("/icon/deleteButton.png", 15, 15)); // 添加 deleteItem 事件监听器 deleteItem.setToolTipText("[多行]删除选定行对应的ReqDataTable表数据"); deleteItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0){ int[] selectedRows = tableUI.getSelectedRows(); List<Integer> ids = getIdsAtActualRows(tableUI, selectedRows); // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonDeleteLine.deleteLineByIds(ReqDataTable.tableName, ids); refreshBasicUrlTableModel(false); return null; } }.execute(); } } }); JMenuItem addUrlPathToRecordPathItem = new JMenuItem("添加PATH为有效路径", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 addUrlPathToRecordPathItem 事件监听器 addUrlPathToRecordPathItem.setToolTipText("[多行]添加选定行对应的请求PATH到RecordPath表 用于计算PathTree"); addUrlPathToRecordPathItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> urlList = getUrlsAtActualRows(tableUI, selectedRows); if (!urlList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { RecordPathTable.insertOrUpdateRecordPathsBatch(urlList, 299); refreshBasicUrlTableModel(false); return null; } }.execute(); } } } }); JMenuItem genDynaPathFilterItem = new JMenuItem("基于当前URL生成动态过滤条件", UiUtils.getImageIcon("/icon/refreshButton2.png", 15, 15)); // 添加 genDynaPathFilterItem 事件监听器 genDynaPathFilterItem.setToolTipText("[多行]基于选定行对应的URL生成对应HOST的动态响应过滤条件 过滤无效响应不完善时使用"); genDynaPathFilterItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> msgHashList = getMsgHashListAtActualRows(tableUI, selectedRows); if (!msgHashList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { //1、获取 msgHash 对应 请求数据 List<ReqMsgDataModel> reqMsgDataModelList = ReqMsgDataTable.fetchMsgDataByMsgHashList(msgHashList); for (ReqMsgDataModel msgDataModel : reqMsgDataModelList){ //2、将请求数据组合成 MsgInfo HttpMsgInfo msgInfo = new HttpMsgInfo( msgDataModel.getReqUrl(), msgDataModel.getReqBytes(), msgDataModel.getRespBytes(), msgDataModel.getMsgHash() ); //3、进行动态过滤器生成 try { Map<String, Object> dynamicFilterMap = RespFieldCompareutils.generateDynamicFilterMap(msgInfo,true); IProxyScanner.urlCompareMap.put(msgInfo.getUrlInfo().getRootUrlUsual(), dynamicFilterMap); stdout_println(LOG_DEBUG, String.format("主动动态规则生成完毕:%s", CastUtils.toJsonString(dynamicFilterMap))); } catch (Exception e){ e.printStackTrace(); } } return null; } }.execute(); } } } }); //提取当前API结果的单层节点 单层节点没有办法通过PATH树计算,必须手动拼接测试 JMenuItem copySingleLayerNodeItem = new JMenuItem("提取当前PATH结果中的单层节点", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); //copySingleLayerNodeItem copySingleLayerNodeItem.setToolTipText("[多行]复制选定行对应的提取PATH中的单层(无目录)路径到剪贴板 并弹框"); copySingleLayerNodeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> msgHashList = getMsgHashListAtActualRows(tableUI, selectedRows); if (!msgHashList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { List<FindPathModel> findPathModelList = AnalyseUrlResultTable.fetchPathDataByMsgHashList(msgHashList); Set<String> pathSet = FindPathModel.getSingleLayerPathSet(findPathModelList); //直接复制到用户的粘贴板 UiUtils.copyToSystemClipboard(String.join("\n", pathSet)); //弹框让用户查看 UiUtils.showOneMsgBoxToCopy(String.join("\n",pathSet), "单层路径信息"); return null; } }.execute(); } } } }); JMenuItem calcSingleLayerNodeItemOnUrl = new JMenuItem("输入URL前缀生成单层节点对应URL", UiUtils.getImageIcon("/icon/copyIcon.png", 15, 15)); //calcSingleLayerNodeItem calcSingleLayerNodeItemOnUrl.setToolTipText("[多行]基于选定行对应的提取PATH中的单层(无目录)PATH和用户输入的URL前缀计算新的URL"); calcSingleLayerNodeItemOnUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> msgHashList = getMsgHashListAtActualRows(tableUI, selectedRows); if (!msgHashList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { UiUtils.showInputBoxAndHandle(msgHashList, "calcSingleLayerNodeItemOnUrl", "指定PATH生成单层节点URL"); return null; } }.execute(); } } } }); JMenuItem addRootUrlToBlackUrlRootItem = new JMenuItem("添加到RootUrl黑名单", UiUtils.getImageIcon("/icon/noFindUrlFromJS.png", 15, 15)); // 添加 addRootUrlToBlackUrlRootItem 事件监听器 addRootUrlToBlackUrlRootItem.setToolTipText("[多行]添加选定行对应的RootUrl到禁止扫描黑名单 CONF_BLACK_ROOT_URL"); addRootUrlToBlackUrlRootItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel>=0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> urlList = getUrlsAtActualRows(tableUI, selectedRows); if (!urlList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { //获取所有URL的HOST列表 Set<String> set = new HashSet<>(); for (String url: urlList){set.add(new HttpUrlInfo(url).getRootUrlUsual());} ArrayList<String> rootUrls = new ArrayList<>(set); // 合并 rootUrls 到 BurpExtender.CONF_BLACK_ROOT_URL 保持唯一性 BurpExtender.CONF_BLACK_ROOT_URL =CastUtils.listAddList(rootUrls, BurpExtender.CONF_BLACK_ROOT_URL); //保存Json RuleConfigPanel.saveConfigToDefaultJson(); //2、删除 Root URL 对应的 结果数据 int countReq = CommonDeleteLine.deleteLineByUrlLikeRootUrls(ReqDataTable.tableName, rootUrls); int countUrl = CommonDeleteLine.deleteLineByRootUrls(AnalyseUrlResultTable.tableName, rootUrls); int countHost = CommonDeleteLine.deleteLineByRootUrls(AnalyseHostResultTable.tableName, rootUrls); stdout_println(LOG_DEBUG, String.format("delete ReqData Count:%s , delete Analyse Host Result Count:%s, delete Analyse Url Result Count:%s", countReq, countHost, countUrl)); //3、刷新表格 refreshBasicUrlTableModel(false); return null; } }.execute(); } } } }); //标记选中消息 状态为等待自动处理 Constants.ANALYSE_WAIT JMenuItem setRunStatusAnalyseWaitItem = new JMenuItem("修改状态为等待自动分析", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 setRunStatusAnalyseWaitItem 事件监听器 setRunStatusAnalyseWaitItem.setToolTipText("[多行]修改所选消息状态为等待自动分析"); setRunStatusAnalyseWaitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> msgHashList = getMsgHashListAtActualRows(tableUI, selectedRows); if (!msgHashList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonUpdateStatus.updateStatusByMsgHashList(ReqDataTable.tableName, msgHashList, Constants.ANALYSE_WAIT); return null; } }.execute(); } } } }); //标记选中消息 状态为自动分析完成 Constants.ANALYSE_END JMenuItem setRunStatusAnalyseEndItem = new JMenuItem("修改状态为等待手动验证", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 setRunStatusAnalyseEndItem 事件监听器 setRunStatusAnalyseEndItem.setToolTipText("[多行]修改所选消息状态为等待手动验证"); setRunStatusAnalyseEndItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> msgHashList = getMsgHashListAtActualRows(tableUI, selectedRows); if (!msgHashList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonUpdateStatus.updateStatusByMsgHashList(ReqDataTable.tableName, msgHashList, Constants.ANALYSE_END); return null; } }.execute(); } } } }); //标记选中消息 状态为手动分析完成 Constants.HANDLE_END JMenuItem setRunStatusHandleEndItem = new JMenuItem("修改状态为手动验证完成", UiUtils.getImageIcon("/icon/customizeIcon.png", 15, 15)); // 添加 setRunStatusHandleEndItem 事件监听器 setRunStatusHandleEndItem.setToolTipText("[多行]修改所选消息状态为手动验证完成"); setRunStatusHandleEndItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //多行选定模式 if (selectModel >= 0) { int[] selectedRows = tableUI.getSelectedRows(); List<String> msgHashList = getMsgHashListAtActualRows(tableUI, selectedRows); if (!msgHashList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { CommonUpdateStatus.updateStatusByMsgHashList(ReqDataTable.tableName, msgHashList, Constants.HANDLE_END); return null; } }.execute(); } } } }); //复制URL popupMenu.add(copyUrlItem); //删除航数据 popupMenu.add(deleteItem); //添加到有效PATHTree popupMenu.add(addUrlPathToRecordPathItem); //更新数据处理状态 popupMenu.add(setRunStatusAnalyseWaitItem); popupMenu.add(setRunStatusAnalyseEndItem); popupMenu.add(setRunStatusHandleEndItem); //添加Url对应的RootUrl到黑名单 popupMenu.add(addRootUrlToBlackUrlRootItem); //生成动态过滤条件 popupMenu.add(genDynaPathFilterItem); //仅复制单层路径 popupMenu.add(copySingleLayerNodeItem); //输入指定根URL 计算单层路径的根URL popupMenu.add(calcSingleLayerNodeItemOnUrl); // 将右键菜单添加到表格 tableUI.setComponentPopupMenu(popupMenu); } /** * 初始化任务定时器 */ public static void initTimerBasicUrl() { // 创建一个每 delay 秒触发一次的定时器 int delay = BasicUrlConfigPanel.timerDelayOnUrl * 1000; basicUrlTimer = new Timer(delay, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (IProxyScanner.autoRefreshUiIsOpen && basicUrlTimer.isRunning()) { try{ stdout_println(LOG_DEBUG, String.format("[*] Timer Refresh UI Basic Url On [%s]", delay)); // 调用刷新表格的方法 BasicUrlInfoPanel.getInstance().refreshBasicUrlTableModel(false); //建议JVM清理内存 System.gc(); } catch (Exception exception){ stderr_println(LOG_ERROR, String.format("[!] Timer Refresh UI Basic Url Error: %s", exception.getMessage()) ); } } } }); stdout_println(LOG_DEBUG, "[*] Init Timer Basic Url"); } // 启动定时器 public static void startTimerBasicUrl() { if (basicUrlTimer != null) { if (!basicUrlTimer.isRunning()){ basicUrlTimer.start(); stdout_println(LOG_DEBUG, "[*] Start Timer Basic Url"); } } else { initTimerBasicUrl(); } } // 定义一个方法来停止定时器 public static void stopTimerBasicUrl() { if (basicUrlTimer != null && basicUrlTimer.isRunning()) { basicUrlTimer.stop(); stdout_println(LOG_DEBUG, "[*] Stop Timer Basic Url"); } } /** * 初始化创建表格下方的消息内容面板 */ private JTabbedPane getBasicUrlMsgTabs() { IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks(); // 将 结果消息面板 添加到窗口下方 JTabbedPane tabs = new JTabbedPane(); // 请求的面板 requestTextEditor = callbacks.createMessageEditor(this, false); // 响应的面板 responseTextEditor = callbacks.createMessageEditor(this, false); //添加请求和响应信息面板到一个面板中 msgInfoViewer = new JSplitPane(1); msgInfoViewer.setLeftComponent(requestTextEditor.getComponent()); msgInfoViewer.setRightComponent(responseTextEditor.getComponent()); //敏感信息结果面板 使用 "text/html" 可用于 html 渲染颜色 basicUrlFindInfoTextPane = new JEditorPane("text/html", ""); JScrollPane basicUrlFindInfoTextScrollPane = new JScrollPane(basicUrlFindInfoTextPane); basicUrlFindInfoTextScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); // 提取到URL的面板 basicUrlRespFindUrlTEditor = callbacks.createTextEditor(); basicUrlRespFindPathTEditor = callbacks.createTextEditor(); basicUrlDirectPath2UrlTEditor = callbacks.createTextEditor(); tabs.addTab("MsgInfoViewer",null, msgInfoViewer, "原始请求响应信息"); //同时显示原始请求+原始响应 tabs.addTab("RespFindInfo",null, basicUrlFindInfoTextScrollPane, "基于当前响应体提取的敏感信息"); //显示提取的信息 tabs.addTab("RespFindUrl",null, basicUrlRespFindUrlTEditor.getComponent(), "基于当前响应体提取的URL"); //显示在这个URL中找到的PATH tabs.addTab("RespFindPath",null, basicUrlRespFindPathTEditor.getComponent(), "基于当前响应体提取的PATH"); //显示在这个URL中找到的PATH tabs.addTab("DirectPath2Url",null, basicUrlDirectPath2UrlTEditor.getComponent(), "基于当前请求URL目录 拼接 提取的PATH"); //显示在这个URL中找到的PATH return tabs; } /** * 清空当前Msg tabs中显示的数据 */ public static void clearBasicUrlMsgTabsData() { iHttpService = null; // 清空当前显示的项 requestsData = null; responseData = null; requestTextEditor.setMessage(new byte[0], true); // 清空请求编辑器 responseTextEditor.setMessage(new byte[0], false); // 清空响应编辑器 basicUrlFindInfoTextPane.setText(""); basicUrlRespFindUrlTEditor.setText(new byte[0]); basicUrlRespFindPathTEditor.setText(new byte[0]); basicUrlDirectPath2UrlTEditor.setText(new byte[0]); } /** * 鼠标点击或键盘移动到行时,自动更新下方的msgTab */ private void basicUrlTableAddActionSetMsgTabData() { //为表格 添加 鼠标监听器 //获取点击事件发生时鼠标所在行的索引 根据选中行的索引来更新其他组件的状态或内容。 basicUrlMsgTableUI.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // 只有在双击时才执行 //if (e.getClickCount() == 2) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { int row = basicUrlMsgTableUI.rowAtPoint(e.getPoint()); if (row >= 0) { updateComponentsBasedOnSelectedRow(row); } }catch (Exception ef) { BurpExtender.getStderr().println("[-] Error click table: " + basicUrlMsgTableUI.rowAtPoint(e.getPoint())); ef.printStackTrace(BurpExtender.getStderr()); } } }); } }); //为表格 添加 键盘按键释放事件监听器 //获取按键事件发生时鼠标所在行的索引 根据选中行的索引来更新其他组件的状态或内容。 basicUrlMsgTableUI.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { //关注向上 和向下 的按键事件 if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { int row = basicUrlMsgTableUI.getSelectedRow(); if (row >= 0) { updateComponentsBasedOnSelectedRow(row); } }catch (Exception ef) { BurpExtender.getStderr().println("[-] Error KeyEvent.VK_UP OR KeyEvent.VK_DOWN: "); ef.printStackTrace(BurpExtender.getStderr()); } } }); } } }); } //记录当前所处的行号 private String recordMsgHash = null; /** * 更新表格行对应的下方数据信息 * @param row */ private void updateComponentsBasedOnSelectedRow(int row) { //清理下方数据内容 clearBasicUrlMsgTabsData(); //动态设置UI宽度 msgViewerAutoSetSplitCenter(); //1、获取当前行的msgHash String currentMsgHash = null; try { //msgHash = (String) table.getModel().getValueAt(row, 1); //stdout_println(String.format("当前点击第[%s]行 获取 msgHash [%s]",row, msgHash)); //实现排序后 视图行 数据的正确获取 currentMsgHash = UiUtils.getStringAtActualRow(basicUrlMsgTableUI, row, 2); } catch (Exception e) { stderr_println(LOG_ERROR, String.format("[!] Table get Value At Row [%s] Error:%s", row, e.getMessage() )); } //更新之前 msgHash Date为 处理中 注意 要修改 ReqDataTable if (isNotEmptyObj(recordMsgHash)){ //当原来的状态是手动处理中时,就修改状态为处理完成 CommonUpdateStatus.updateStatusWhenStatusByMsgHash(ReqDataTable.tableName, recordMsgHash, Constants.HANDLE_END, Constants.HANDLE_ING); } //更新当前 msgHash Date为 处理中 if (isNotEmptyObj(currentMsgHash) ){ //当原来的状态是自动分析完成时,就修改请求状态为手工处理中 CommonUpdateStatus.updateStatusWhenStatusByMsgHash(ReqDataTable.tableName, currentMsgHash, Constants.HANDLE_ING, Constants.ANALYSE_END); recordMsgHash = currentMsgHash; } else { return; } //根据 msgHash值 查询对应的请求体响应体数据 ReqMsgDataModel msgData = ReqMsgDataTable.fetchMsgDataByMsgHash(currentMsgHash); if (CastUtils.isNotEmptyObj(msgData)) { String requestUrl = msgData.getReqUrl(); requestsData = msgData.getReqBytes(); responseData = msgData.getRespBytes(); //显示在UI中 iHttpService = BurpHttpUtils.getHttpService(requestUrl); requestTextEditor.setMessage(requestsData, false); responseTextEditor.setMessage(responseData, false); } else { stderr_println(LOG_ERROR, String.format("[!] fetch Msg Data By MsgHash [%s] is null", currentMsgHash)); return; } //根据 msgHash值 查询api分析结果数据 BasicUrlTableTabDataModel tabDataModel = AnalyseUrlResultTable.fetchUrlResultByMsgHash(currentMsgHash); if (tabDataModel != null) { //格式化为可输出的类型 String findInfo = CastUtils.infoJsonArrayFormatHtml(tabDataModel.getFindInfo()); String findUrl = CastUtils.stringJsonArrayFormat(tabDataModel.getFindUrl()); String findPath = CastUtils.stringJsonArrayFormat(tabDataModel.getFindPath()); String findApi = CastUtils.stringJsonArrayFormat(tabDataModel.getFindApi()); basicUrlFindInfoTextPane.setText(findInfo); basicUrlRespFindUrlTEditor.setText(findUrl.getBytes()); basicUrlRespFindPathTEditor.setText(findPath.getBytes()); basicUrlDirectPath2UrlTEditor.setText(findApi.getBytes()); } } /** * 当左边极小时 设置请求体和响应体各占一半空间 */ private void msgViewerAutoSetSplitCenter() { SwingUtilities.invokeLater(new Runnable() { public void run() { if (msgInfoViewer.getLeftComponent().getWidth() <= 20) msgInfoViewer.setDividerLocation(msgInfoViewer.getParent().getWidth() / 2); } }); } /** * 基于过滤选项 和 搜索框内容 显示结果 * @param selectOption * @param searchText */ public static void showDataUrlTableByFilter(String selectOption, String searchText) { // 在后台线程获取数据,避免冻结UI new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { // 构建一个新的表格模型 basicUrlMsgTableModel.setRowCount(0); // 获取数据库中的所有ApiDataModels ArrayList<BasicUrlTableLineDataModel> apiDataModels; switch (selectOption) { case "显示有效内容": apiDataModels = TableLineDataModelBasicUrlSQL.fetchUrlTableLineHasInfoOrUri(); break; case "待处理有效内容": apiDataModels = TableLineDataModelBasicUrlSQL.fetchUrlTableLineHasInfoOrUriNotHandle(); break; case "显示敏感内容": apiDataModels = TableLineDataModelBasicUrlSQL.fetchUrlTableLineHasInfo(); break; case "待处理敏感内容": apiDataModels = TableLineDataModelBasicUrlSQL.fetchUrlTableLineHasInfoNotHandle(); break; case "显示无效内容": apiDataModels = TableLineDataModelBasicUrlSQL.fetchUrlTableLineAnyIsNull(); break; case "显示全部内容": default: apiDataModels = TableLineDataModelBasicUrlSQL.fetchUrlTableLineAll(); break; } // 遍历apiDataModelMap for (BasicUrlTableLineDataModel apiDataModel : apiDataModels) { String url = apiDataModel.getReqUrl(); //是否包含关键字,当输入了关键字时,使用本函数再次进行过滤 if (url.toLowerCase().contains(searchText.toLowerCase())) { Object[] rowData = apiDataModel.toRowDataArray(); //model.insertRow(0, rowData); //插入到首行 basicUrlMsgTableModel.insertRow(basicUrlMsgTableModel.getRowCount(), rowData); //插入到最后一行 } } return null; } @Override protected void done() { try { get(); } catch (InterruptedException | ExecutionException e) { stderr_println(String.format("[!] showFilter error: %s", e.getMessage())); //e.printStackTrace(BurpExtender.getStderr()); } } }.execute(); } /** * 定时刷新表数据 */ public void refreshBasicUrlTableModel(boolean checkAutoRefreshButtonStatus) { //设置已加入数据库的数量 BasicUrlConfigPanel.lbTaskerCountOnUrl.setText(String.valueOf(CommonFetchData.fetchTableCounts(ReqDataTable.tableName))); //设置成功分析的数量 BasicUrlConfigPanel.lbAnalysisEndCountOnUrl.setText(String.valueOf(CommonFetchData.fetchTableCountsByStatus(Constants.ANALYSE_END))); // 获取搜索框和搜索选项 final String searchText = BasicUrlConfigPanel.getUrlSearchBoxTextOnUrl(); final String selectedOption = BasicUrlConfigPanel.getComboBoxSelectedOptionOnUrl(); // 使用SwingWorker来处理数据更新,避免阻塞EDT SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { try { // 执行耗时的数据操作 BasicUrlInfoPanel.showDataUrlTableByFilter(selectedOption, searchText.isEmpty() ? "" : searchText); } catch (Exception e) { // 处理数据操作中可能出现的异常 System.err.println("Error while updating data: " + e.getMessage()); e.printStackTrace(); } return null; } @Override protected void done() { // 更新UI组件 try { // 更新UI组件 SwingUtilities.invokeLater(() -> { try { basicUrlMsgTableModel.fireTableDataChanged(); // 通知模型数据发生了变化 } catch (Exception e) { // 处理更新UI组件时可能出现的异常 System.err.println("Error while updating UI: " + e.getMessage()); e.printStackTrace(); } }); } catch (Exception e) { // 处理在done()方法中可能出现的异常,例如InterruptedException或ExecutionException System.err.println("Error in done method: " + e.getMessage()); e.printStackTrace(); } } }; worker.execute(); } @Override public byte[] getRequest() { return requestsData; } @Override public byte[] getResponse() { return responseData; } @Override public IHttpService getHttpService() { return iHttpService; } private List<String> getUrlsAtActualRows(JTable tableUI, int[] selectedRows) { return UiUtils.getStringListAtActualRows(tableUI, selectedRows, 3); } private List<String> getMsgHashListAtActualRows(JTable tableUI,int[] selectedRows) { return UiUtils.getStringListAtActualRows(tableUI, selectedRows, 2); } private List<Integer> getIdsAtActualRows(JTable tableUI, int[] selectedRows) { return UiUtils.getIdsAtActualRows(tableUI, selectedRows, 0); } public static void clearBasicUrlMsgTableModel(){ basicUrlMsgTableModel.setRowCount(0); } } ================================================ FILE: src/main/java/ui/FingerTabRender/ButtonEditor.java ================================================ package ui.FingerTabRender; import burp.BurpExtender; import model.FingerPrintRule; import ui.RuleConfigPanel; import utils.ConfigUtils; import utils.UiUtils; import javax.swing.*; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ButtonEditor extends AbstractCellEditor implements TableCellEditor { private final JPanel buttonsPanel; private final JButton editButton; private final JButton deleteButton; private final JButton toggleButton; private final Icon EDIT_ICON = UiUtils.getImageIcon("/icon/editButton.png"); private final Icon DELETE_ICON = UiUtils.getImageIcon("/icon/deleteButton.png"); private final Icon openIcon = UiUtils.getImageIcon("/icon/openButtonIcon.png"); private final Icon closeIcon = UiUtils.getImageIcon("/icon/shutdownButtonIcon.png"); public ButtonEditor(JTable sourceTable) { toggleButton = new JButton(); //开关按钮 toggleButton.setIcon(openIcon); editButton = new JButton(); //编辑按钮 editButton.setIcon(EDIT_ICON); deleteButton = new JButton(); //删除按钮 deleteButton.setIcon(DELETE_ICON); editButton.setPreferredSize(new Dimension(17, 17)); deleteButton.setPreferredSize(new Dimension(17, 17)); toggleButton.setPreferredSize(new Dimension(17, 17)); toggleButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int viewRow = sourceTable.getSelectedRow(); // 获取视图中选中的行 if (viewRow < 0) { return; // 如果没有选中任何行,就不执行编辑操作 } int modelRow = sourceTable.convertRowIndexToModel(viewRow); // 转换为模型索引 int dataIndex = RuleConfigPanel.tableToModelIndexMap.get(modelRow); // 使用模型索引查找原始数据列表中的索引 RuleConfigPanel.editingRow = dataIndex; // 更新编辑行索引为原始数据列表中的索引 FingerPrintRule rule = BurpExtender.fingerprintRules.get(dataIndex); if (rule.getIsOpen()) { toggleButton.setIcon(closeIcon); rule.setOpen(false); } else { toggleButton.setIcon(openIcon); rule.setOpen(true); } fireEditingStopped(); sourceTable.repaint(); } }); // 在编辑按钮的 ActionListener 中添加以下代码来设置 matchKeyField 的值 editButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int viewRow = sourceTable.getSelectedRow(); // 获取视图中选中的行 if (viewRow < 0) { return; // 如果没有选中任何行,就不执行编辑操作 } int modelRow = sourceTable.convertRowIndexToModel(viewRow); // 转换为模型索引 //加载规则编辑面板 RuleConfigPanel.showRuleEditorPanel(modelRow); /* //跟随标签显示 优化版本 Point btnLocation = ((JButton) e.getSource()).getLocationOnScreen(); // 计算面板的左上角新位置 int newX = btnLocation.x - fingerConfigTab.editRulePanel.getWidth() - 20; //水平方向,从左向右增加。 int newY = btnLocation.y + ((JButton) e.getSource()).getHeight(); //垂直方向,从上向下增加。 // 获取容器的大小 Dimension containerSize = sourceTable.getSize(); // 获取面板的大小 Dimension panelSize = fingerConfigTab.editRulePanel.getPreferredSize(); // 检查面板是否会超出容器的底部边界 if (newY + panelSize.height > containerSize.height){ // 如果会超出底部边界,则将面板移到按钮上方 newY = btnLocation.y - panelSize.height - 50; } */ fireEditingStopped(); // 停止表格的编辑状态 } }); deleteButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { fireEditingStopped(); // 确保停止编辑状态 int viewRow = sourceTable.getSelectedRow(); // 获取视图中选中的行 if (viewRow < 0) { return; // 如果没有选中任何行,就不执行删除操作 } int modelRow = sourceTable.convertRowIndexToModel(viewRow); // 转换为模型索引 int dataIndex = RuleConfigPanel.tableToModelIndexMap.get(modelRow); // 获取实际数据索引 // 删除数据源中的数据 BurpExtender.fingerprintRules.remove(dataIndex); // 更新映射 RuleConfigPanel.tableToModelIndexMap.remove(modelRow); // 由于删除了一个元素,需要更新所有后续元素的索引 for (int i = modelRow; i < RuleConfigPanel.tableToModelIndexMap.size(); i++) { RuleConfigPanel.tableToModelIndexMap.set(i, RuleConfigPanel.tableToModelIndexMap.get(i) - 1); } // 删除表格模型中的数据 ((DefaultTableModel) sourceTable.getModel()).removeRow(viewRow); // 在删除行之后,重新验证和重绘表格 sourceTable.revalidate(); sourceTable.repaint(); //重新加载系统CONF_配置 ConfigUtils.reloadConfigArrayListFromRules(BurpExtender.fingerprintRules); } }); //把三个按钮放在一个小面板中 buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 0)); buttonsPanel.add(toggleButton); buttonsPanel.add(editButton); buttonsPanel.add(deleteButton); buttonsPanel.setBorder(BorderFactory.createEmptyBorder()); } @Override public Object getCellEditorValue() { return null; } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { return buttonsPanel; } } ================================================ FILE: src/main/java/ui/FingerTabRender/ButtonRenderer.java ================================================ package ui.FingerTabRender; import burp.BurpExtender; import model.FingerPrintRule; import ui.RuleConfigPanel; import utils.UiUtils; import javax.swing.*; import javax.swing.table.TableCellRenderer; import java.awt.*; public class ButtonRenderer extends JPanel implements TableCellRenderer { private static final Icon EDIT_ICON = UiUtils.getImageIcon("/icon/editButton.png"); private static final Icon DELETE_ICON = UiUtils.getImageIcon("/icon/deleteButton.png"); private static final Icon OPEN_ICON = UiUtils.getImageIcon("/icon/openButtonIcon.png"); private static final Icon CLOSE_ICON = UiUtils.getImageIcon("/icon/shutdownButtonIcon.png"); private final JButton editButton; private final JButton deleteButton; private final JButton toggleButton; public ButtonRenderer() { setLayout(new FlowLayout(FlowLayout.CENTER, 5, 0)); editButton = createButton(EDIT_ICON); deleteButton = createButton(DELETE_ICON); toggleButton = createButton(OPEN_ICON); add(toggleButton); add(editButton); add(deleteButton); setOpaque(true); // 设置为不透明,这样背景颜色变更才会生效 } private JButton createButton(Icon icon) { JButton button = new JButton(icon); button.setPreferredSize(new Dimension(17, 17)); button.setMargin(new Insets(0, 0, 0, 0)); // 设置按钮边距为0 // 设置按钮边界为透明,以免在不同的LookAndFeel下显示不一致 button.setBorder(BorderFactory.createEmptyBorder()); button.setContentAreaFilled(false); return button; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 注意:这里使用传入的 `row` 参数,而不是 `table.getSelectedRow()` int modelRow = table.convertRowIndexToModel(row); // 转换为模型索引 int dataIndex = RuleConfigPanel.tableToModelIndexMap.get(modelRow); // 使用模型索引查找原始数据列表中的索引 FingerPrintRule rule = BurpExtender.fingerprintRules.get(dataIndex); if (rule.getIsOpen()) { toggleButton.setIcon(OPEN_ICON); // 如果规则是打开状态,设置为打开图标 } else { toggleButton.setIcon(CLOSE_ICON); // 如果规则是关闭状态,设置为关闭图标 } // 设置背景色,根据是否选中来决定 if (isSelected) { setBackground(table.getSelectionBackground()); } else { setBackground(table.getBackground()); } // 重要:这里要返回包含正确图标的 toggleButton return this; } } ================================================ FILE: src/main/java/ui/FingerTabRender/CenterRenderer.java ================================================ package ui.FingerTabRender; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; public class CenterRenderer extends DefaultTableCellRenderer { public CenterRenderer() { setHorizontalAlignment(JLabel.CENTER); } } ================================================ FILE: src/main/java/ui/FingerTabRender/HeaderIconTypeRenderer.java ================================================ package ui.FingerTabRender; import utils.UiUtils; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; public class HeaderIconTypeRenderer extends DefaultTableCellRenderer { // 预加载图标 private static final Icon FILTER_ICON = UiUtils.getImageIcon("/icon/filterIcon.png"); public HeaderIconTypeRenderer() { super(); setHorizontalAlignment(JLabel.CENTER); //仅需设置一次 设置水平对齐方式 setHorizontalTextPosition(JLabel.LEFT); //设置文本相对于图标的水平位置 setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //更改鼠标光标形状 设置为手形 } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 调用super方法来保留原始行为 super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // 根据列设置图标 if (column == 1) { setIcon(FILTER_ICON); } else { setIcon(null); setHorizontalAlignment(JLabel.LEADING); // 文本对齐方式恢复默认 } // Since we're modifying the renderer itself, return 'this' return this; } } ================================================ FILE: src/main/java/ui/FingerTabRender/LeftRenderer.java ================================================ package ui.FingerTabRender; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; public class LeftRenderer extends DefaultTableCellRenderer { public LeftRenderer() { setHorizontalAlignment(JLabel.LEFT); } } ================================================ FILE: src/main/java/ui/MainTabRender/ColorInfoCellRenderer.java ================================================ package ui.MainTabRender; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; // 自定义渲染器类 public class ColorInfoCellRenderer extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; public ColorInfoCellRenderer() { setHorizontalAlignment(CENTER); // 设置居中 } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); Integer infoNum = (Integer) value; if (infoNum != null) { if (infoNum > 0) { setBackground(Color.GREEN); // 状态为 true 时的背景颜色 } else { setBackground(Color.RED); // 状态为 false 时的背景颜色 } } else { setBackground(table.getBackground()); // 如果值为空或不是布尔值,则使用默认背景色 } return this; } } ================================================ FILE: src/main/java/ui/MainTabRender/HasImportantCellRenderer.java ================================================ package ui.MainTabRender; import utils.UiUtils; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; public class HasImportantCellRenderer extends DefaultTableCellRenderer { // 预加载并缓存图标 private final Icon importantIcon = UiUtils.getImageIcon("/icon/importantButtonIcon.png", 15, 15); //private final Icon notImportantIcon = UiUtils.getImageIcon("/icon/normalIcon.png", 15, 15); public HasImportantCellRenderer() { setHorizontalAlignment(CENTER); // 设置居中 } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 调用父类以保留默认行为 super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // 根据单元格值设置相应图标 if (value instanceof Boolean) { if ((Boolean) value){ setIcon(importantIcon); // 设置文本为空,因为我们只显示图标 setText(""); }else{ setIcon(null); setText("NO"); } } else { setIcon(null); setText((String)value); // 如果值不是布尔类型,则不显示图标 } return this; } } ================================================ FILE: src/main/java/ui/MainTabRender/RunStatusCellRenderer.java ================================================ package ui.MainTabRender; import sqlUtils.Constants; import utils.UiUtils; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; public class RunStatusCellRenderer extends DefaultTableCellRenderer { // 预加载并缓存图标 private final Icon pendingIcon = UiUtils.getImageIcon("/icon/convenientOperationIcon.png", 15, 15); private final Icon handlingIcon = UiUtils.getImageIcon("/icon/searchButton.png", 15, 15); private final Icon handledIcon = UiUtils.getImageIcon("/icon/findUrlFromJS.png", 15, 15); public RunStatusCellRenderer() { setHorizontalAlignment(CENTER); // 设置居中 } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 调用父类以保留默认行为 super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // 根据单元格值设置相应图标 if (value instanceof String) { String stringValue = (String) value; if (Constants.HANDLE_WAIT.equals(stringValue)|| Constants.ANALYSE_END.equals(stringValue)) { setIcon(pendingIcon); setText(""); // 设置文本为空,因为我们只显示图标 } else if (Constants.HANDLE_ING.equals(stringValue)) { setIcon(handlingIcon); setText(""); // 设置文本为空,因为我们只显示图标 } else if (Constants.HANDLE_END.equals(stringValue)) { setIcon(handledIcon); setText(""); // 设置文本为空,因为我们只显示图标 } else { setIcon(null); setText(stringValue); // 显示字符串值 } } else { // 其他类型的值保持不变 setIcon(null); setText((String)value); } return this; } } ================================================ FILE: src/main/java/ui/MainTabRender/TableHeaderWithTips.java ================================================ package ui.MainTabRender; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumnModel; import java.awt.event.MouseEvent; public class TableHeaderWithTips extends JTableHeader { private final String[] tooltips; public TableHeaderWithTips(TableColumnModel columnModel, String[] tooltips) { super(columnModel); // do everything a normal JTableHeader does this.tooltips = tooltips; // plus extra data } @Override public String getToolTipText(MouseEvent e) { int index = columnModel.getColumnIndexAtX(e.getPoint().x); int realIndex = columnModel.getColumn(index).getModelIndex(); // 检查索引是否在 tooltips 数组的有效范围内 if (realIndex >= 0 && realIndex < tooltips.length) { return tooltips[realIndex]; } else { return null; } } } ================================================ FILE: src/main/java/ui/RuleConfigPanel.java ================================================ package ui; import EnumType.LocationType; import EnumType.MatchType; import EnumType.RiskLevel; import burp.BurpExtender; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONWriter; import sqlUtils.Constants; import model.FingerPrintRule; import model.FingerPrintRulesWrapper; import ui.FingerTabRender.*; import ui.MainTabRender.TableHeaderWithTips; import utils.*; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.*; import static utils.BurpPrintUtils.*; public class RuleConfigPanel extends JPanel { private static DefaultTableModel ruleTableModel; //DefaultTableModel 是 Java Swing 库中的一个类,通常用于表格组件(如 JTable)的数据模型。它管理着表格的数据、列名以及对数据的各种操作(如添加行、删除行等)。 private static JTable ruleTableUI; private static JDialog editRulePanel; // 新增:编辑面板 public static Integer editingRow = null; private static JTextArea matchKeysField; private static JTextField describeField; private static JComboBox<Boolean> isImportantField; private static JComboBox<String> searchMethodField; private static JComboBox<String> locationField; private static JComboBox<String> typeField; private static JComboBox<String> accuracyFiled; public static List<Integer> tableToModelIndexMap = new ArrayList<>(); public static Set<String> uniqueTypes = new LinkedHashSet<>(); public static final String String_All_Type = "全部类型"; private static volatile RuleConfigPanel instance; //实现单例模式 public static RuleConfigPanel getInstance() { if (instance == null) { synchronized (RuleConfigPanel.class) { if (instance == null) { instance = new RuleConfigPanel(); } } } return instance; } public RuleConfigPanel() { //在FingerConfigTab类中设置该容器的默认布局为BorderLayout,为后续向容器中添加组件并控制这些组件的布局奠定了基础。这一步是构建用户界面时组织和排列组件的关键步骤之一。 setLayout(new BorderLayout()); JPanel toolbar = new JPanel(); toolbar.setLayout(new BorderLayout()); // 创建一个面板来放置放在最左边的按钮 JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 新增按钮 JButton addButton = new JButton("新增"); addButton.setIcon(UiUtils.getImageIcon("/icon/addButtonIcon.png")); addButton.setToolTipText("新增指纹规则"); leftPanel.add(addButton); // 居中,设置指纹识别的开关按钮 JPanel centerPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); // 调整 centerPanel 的位置 int leftPadding = 150; // 调整这个值来改变左边距 centerPanel.setBorder(new EmptyBorder(0, leftPadding, 0, 0)); // 创建一个面板来放置放在最右边的按钮 JPanel rightPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 所有指纹和重点指纹的选择 // 全部按钮 JButton showAllButton = new JButton("全部"); showAllButton.setToolTipText("显示全部规则"); // 检索框 JTextField searchField = new JTextField(15); searchField.setToolTipText("筛选规则关键字"); // 检索按钮 JButton searchButton = new JButton(); searchButton.setIcon(UiUtils.getImageIcon("/icon/searchButton.png")); searchButton.setToolTipText("开始筛选"); // 便捷操作 JButton convenientOperationButton = new JButton(); convenientOperationButton.setIcon(UiUtils.getImageIcon("/icon/convenientOperationIcon.png")); convenientOperationButton.setToolTipText("便捷操作"); // 便捷操作按钮点击后弹出选择菜单 JPopupMenu convenientOperationMenu = new JPopupMenu("便捷操作"); JMenuItem aboveHighItem = new JMenuItem("只开启精确率为高"); JMenuItem aboveMediumItem = new JMenuItem("只开启精确率为高、中"); JMenuItem aboveLowItem = new JMenuItem("只开启精确率为高、中、低"); convenientOperationMenu.add(aboveHighItem); convenientOperationMenu.add(aboveMediumItem); convenientOperationMenu.add(aboveLowItem); // 更多功能按钮 JButton moreFunctionsButton = new JButton(); moreFunctionsButton.setIcon(UiUtils.getImageIcon("/icon/moreButton.png")); moreFunctionsButton.setToolTipText("更多功能"); //更多功能按钮弹出的选项 JPopupMenu popupMenu = new JPopupMenu("更多功能"); JMenuItem saveItem = new JMenuItem("保存"); saveItem.setIcon(UiUtils.getImageIcon("/icon/saveItem.png")); saveItem.setToolTipText("保存当前规则到文件"); JMenuItem importItem = new JMenuItem("导入"); importItem.setIcon(UiUtils.getImageIcon("/icon/importItem.png")); importItem.setToolTipText("从外部文件导入规则"); JMenuItem exportItem = new JMenuItem("导出"); exportItem.setIcon(UiUtils.getImageIcon("/icon/exportItem.png")); exportItem.setToolTipText("导出当前规则到文件"); JMenuItem resetItem = new JMenuItem("重置"); resetItem.setIcon(UiUtils.getImageIcon("/icon/resetItem.png")); resetItem.setToolTipText("初始为插件内置规则"); popupMenu.add(saveItem); popupMenu.add(importItem); popupMenu.add(exportItem); popupMenu.add(resetItem); // 布局 rightPanel.add(showAllButton); rightPanel.add(searchField); rightPanel.add(searchButton); rightPanel.add(convenientOperationButton); rightPanel.add(moreFunctionsButton); // 将左右面板添加到总的toolbar面板中 toolbar.add(leftPanel, BorderLayout.WEST); toolbar.add(centerPanel, BorderLayout.CENTER); toolbar.add(rightPanel, BorderLayout.EAST); // 点击“全部“按钮的监听事件 showAllButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清除表格的所有行 ruleTableModel.setRowCount(0); // 清空映射 tableToModelIndexMap.clear(); // 重新添加匹配搜索文本的行,并更新映射 int counter=1; for (int ruleIndex = 0; ruleIndex < BurpExtender.fingerprintRules.size(); ruleIndex++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(ruleIndex); // 保存当前规则在模型列表中的索引 tableToModelIndexMap.add(ruleIndex); ruleTableModel.addRow(new Object[]{ counter, //行号 rule.getType(), //规则类型 rule.getDescribe(), //规则描述 rule.getIsImportant(), //规则重要性 rule.getAccuracy(), //危险级别 rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 3个操作按钮 }); counter ++; } } }); // 输入”检索区域“的监听事件 searchField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String searchText = searchField.getText(); // 获取用户输入的搜索文本 // 清除表格的所有行 ruleTableModel.setRowCount(0); // 清空映射 tableToModelIndexMap.clear(); // 重新添加匹配搜索文本的行,并更新映射 int counter=1; for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); String matchKeysStr = CastUtils.listToString(rule.getMatchKeys()); if (matchKeysStr.contains(searchText.toLowerCase())){ // 保存当前规则在模型列表中的索引 tableToModelIndexMap.add(i); ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } } } }); //点击搜索按钮触发的事件 searchButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { String searchText = searchField.getText(); // 获取用户输入的搜索文本 // 清除表格的所有行 ruleTableModel.setRowCount(0); // 清空映射 tableToModelIndexMap.clear(); // 重新添加匹配搜索文本的行,并更新映射 int counter=1; for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); String matchKeysStr = CastUtils.listToString(rule.getMatchKeys()); if (matchKeysStr.contains(searchText.toLowerCase())){ // 保存当前规则在模型列表中的索引 tableToModelIndexMap.add(i); ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } } } }); // 点击“快捷方式”的监听事件 convenientOperationButton.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { convenientOperationMenu.show(e.getComponent(), e.getX(), e.getY()); } }); // "只看精确率为低级别以上"按钮的事件 aboveLowItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清除表格的所有行 ruleTableModel.setRowCount(0); // 重新添加匹配搜索文本的行 int counter=1; // 清空映射 tableToModelIndexMap.clear(); // 重新添加匹配搜索文本的行,并更新映射 for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); // 保存当前规则在模型列表中的索引 tableToModelIndexMap.add(i); //低级以上就等于开启所有规则 rule.setOpen(true); ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } ruleTableUI.repaint(); } }); // "只看精确率为高、中"按钮的事件 aboveMediumItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清除表格的所有行 ruleTableModel.setRowCount(0); // 清空映射 tableToModelIndexMap.clear(); // 重新添加匹配搜索文本的行,并更新映射 int counter=1; for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); // 保存当前规则在模型列表中的索引 tableToModelIndexMap.add(i); //设置lower级别规则为关闭 rule.setOpen(!rule.getAccuracy().equals("lower")); ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } ruleTableUI.repaint(); } }); // "只看精确率为高"按钮的事件 aboveHighItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清除表格的所有行 ruleTableModel.setRowCount(0); // 重新添加匹配搜索文本的行 int counter=1; // 清空映射 tableToModelIndexMap.clear(); // 重新添加匹配搜索文本的行,并更新映射 for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); // 保存当前规则在模型列表中的索引 tableToModelIndexMap.add(i); //开启high级别的规则和config规则 String accuracy = rule.getAccuracy(); boolean flag = accuracy.equals(RiskLevel.HIGH.getValue()) ||accuracy.equals(RiskLevel.CONFIG.getValue()); rule.setOpen(flag); ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } ruleTableUI.repaint(); } }); // 在新增按钮的点击事件中添加以下代码来设置 typeField 的值 addButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //初始化建立一个隐藏的配置编辑框 if (editRulePanel == null) creatRuleEditorPanel(); // 清空编辑面板的文本字段 editRulePanel.setTitle("新增指纹"); isImportantField.setSelectedItem(Boolean.TRUE); // 默认设置为重要 searchMethodField.setSelectedItem(MatchType.ANY_KEYWORDS.getValue()); // 默认方法设置为 ALL_KEYWORD updateLocationField(); // 根据默认的方法更新 locationField matchKeysField.setText(""); // 更新 typeField 下拉选项 updateTypeField(); // 确保调用此方法以更新 JComboBox 的选项 // 设置编辑面板的位置并显示 Point locationOnScreen = ((Component)e.getSource()).getLocationOnScreen(); editRulePanel.setLocation(locationOnScreen.x + 70, locationOnScreen.y); // 设置编辑面板的位置 editRulePanel.setVisible(true); // 显示编辑面板 } }); // 点击”功能“的监听事件 moreFunctionsButton.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { popupMenu.show(e.getComponent(), e.getX(), e.getY()); } }); // 点击导出按钮 exportItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String configToJson = currentConfigToJsonString(); // 弹出文件选择对话框,让用户选择保存位置 JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("保存为"); fileChooser.setFileFilter(new FileNameExtensionFilter("JSON文件 (*.json)", "json")); int userSelection = fileChooser.showSaveDialog(RuleConfigPanel.this); if (userSelection == JFileChooser.APPROVE_OPTION) { File fileToSave = fileChooser.getSelectedFile(); // 确保文件有.json扩展名 if (!fileToSave.getAbsolutePath().endsWith(".json")) { fileToSave = new File(fileToSave + ".json"); } try { BurpFileUtils.writeToFile(fileToSave, configToJson); JOptionPane.showMessageDialog(RuleConfigPanel.this, "数据已导出至: " + fileToSave.getAbsolutePath(), "导出成功", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(RuleConfigPanel.this, "写入文件时发生错误: " + ex.getMessage(), "导出失败", JOptionPane.ERROR_MESSAGE); } } } }); // 点击导入按钮 importItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 弹出文件选择对话框,让用户选择 JSON 文件 JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle("请选择规则配置文件"); fileChooser.setFileFilter(new FileNameExtensionFilter("JSON文件 (*.json)", "json")); int userSelection = fileChooser.showOpenDialog(RuleConfigPanel.this); if (userSelection == JFileChooser.APPROVE_OPTION) { File fileToOpen = fileChooser.getSelectedFile(); try (FileInputStream fis = new FileInputStream(fileToOpen); BufferedReader reader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) { // Fastjson内部会处理好流的读取与关闭 FingerPrintRulesWrapper rulesWrapper = JSON.parseObject(reader, FingerPrintRulesWrapper.class); List<FingerPrintRule> rules = rulesWrapper.getFingerprint(); rulesWrapper.setFingerprint(rules); // 清空原列表,并将新数据添加到原列表 synchronized (BurpExtender.fingerprintRules) { // 清空原列表,并将新数据添加到原列表 BurpExtender.fingerprintRules.clear(); BurpExtender.fingerprintRules.addAll(rulesWrapper.getFingerprint()); } // 清除表格的所有行 ruleTableModel.setRowCount(0); // 添加所有的行 int counter = 1; for (FingerPrintRule rule : BurpExtender.fingerprintRules){ ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取 method 信息 rule.getLocation(), // 获取 location 信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } JOptionPane.showMessageDialog(RuleConfigPanel.this, "数据已从: " + fileToOpen.getAbsolutePath() + " 导入", "导入成功", JOptionPane.INFORMATION_MESSAGE); ruleTableModel.fireTableDataChanged(); //通知所有依赖于该数据模型的组件,特别是JTable,数据模型中的数据已经发生了改变,从而触发UI的更新。 } catch (Exception ex) { JOptionPane.showMessageDialog(RuleConfigPanel.this, "读取文件或解析 JSON 数据时发生错误: " + ex.getMessage(), "导入失败", JOptionPane.ERROR_MESSAGE); stderr_println(ex.getMessage()); } } } }); // 点击重置按钮 resetItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取类加载器 ClassLoader classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream("conf/finger-important.json"); try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) { FingerPrintRulesWrapper rulesWrapper = JSON.parseObject(reader, FingerPrintRulesWrapper.class); // 清空原列表,并将新数据添加到原列表 synchronized (BurpExtender.fingerprintRules) { // 清空原列表,并将新数据添加到原列表 BurpExtender.fingerprintRules.clear(); BurpExtender.fingerprintRules.addAll(rulesWrapper.getFingerprint()); } // 清除表格的所有行 ruleTableModel.setRowCount(0); // 添加所有的行 int counter = 1; for (FingerPrintRule rule : BurpExtender.fingerprintRules){ ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取 method 信息 rule.getLocation(), // 获取 location 信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } JOptionPane.showMessageDialog(RuleConfigPanel.this, "数据已重置到最原始状态", "重置成功", JOptionPane.INFORMATION_MESSAGE); ruleTableModel.fireTableDataChanged(); } catch (Exception ex) { JOptionPane.showMessageDialog(RuleConfigPanel.this, "数据已重置失败: " + ex.getMessage(), "重置失败", JOptionPane.ERROR_MESSAGE); } } }); // 点击保存按钮 saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String json = currentConfigToJsonString(); try { // 使用UTF-8编码写入文件 BurpFileUtils.writeToPluginPathFile(BurpExtender.configName, json); JOptionPane.showMessageDialog(RuleConfigPanel.this, "指纹已保存,下次启动使用该指纹", "保存成功", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) { JOptionPane.showMessageDialog(RuleConfigPanel.this, "指纹保存失败: " + ex.getMessage(), "保存失败", JOptionPane.ERROR_MESSAGE); } } }); //将工具行添加到窗口中 add(toolbar, BorderLayout.NORTH); //初始化表格数据 initRuleTableModel(); //创建了一个新的JTable对象,并将之前定义的tableModel 作为数据模型赋给这个表格。表格将根据数据模型中提供的数据来显示内容,包括行数、列数及每个单元格的具体数据。 initRuleTableUI(ruleTableModel); //add函数用于向容器(如JFrame, JPanel等)添加组件的方法。 add(new JScrollPane(ruleTableUI), BorderLayout.CENTER); } /** * 保存指纹的函数,不进行弹框提示 */ public static void saveConfigToDefaultJson() { String json = currentConfigToJsonString(); try { // 使用UTF-8编码写入文件 BurpFileUtils.writeToPluginPathFile(BurpExtender.configName, json); stdout_println(LOG_ERROR, "更新保存规则文件完成..."); } catch (IOException e) { stderr_println(LOG_ERROR, String.format("更新保存规则文件异常...%s", e.getMessage())); } } /** * 将当前内存中的配置规则转为Json字符串 */ private static String currentConfigToJsonString() { List<FingerPrintRule> rulesToExport = BurpExtender.fingerprintRules; // 创建一个新的 FingerPrintRulesWrapper 并设置 fingerprint 列表 FingerPrintRulesWrapper wrapper = new FingerPrintRulesWrapper(); wrapper.setFingerprint(rulesToExport); // 将 wrapper 对象转换为 JSON 格式 String json = JSON.toJSONString(wrapper, JSONWriter.Feature.PrettyFormat); return json; } //设置规则表格的表样式和点击动作 private void initRuleTableUI(DefaultTableModel tableModel) { ruleTableUI = new JTable(tableModel); //在表格层面设置整个表格为不可编辑 ruleTableUI.setDefaultEditor(Object.class, null); //自己实现TableHeader 支持请求头提示 String[] colHeaderTooltips = new String[]{ "规则ID", "规则类型", "规则描述", "是否重要", "准确度", "匹配方式", "匹配位置", "规则内容", "开关|编辑|删除" }; TableHeaderWithTips headerWithTooltips = new TableHeaderWithTips(ruleTableUI.getColumnModel(), colHeaderTooltips); ruleTableUI.setTableHeader(headerWithTooltips); //设置每一列的宽度 CenterRenderer centerRenderer = new CenterRenderer(); LeftRenderer leftRenderer = new LeftRenderer(); int minColumnWidth = 100; ruleTableUI.getColumnModel().getColumn(0).setCellRenderer(leftRenderer); ruleTableUI.getColumnModel().getColumn(0).setPreferredWidth(50); ruleTableUI.getColumnModel().getColumn(0).setMaxWidth(50); ruleTableUI.getColumnModel().getColumn(1).setCellRenderer(leftRenderer); ruleTableUI.getColumnModel().getColumn(1).setPreferredWidth(250); ruleTableUI.getColumnModel().getColumn(1).setMaxWidth(300); ruleTableUI.getColumnModel().getColumn(2).setCellRenderer(leftRenderer); ruleTableUI.getColumnModel().getColumn(2).setPreferredWidth(250); ruleTableUI.getColumnModel().getColumn(2).setMaxWidth(300); ruleTableUI.getColumnModel().getColumn(3).setCellRenderer(centerRenderer); ruleTableUI.getColumnModel().getColumn(3).setPreferredWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(3).setMaxWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(4).setCellRenderer(centerRenderer); ruleTableUI.getColumnModel().getColumn(4).setPreferredWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(4).setMaxWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(5).setCellRenderer(centerRenderer); ruleTableUI.getColumnModel().getColumn(5).setPreferredWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(5).setMaxWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(6).setCellRenderer(centerRenderer); ruleTableUI.getColumnModel().getColumn(6).setPreferredWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(6).setMaxWidth(minColumnWidth); ruleTableUI.getColumnModel().getColumn(7).setCellRenderer(leftRenderer); ruleTableUI.getColumnModel().getColumn(7).setPreferredWidth(300); // 设置操作列的宽度以适应两个按钮 int actionColumnWidth = 100; // 假设每个按钮宽度为70,中间间隔10 ruleTableUI.getColumnModel().getColumn(8).setPreferredWidth(actionColumnWidth); ruleTableUI.getColumnModel().getColumn(8).setMaxWidth(actionColumnWidth); ruleTableUI.getColumnModel().getColumn(8).setCellRenderer(new ButtonRenderer()); ruleTableUI.getColumnModel().getColumn(8).setCellEditor(new ButtonEditor(ruleTableUI)); // 在FingerConfigTab构造函数中设置表头渲染器和监听器的代码 //JTableHeader是JTable顶部显示列名的部分,允许用户对列进行排序、调整列宽等 自定义设置 JTableHeader tableHeader = ruleTableUI.getTableHeader(); //获取 type所在的列 // 假定类型列的索引是1 TableColumn typeColumn = tableHeader.getColumnModel().getColumn(1); // 设置表头渲染器 typeColumn.setHeaderRenderer(new HeaderIconTypeRenderer()); // 在您的FingerConfigTab构造函数中 为数据表头添加操作函数 tableHeader.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (ruleTableUI.getColumnModel().getColumnIndexAtX(e.getX()) == 1) { // 假设类型列的索引是1 //显示 表头 类型 点击动作 showFilterPopup(e.getComponent(), e.getX(), e.getY()); } } }); // 添加鼠标监听器 ruleTableUI.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // 获取点击的行索引 int row = ruleTableUI.rowAtPoint(e.getPoint()); if (row >= 0) { // 转换为模型索引 int modelRow = ruleTableUI.convertRowIndexToModel(row); if (e.getClickCount() >= 2) { // 双击 //加载规则编辑面板 showRuleEditorPanel(modelRow); } } } }); } /** * 加载当前行的规则规则编辑面板 */ public static void showRuleEditorPanel(int modelRow) { int dataIndex = tableToModelIndexMap.get(modelRow); // 使用模型索引查找原始数据列表中的索引 // 使用原始数据列表中的索引来获取和编辑正确的规则 editingRow = dataIndex; // 更新编辑行索引为原始数据列表中的索引 FingerPrintRule rule = BurpExtender.fingerprintRules.get(dataIndex); if (editRulePanel == null) creatRuleEditorPanel(); // 填充编辑面板的字段 editRulePanel.setTitle("编辑规则"); typeField.getEditor().setItem(rule.getType()); isImportantField.setSelectedItem(rule.getIsImportant()); accuracyFiled.setSelectedItem(rule.getAccuracy()); searchMethodField.setSelectedItem(rule.getMatchType()); locationField.setSelectedItem(rule.getLocation()); describeField.setText(rule.getDescribe()); // 根据 rule 的 method 更新 locationField matchKeysField.setText(String.join("\n", rule.getMatchKeys())); // 设置 matchKeyField 的值 // 放在在屏幕最中间 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension panelSize = editRulePanel.getPreferredSize(); int newX = (screenSize.width - panelSize.width) / 2; int newY = (screenSize.height - panelSize.height) / 2; editRulePanel.setLocation(newX, newY); // 设置面板的位置 editRulePanel.setVisible(true); // 显示面板 } // 初始化表格数据 private void initRuleTableModel() { // 表格数据 ruleTableModel = new DefaultTableModel(new Object[]{ "#", "type", "describe", "isImportant", "accuracy", "matchType", "location", "matchKeys", "Action" }, 0) { @Override public Class<?> getColumnClass(int columnIndex) { switch (columnIndex) { case 8: return JButton.class; default: return super.getColumnClass(columnIndex); } } }; //创建了一个新的DefaultTableModel实例,它将用于存储表格的数据和定义列的属性 //指定列名分别是 "#", "type", "describe", "isImportant", "accuracy", "MatchType", "location", "MatchKey", "Action",而0表示初始时不创建任何行。 //匿名内部类的方式去扩展DefaultTableModel,目的是为了重写getColumnClass方法,实现自定义列的行为 //表示第9列 Action 的数据类型被指定为JButton.class。这意味着这一列的每个单元格都可以显示一个按钮。 对于其他列,使用默认的行为,即根据数据的实际类型来决定。 int counter = 1; tableToModelIndexMap.clear(); for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); tableToModelIndexMap.add(i); uniqueTypes.add(rule.getType()); ruleTableModel.addRow(new Object[]{ counter, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), // 获取method信息 rule.getLocation(), // 获取location信息 CastUtils.listToString(rule.getMatchKeys()), new String[] {"IsOpen", "Edit", "Delete"} // 操作按钮 }); counter ++; } } //初始化建立一个隐藏的配置编辑框 private static void creatRuleEditorPanel() { // 编辑页面框 editRulePanel = new JDialog(); editRulePanel.setTitle("新增规则"); editRulePanel.setLayout(new GridBagLayout()); // 更改为 GridBagLayout editRulePanel.setSize(500, 450); editRulePanel.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); editRulePanel.setModal(false); editRulePanel.setResizable(true); typeField = new JComboBox<>(); typeField.setEditable(true); isImportantField = new JComboBox<>(new Boolean[]{true, false}); searchMethodField = new JComboBox<>(MatchType.getValues()); accuracyFiled = new JComboBox<>(RiskLevel.getValues()); locationField = new JComboBox<>(); matchKeysField = new JTextArea(5, 20); // 5行,20列 describeField = new JTextField("-"); searchMethodField.setSelectedItem(MatchType.ANY_KEYWORDS.getValue()); updateLocationField(); // 创建 GridBagConstraints 对象来控制每个组件的布局 GridBagConstraints constraints = new GridBagConstraints(); constraints.anchor = GridBagConstraints.WEST; // 紧靠左边 constraints.fill = GridBagConstraints.HORIZONTAL; // 水平填充 constraints.insets = new Insets(10, 10, 10, 10); // 设置内边距为10像素 // 添加 "Type" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 0; // 在网格的第一行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("Type:"), constraints); // 添加 "Type" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 editRulePanel.add(typeField, constraints); // 添加 "describeField" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 2; // 在网格的第一行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("Describe:"), constraints); // 添加 "describeField" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 editRulePanel.add(describeField, constraints); // 添加 "isImportant" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 3; // 在网格的第一行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("IsImportant:"), constraints); // 添加 "isImportant" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 editRulePanel.add(isImportantField, constraints); // 添加 "accuracyFiled" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 4; // 在网格的第一行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("accuracyFiled:"), constraints); // 添加 "accuracyFiled" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 editRulePanel.add(accuracyFiled, constraints); // 添加 "Method" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 5; // 在网格的第二行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("MatchType:"), constraints); // 添加 "Method" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 editRulePanel.add(searchMethodField, constraints); // 添加 "Location" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 6; // 在网格的第三行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("Location:"), constraints); // 添加 "Location" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 editRulePanel.add(locationField, constraints); // 添加 "Keyword" 标签 constraints.gridx = 0; // 在网格的第一列添加组件 constraints.gridy = 7; // 在网格的第四行添加组件 constraints.weightx = 0; // 不允许横向扩展 editRulePanel.add(new JLabel("MatchKey:"), constraints); // 添加 "Keyword" 输入框 constraints.gridx = 1; // 在网格的第二列添加组件 constraints.weightx = 1.0; // 允许横向扩展 // 设置 GridBagConstraints 来跨越多行和列 constraints.gridy = 7; // 在网格的第四行开始添加组件 constraints.gridwidth = 1; // 占据一列 //constraints.weighty = 0; // 允许在垂直方向上伸展 JScrollPane keywordFieldScrollPane = new JScrollPane(matchKeysField); // 包装 JTextArea 到 JScrollPane 中 editRulePanel.add(keywordFieldScrollPane, constraints); // 根据需要,为 Location 和 Keyword 输入框设置首选大小 typeField.setPreferredSize(new Dimension(100, typeField.getPreferredSize().height)); isImportantField.setPreferredSize(new Dimension(100, isImportantField.getPreferredSize().height)); searchMethodField.setPreferredSize(new Dimension(100, searchMethodField.getPreferredSize().height)); locationField.setPreferredSize(new Dimension(100, locationField.getPreferredSize().height)); JButton saveButton = new JButton("Save"); saveButton.setIcon(UiUtils.getImageIcon("/icon/saveItem.png")); // 在构造函数中为 methodField 添加事件监听器,以便动态更新 locationField 的选项 searchMethodField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JComboBox<String> methodCombo = (JComboBox<String>) e.getSource(); String selectedMethod = (String) methodCombo.getSelectedItem(); updateLocationField(); // 根据选择更新 locationField } }); // 修改保存按钮的点击事件监听器 saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取用户选择或输入的type值 String type = (String) typeField.getEditor().getItem(); // 对于可编辑的JComboBox,使用getEditor().getItem()来获取文本字段中的值 uniqueTypes.add(type); if (type != null) { type = type.trim(); // 清除前后空格 } Boolean isImportant = (Boolean) isImportantField.getSelectedItem(); String accuracy = (String) accuracyFiled.getSelectedItem(); String method = (String) searchMethodField.getSelectedItem(); String location = (String) locationField.getSelectedItem(); String describe = describeField.getText(); List<String> matchKeys = Arrays.asList(matchKeysField.getText().split("\n")); //添加Keyword去重功能 matchKeys = CastUtils.deduplicateStringList(matchKeys); if (type.trim().isEmpty() || method.trim().isEmpty() || location.trim().isEmpty()) { JOptionPane.showMessageDialog(editRulePanel, "主要输入框都必须填写。", "输入错误", JOptionPane.ERROR_MESSAGE); return; } if (editingRow != null) { // 如果是编辑现有规则,更新数据源和表格模型中的数据 FingerPrintRule rule = BurpExtender.fingerprintRules.get(editingRow); rule.setType(type); rule.setDescribe(describe); rule.setIsImportant(isImportant); rule.setAccuracy(accuracy); rule.setMatchType(method); rule.setLocation(location); rule.setMatchKeys(matchKeys); // 更新表格模型 ruleTableModel.setValueAt(type, ruleTableUI.getSelectedRow(), 1); ruleTableModel.setValueAt(describe, ruleTableUI.getSelectedRow(), 2); ruleTableModel.setValueAt(isImportant, ruleTableUI.getSelectedRow(), 3); ruleTableModel.setValueAt(accuracy, ruleTableUI.getSelectedRow(), 4); ruleTableModel.setValueAt(method, ruleTableUI.getSelectedRow(), 5); // 假设Method列是第3列 ruleTableModel.setValueAt(location, ruleTableUI.getSelectedRow(), 6); // 假设Location列是第4列 ruleTableModel.setValueAt(CastUtils.listToString(matchKeys), ruleTableUI.getSelectedRow(), 7); // 假设Keyword列是第5列 // 通知模型数据已更新,触发表格重绘 ruleTableModel.fireTableRowsUpdated(ruleTableUI.getSelectedRow(), ruleTableUI.getSelectedRow()); // 关闭编辑面板 editRulePanel.setVisible(false); // 重置编辑行索引 editingRow = null; } else { // 创建新的 FingerPrintRule 对象 FingerPrintRule newRule = new FingerPrintRule(type, describe, isImportant, method, location, matchKeys, true, accuracy); synchronized (BurpExtender.fingerprintRules) { // 将新规则添加到数据源的开始位置 BurpExtender.fingerprintRules.add(0, newRule); // 更新表格模型 ((DefaultTableModel) ruleTableUI.getModel()).insertRow(0, new Object[]{ 1, // 新行的序号始终为1 newRule.getType(), newRule.getDescribe(), newRule.getIsImportant(), newRule.getAccuracy(), newRule.getMatchType(), newRule.getLocation(), CastUtils.listToString(newRule.getMatchKeys()), new String[]{"Edit", "Delete"} // 操作按钮 }); // 更新映射列表,因为添加了新的数据项 tableToModelIndexMap.add(0, 0); // 在映射列表的开始位置添加新项 // 由于添加了新元素,更新所有行的序号 for (int i = 1; i < ruleTableUI.getRowCount(); i++) { ruleTableUI.getModel().setValueAt(i + 1, i, 0); } // 更新后续映射的索引 for (int i = 1; i < tableToModelIndexMap.size(); i++) { tableToModelIndexMap.set(i, tableToModelIndexMap.get(i) + 1); } } // 关闭编辑面板 editRulePanel.setVisible(false); // 通知模型数据已更新,触发表格重绘 ruleTableModel.fireTableDataChanged(); } //重新加载配置文件中的CONF_列 ConfigUtils.reloadConfigArrayListFromRules(BurpExtender.fingerprintRules); } }); editRulePanel.add(saveButton); // 添加焦点监听器 editRulePanel.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { // 当面板失去焦点时,将其隐藏或关闭 editRulePanel.setVisible(false); } }); } // 添加一个新的方法来更新 locationField 的选项 private static void updateLocationField() { locationField.removeAllItems(); // 清除之前的选项 for (String location : LocationType.getValues()) { locationField.addItem(location); } locationField.setSelectedItem(LocationType.BODY.getValue()); // 默认选中 "body" } /** * 过滤新增指纹允许的类型不包含 配置规则 * @param types * @return */ private String[] filterConfigItemsType(String[] types) { List<String> confItems = new ArrayList<>(); // 遍历数组并检查每个元素 for (String type : types) { if (!type.startsWith(Constants.RULE_CONF_PREFIX)) { // 如果元素以"CONF_"开头,则不添加到confItems列表中 confItems.add(type); } } // 将过滤后的List转换为数组并返回 return confItems.toArray(new String[0]); } // 创建或更新typeField下拉框的方法 public void updateTypeField() { // 将集合转换为数组 String[] defaultTypes = uniqueTypes.toArray(new String[0]); //排除配置规则 defaultTypes = filterConfigItemsType(defaultTypes); // 如果typeField已经存在,那么更新它的模型 if (typeField != null) { typeField.setModel(new DefaultComboBoxModel<>(defaultTypes)); } else { // 否则创建新的typeField typeField = new JComboBox<>(defaultTypes); typeField.setEditable(true); } } //基于选定的类型过滤规则 private void filterTableByType(String type) { ruleTableModel.setRowCount(0); // 清空表格 tableToModelIndexMap.clear(); // 清空索引映射 int counter = 1; for (int i = 0; i < BurpExtender.fingerprintRules.size(); i++) { FingerPrintRule rule = BurpExtender.fingerprintRules.get(i); // 如果type为null或者与规则类型匹配,添加到表格中 if (type == null || String_All_Type.equals(type) || rule.getType().equals(type)) { ruleTableModel.addRow(new Object[]{ counter++, rule.getType(), rule.getDescribe(), rule.getIsImportant(), rule.getAccuracy(), rule.getMatchType(), rule.getLocation(), CastUtils.listToString(rule.getMatchKeys()), new String[]{"Edit", "Delete"} }); tableToModelIndexMap.add(i); // 将原始列表的索引添加到映射中 } } } //显示规则过滤的选项框 private void showFilterPopup(Component invoker, int x, int y) { JPopupMenu filterMenu = new JPopupMenu(); // “全部”选项用于移除过滤 JMenuItem showAllItem = new JMenuItem(String_All_Type); showAllItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { filterTableByType(null); // 移除过滤,显示全部 } }); filterMenu.add(showAllItem); filterMenu.add(new JSeparator()); // 分隔线 // 为每个独特的类型创建菜单项 for (String type : uniqueTypes) { //跳过配置文件 if (type.startsWith(Constants.RULE_CONF_PREFIX)) { continue; } JMenuItem menuItem = new JMenuItem(type); menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { filterTableByType(type); // 根据选中的类型过滤表格 } }); filterMenu.add(menuItem); } filterMenu.show(invoker, x, y); // 显示菜单 } } ================================================ FILE: src/main/java/ui/Tabs.java ================================================ package ui; import burp.IBurpExtenderCallbacks; import burp.ITab; import javax.swing.*; import java.awt.*; public class Tabs implements ITab { private final JTabbedPane tabs; private final String name; private final RuleConfigPanel ruleConfigPanel; private final BasicUrlInfoPanel msgInfoPanel; private final BasicHostInfoPanel hostInfoPanel; public Tabs(IBurpExtenderCallbacks callbacks, String name){ this.name = name; // 定义tab标签页 this.tabs = new JTabbedPane(); this.hostInfoPanel = BasicHostInfoPanel.getInstance(); this.tabs.add("聚合面板", this.hostInfoPanel); this.msgInfoPanel = BasicUrlInfoPanel.getInstance(); this.tabs.add("请求详情", this.msgInfoPanel); this.ruleConfigPanel = RuleConfigPanel.getInstance(); this.tabs.add("规则配置", this.ruleConfigPanel); // 将整个tab加载到平台即可 callbacks.customizeUiComponent(tabs); // 将自定义选项卡添加到Burp的UI callbacks.addSuiteTab(this); } @Override public String getTabCaption() { return this.name; } @Override public Component getUiComponent() { return this.tabs; } } ================================================ FILE: src/main/java/utilbox/ByteArrayUtils.java ================================================ package utilbox; import java.nio.charset.Charset; public class ByteArrayUtils { /** * byte[]数组截取 * srcPoC 是原数组的起始位置,length是要截取的长度 */ public static byte[] subByte(byte[] b, int srcPos, int length) { byte[] b1 = new byte[length]; System.arraycopy(b, srcPos, b1, 0, length); return b1; } public static String getSystemCharSet() { return Charset.defaultCharset().toString(); //System.out.println(System.getProperty("file.encoding")); } /** * 将10进制转换为16进制 * * @param decimal 10进制 * @return 16进制 */ public static String decimalToHex(int decimal) { String hex = Integer.toHexString(decimal); return hex.toUpperCase(); } /** * 拼接多个byte[]数组的方法 * * @param arrays * @return */ public static byte[] join(byte[]... arrays) { int len = 0; for (byte[] arr : arrays) { len += arr.length;//计算多个数组的长度总和 } byte[] result = new byte[len]; int idx = 0; for (byte[] arr : arrays) { for (byte b : arr) { result[idx++] = b; } } return result; } /** * https://stackoverflow.com/questions/21341027/find-indexof-a-byte-array-within-another-byte-array * Search the data byte array for the first occurrence * of the byte array pattern. */ public static int BytesIndexOf(byte[] data, byte[] pattern) { int[] failure = computeFailure(pattern); int j = 0; for (int i = 0; i < data.length; i++) { while (j > 0 && pattern[j] != data[i]) { j = failure[j - 1]; } if (pattern[j] == data[i]) { j++; } if (j == pattern.length) { return i - pattern.length + 1; } } return -1; } /** * Computes the failure function using a boot-strapping process, * where the pattern is matched against itself. */ private static int[] computeFailure(byte[] pattern) { int[] failure = new int[pattern.length]; int j = 0; for (int i = 1; i < pattern.length; i++) { while (j > 0 && pattern[j] != pattern[i]) { j = failure[j - 1]; } if (pattern[j] == pattern[i]) { j++; } failure[i] = j; } return failure; } public static boolean equals(byte[] a, byte[] b) { if (a == null || b == null) { return false; } if (a.length != b.length) { return false; } for (int i = 0; i < a.length; i++) { if (a[i] != b[i]) { return false; } } return true; } } ================================================ FILE: src/main/java/utilbox/CharsetUtils.java ================================================ package utilbox; import org.apache.commons.io.input.BOMInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.Map; public class CharsetUtils { public static String getSystemCharSet() { return Charset.defaultCharset().toString(); } public static boolean isValidCharset(String charsetName) { return getCharsetNameList().contains(charsetName); } public static List<String> getCharsetNameList() { Map<String, Charset> charsets = Charset.availableCharsets(); return new ArrayList<String>(charsets.keySet()); } /** * 消除大小写差异 * @param charsetName * @return */ public static String getCharsetName(String charsetName) { List<String> charsetNameList = getCharsetNameList(); // 调用一次并保存结果 for (String name : charsetNameList) { if (name.equalsIgnoreCase(charsetName)) { return name; } } return null; } /** * 进行响应包的编码转换。 * @param content * @return 转换后的格式的byte[] */ public static byte[] covertCharSet(byte[] content,String originalCharset,String newCharset){ if (originalCharset == null) { originalCharset = detectCharset(content); } try { return new String(content,originalCharset).getBytes(newCharset); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return content; } } public static byte[] covertCharSet(byte[] content,String newCharset) throws UnsupportedEncodingException { return covertCharSet(content,null,newCharset); } public static String detectCharset(byte[] bytes){ try { ByteArrayInputStream bis = new ByteArrayInputStream(bytes); BOMInputStream bomInputStream = BOMInputStream.builder().setInputStream(bis).get(); String encoding = bomInputStream.getBOMCharsetName(); bomInputStream.close(); return getCharsetName(encoding); } catch (IOException e) { e.printStackTrace(); return null; } } public static void main(String[] args) throws Exception { // Map<String, Charset> charsets = Charset.availableCharsets(); // // // 打印所有字符编码集的规范名称 // System.out.println("Available Charsets:"); // for (String name : charsets.keySet()) { // System.out.println(name); // } System.out.println(detectCharset("中国中文11111".getBytes("UTF-8"))); } } ================================================ FILE: src/main/java/utilbox/DomainUtils.java ================================================ package utilbox; import com.google.common.net.InternetDomainName; import org.apache.commons.lang3.StringUtils; import org.xbill.DNS.Record; import org.xbill.DNS.*; import java.net.MalformedURLException; import java.net.URL; import java.util.*; public class DomainUtils { //可能有xxx.services,xxx.international这样的域名,适当提高长度 public static final String REGEX_TO_VAILDATE_DOMAIN_NAME_MAY_WITH_PORT = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,11}(?::\\d{1,5})?$"; public static final String REGEX_TO_VAILDATE_DOMAIN_NAME_NO_PORT = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,11}$"; //final String DOMAIN_NAME_PATTERN = "([A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}";//-this.state.scroll 这种也会被认为是合法的。 public static final String REGEX_TO_GREP_DOMAIN_NAME_NO_PORT = "((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,11}"; public static final String REGEX_TO_GREP_DOMAIN_NAME_MAY_WITH_PORT = "((?!-)[A-Za-z0-9-*]{1,63}(?<!-)\\.)+[A-Za-z]{2,11}(?::\\d{1,5})?"; //加上(?::\\d{1,5})?部分,支持端口模式 //加*号是为了匹配 类似 *.baidu.com的这种域名记录。 /** * 和VAILD_DOMAIN_NAME_PATTERN的正则进行比较: * 前面的部分可以是((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)即不以-开头的字符串,长度1到63;也可以是(\*\.),即*. * 后缀部分即可以是[A-Za-z]{2,6},也可以是* * <p> * a86ba224e43010880724df4a4be78c11 * administratoradministrator * 虽然按照RFC的规定,域名的单个字符的模块长度可以是63。但是实际使用情况中,基本不可能有这样的域名。 */ public static final String REGEX_TO_VAILD_WILDCARD_DOMAIN_NAME = "^((?!-)[A-Za-z0-9\\*-]{1,32}(?<!-)\\.)+([A-Za-z*]{1,11})$"; //final String DOMAIN_NAME_PATTERN = "([A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}";//-this.state.scroll 这种也会被认为是合法的。 //域名校验和域名提取还是要区分对待 public static boolean isValidDomainMayPort(String domain) { return isValidDomainPrivate(domain, REGEX_TO_VAILDATE_DOMAIN_NAME_MAY_WITH_PORT); } public static boolean isValidDomainNoPort(String domain) { return isValidDomainPrivate(domain, REGEX_TO_VAILDATE_DOMAIN_NAME_NO_PORT); } private static boolean isValidDomainPrivate(String domain, String patternStr) { if (StringUtils.isEmpty(domain)) { return false; } boolean isOk = TextUtils.isRegexMatch(domain, patternStr); if (isOk) { //a86ba224e43010880724df4a4be78c11 //administratoradministrator //虽然按照RFC的规定,域名的单个字符的模块长度可以是63。但是实际使用情况中,基本不可能有这样的域名。 String tmp = domain.replaceAll("-", "."); String[] tmpArray = tmp.split("\\."); for (String item : tmpArray) { if (item.length() >= 32) { return false; } } return true; } return false; } /** * seller.uat.example.com.my * seller.uat.example.ph * seller.uat.example.sg * seller.test.example.ph * seller.test.example.sg * seller.uat.example.co.id * seller.uat.example.co.th * seller.test.example.vn * seller.uat.example.vn * 经常会遇到这样的域名;其中的环境关键词和后缀TLD都是变化的。 * 但是它们属于同一类业务,我们需要能够识别这种类型的资产 * seller.*.example.* * * @param domain * @return */ public static boolean isValidWildCardDomain(String domain) { if (StringUtils.isEmpty(domain)) { return false; } boolean isOk = TextUtils.isRegexMatch(domain, REGEX_TO_VAILD_WILDCARD_DOMAIN_NAME); return isOk && domain.contains("*"); } /** * @param wildCardDomain 比如seller.*.example.* * @param StrDomain 比如seller.uat.example.vn * @return 判断StrDomain是否符合wildCardDomain的规则 * 注意:"seller.xx.example.com"不能匹配"*.seller.*.example.*"和日常的思路想法有点不同 */ @Deprecated public static boolean isMatchWildCardDomainOld(String wildCardDomain, String StrDomain) { String domainRegex = wildCardDomain; //"seller.xx.example.com"应当匹配"*.seller.*.example.*" if (domainRegex.startsWith("*.")) { domainRegex = domainRegex.replaceFirst("\\*\\.", "((?!-)[A-Za-z0-9-]{1,63}(?<!-))+."); } if (domainRegex.endsWith(".*")) { domainRegex = TextUtils.replaceLast(domainRegex, ".*", ".((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)*[A-Za-z]{2,6}"); } //考虑一些极端情况(*.*sel*ler*.*.*ex*ample*.*) //1 ".*." 这种情况*的内容不能为空,用+ domainRegex = domainRegex.replaceAll("\\.\\*\\.", ".((?!-)[A-Za-z0-9-]{1,63}(?<!-))+."); //2 ".*."替换后,剩下的只有 ".*字符串" 和 "字符串*." 两种情况了, //3 ".*字符串"不可以以"-"开头,但是可以以它结尾 domainRegex = domainRegex.replaceAll("\\.\\*", ".((?!-)[A-Za-z0-9-]{1,63})*"); //4 "字符串*."可以以"-"开头,但是不可以以它结尾 domainRegex = domainRegex.replaceAll("\\.\\*", ".([A-Za-z0-9-]{1,63}(?<!-))*"); //replaceFirst的参数也是正则,能代替正则匹配? return "".equals(StrDomain.replaceFirst(domainRegex, "")); } /** * @param wildCardDomain 比如seller.*.example.* * @param StrDomain 比如seller.uat.example.vn * @return 判断StrDomain是否符合wildCardDomain的规则 */ public static boolean isMatchWildCardDomain(String wildCardDomain, String StrDomain) { String domainRegex = wildCardDomain; domainRegex = domainRegex.replaceAll("\\.", "\\\\.");// . ---> \. 即域名中的点表示原意,不是正则中的点 domainRegex = domainRegex.replaceAll("\\*", "\\.\\*");// * ---> .* 即*就是正则中的.* //System.out.println(domainRegex); return TextUtils.isRegexMatch(StrDomain, domainRegex); } public static List<String> grepDomainAndPort(String text) { return TextUtils.grepWithRegex(text, REGEX_TO_GREP_DOMAIN_NAME_MAY_WITH_PORT); } public static List<String> grepDomainNoPort(String text) { return TextUtils.grepWithRegex(text, REGEX_TO_GREP_DOMAIN_NAME_NO_PORT); } public static List<String> grepPort(String text) { return TextUtils.grepWithRegex(text, "(\\d{1,6})"); } /** * http://www.xbill.org/dnsjava/dnsjava-current/examples.html * 返回数据格式如下 * {IP=[69.171.234.48], CDN=[www.google.com.]} * * @param domain * @param server * @return */ public static HashMap<String, Set<String>> dnsQuery(String domain, String server) { HashMap<String, Set<String>> result = new HashMap<>(); Set<String> IPset = new HashSet<>(); Set<String> CDNSet = new HashSet<>(); result.put("IP", IPset); result.put("CDN", CDNSet); if (domain == null || IPAddressUtils.isValidIPv4NoPort(domain)) {//目标是一个IP IPset.add(domain); result.put("IP", IPset); return result; } try { Resolver resolver = null; Lookup lookup = new Lookup(domain, Type.A); if (IPAddressUtils.isValidIPv4MayPort(server)) { resolver = new SimpleResolver(server); lookup.setResolver(resolver); } lookup.run(); if (lookup.getResult() == Lookup.SUCCESSFUL) { Record[] records = lookup.getAnswers(); for (Record record : records) { ARecord a = (ARecord) record; String ip = a.getAddress().getHostAddress(); String CName = a.getAddress().getHostName(); if (ip != null) { IPset.add(ip); } if (CName != null) { CDNSet.add(CName); } } } else if (lookup.getResult() == Lookup.TRY_AGAIN) { if (resolver == null) { System.out.println("DNS Query Failed with default server, try with 8.8.8.8"); return dnsQuery(domain, "8.8.8.8"); } if (server.equals("8.8.8.8")) { System.out.println("DNS Query Failed with 8.8.8.8, try with 223.6.6.6"); return dnsQuery(domain, "223.6.6.6"); } } result.put("IP", IPset); result.put("CDN", CDNSet); return result; } catch (Exception e) { e.printStackTrace(); return result; } } /** * 获取域名的权威服务器 * * @param domain * @param server 可以为null * @return */ public static List<String> GetAuthServer(String domain, String server) { List<String> result = new ArrayList<>(); if (StringUtils.isEmpty(domain) || IPAddressUtils.isValidIPv4MayPort(domain)) {//目标是一个IP return result; } try { Lookup lookup = new Lookup(domain, Type.NS); if (IPAddressUtils.isValidIPv4MayPort(server) || DomainUtils.isValidDomainMayPort(server)) { Resolver resolver = new SimpleResolver(server); lookup.setResolver(resolver); } lookup.run(); if (lookup.getResult() == Lookup.SUCCESSFUL) { Record[] records = lookup.getAnswers(); for (int i = 0; i < records.length; i++) { NSRecord a = (NSRecord) records[i]; String Nserver = a.getTarget().toString(); if (StringUtils.isNotEmpty(Nserver)) { result.add(Nserver); } } } return result; } catch (Exception e) { e.printStackTrace(); return result; } } public static List<String> ZoneTransferCheck(String domain, String NameServer) { List<String> result = new ArrayList<>(); try { ZoneTransferIn zone = ZoneTransferIn.newAXFR(new Name(domain), NameServer, null); zone.run(); result = zone.getAXFR(); return result; } catch (Exception e1) { } return result; } /** * 注意,仅用于relatedToRoot转换时 * * @param inputDomain * @return */ public static String getRootDomain(String inputDomain) { inputDomain = DomainUtils.clearDomainWithoutPort(inputDomain); try { return InternetDomainName.from(inputDomain).topPrivateDomain().toString(); } catch (Exception e) { //InternetDomainName.from("www.jd.local").topPrivateDomain()//Not under a public suffix: www.jd.local Set<String> customPublicSuffixes = new HashSet<>(); customPublicSuffixes.add("inner"); customPublicSuffixes.add("local"); int lastIndex = inputDomain.lastIndexOf("."); if (lastIndex != -1 && lastIndex + 1 <= inputDomain.length()) { String suffix = inputDomain.substring(lastIndex + 1); if (customPublicSuffixes.contains(suffix)) { int secondLastIndex = inputDomain.lastIndexOf(".", lastIndex - 1); if (secondLastIndex != -1 && secondLastIndex + 1 <= inputDomain.length()) { return inputDomain.substring(secondLastIndex + 1); } } } } return inputDomain; } /** * 获取纯域名,不包含端口 * * @param domain * @return */ public static String clearDomainWithoutPort(String domain) { if (domain == null) { return null; } domain = domain.toLowerCase().trim(); if (domain.startsWith("http://") || domain.startsWith("https://")) { try { domain = new URL(domain).getHost(); } catch (MalformedURLException e) { return null; } } else { if (domain.contains(":")) {//处理带有端口号的域名 domain = domain.substring(0, domain.indexOf(":")); } } if (domain.endsWith(".")) { domain = domain.substring(0, domain.length() - 1); } return domain; } /** * 是否是TLD域名。比如 baidu.net 是baidu.com的TLD域名 * 注意:www.baidu.com不是baidu.com的TLD域名,但是是子域名!!! * <p> * 这里的rootDomain不一定是 topPrivate。比如 examplepay.example.sg 和examplepay.example.io * * @param domain * @param rootDomain */ @Deprecated //范围太广,误报太多 private static boolean isTLDDomain(String domain, String rootDomain) { try { InternetDomainName suffixDomain = InternetDomainName.from(domain).publicSuffix(); InternetDomainName suffixRootDomain = InternetDomainName.from(rootDomain).publicSuffix(); if (suffixDomain != null && suffixRootDomain != null) { String suffixOfDomain = suffixDomain.toString(); String suffixOfRootDomain = suffixRootDomain.toString();//TODO 校验一下;gettitle控制 //域名后缀比较 if (suffixOfDomain.equalsIgnoreCase(suffixOfRootDomain)) { return false; } //去除后缀然后比较 String tmpDomain = TextUtils.replaceLast(domain, suffixOfDomain, ""); String tmpRootdomain = TextUtils.replaceLast(rootDomain, suffixOfRootDomain, ""); if (tmpDomain.endsWith("." + tmpRootdomain) || tmpDomain.equalsIgnoreCase(tmpRootdomain)) { return true; } } return false; } catch (IllegalArgumentException e) { return false; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 相比isTLDDomain() 通过白名单缩小范围 * * @param domain * @param rootDomain * @return */ public static boolean isWhiteListTLD(String domain, String rootDomain) { String listStr = ".ac|.ad|.ae|.af|.ag|.ai|.al|.am|.ao|.aq|.ar|.as|.at|.au|.aw|.ax|.az|.ba|" + ".bb|.bd|.be|.bf|.bg|.bh|.bi|.bj|.bm|.bn|.bo|.bq|.br|.bs|.bt|.bw|.by|.bz|.ca|" + ".cc|.cd|.cf|.cg|.ch|.ci|.ck|.cl|.cm|.cn|.co|.com|.cr|.cu|.cv|.cw|.cx|.cy|.cz|" + ".de|.dj|.dk|.dm|.do|.dz|.ec|.edu|.ee|.eg|.eh|.er|.es|.et|.eu|.fi|.fj|.fk|.fm|" + ".fo|.fr|.ga|.gd|.ge|.gf|.gg|.gh|.gi|.gl|.gm|.gn|.gov|.gp|.gq|.gr|.gs|.gt|.gu|" + ".gw|.gy|.hk|.hm|.hn|.hr|.ht|.hu|.id|.ie|.il|.im|.in|.int|.io|.iq|.ir|.is|.it|" + ".je|.jm|.jo|.jp|.ke|.kg|.kh|.ki|.km|.kn|.kp|.kr|.kw|.ky|.kz|.la|.lb|.lc|.li|" + ".lk|.lr|.ls|.lt|.lu|.lv|.ly|.ma|.mc|.md|.me|.mg|.mh|.mil|.mk|.ml|.mm|.mn|.mo|" + ".mp|.mq|.mr|.ms|.mt|.mu|.mv|.mw|.mx|.my|.mz|.na|.nc|.ne|.net|.nf|.ng|.ni|.nl|" + ".no|.np|.nr|.nu|.nz|.om|.org|.pa|.pe|.pf|.pg|.ph|.pk|.pl|.pm|.pn|.pr|.ps|.pt|" + ".pw|.py|.qa|.re|.ro|.rs|.ru|.rw|.sa|.sb|.sc|.sd|.se|.sg|.sh|.si|.sk|.sl|.sm|" + ".sn|.so|.sr|.ss|.st|.su|.sv|.sx|.sy|.sz|.tc|.td|.tf|.tg|.th|.tj|.tk|.tl|.tm|" + ".tn|.to|.tr|.tt|.tv|.tw|.tz|.ua|.ug|.uk|.us|.uy|.uz|.va|.vc|.ve|.vg|.vi|.vn|" + ".vu|.wf|.ws|.ye|.yt|.za|.zm|.zw"; List<String> tlds = Arrays.asList(listStr.split("\\|")); try { if (isTLDDomain(domain, rootDomain)) { String suffixOfDomain = InternetDomainName.from(domain).publicSuffix().toString();//没有保护点号 String[] items = suffixOfDomain.split("\\."); for (String item : items) { if (!tlds.contains("." + item)) { return false; } } return true; } return false; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 由于这里的rootDomain是我们自己指定的不一定是topPrivate。 * 比如 examplepay.example.sg 和examplepay.example.io 应该返回false * 比如 examplepay.example.sg example.io 应该返回true * <p> * 关键看rootDomain是不是topPrivate * * @param domain * @param rootDomain * @return */ public static boolean isTLDDomainOfTopPrivate(String domain, String rootDomain) { try { if (isTLDDomain(domain, rootDomain)) { return !InternetDomainName.from(rootDomain).hasParent(); } return false; } catch (IllegalArgumentException e) { return false; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 将域名或IP拼接成URL * * @param host 如果想要指定自定义端口,传入类似baidu.com:8888的形式即可 * @return */ public static List<URL> toURLs(String host) { List<URL> result = new ArrayList<>(); if (host == null) return result; host = host.trim(); int port = -1; if (IPAddressUtils.isValidIPv4MayPort(host) || DomainUtils.isValidDomainMayPort(host)) { try { if (host.contains(":")) { host = host.split(":")[0]; port = Integer.parseInt(host.split(":")[1]); } } catch (Exception e) { return result; } } try { result.add(new URL(String.format("http://%s:%s/", host, 80))); result.add(new URL(String.format("https://%s:%s/", host, 443))); if (port == -1 || port == 80 || port == 443) { //Nothing to do; } else { result.add(new URL(String.format("http://%s:%s/", host, port))); result.add(new URL(String.format("https://%s:%s/", host, port))); } } catch (Exception e) { e.printStackTrace(); } return result; } public static void testWildCard() { System.out.println(isMatchWildCardDomain("*.baidu.com", "www.baidu.com")); System.out.println(isMatchWildCardDomain("*.seller.*.example.*", "xxx.xxx.seller.xxx.example.com")); System.out.println(isMatchWildCardDomain("*.seller.*.example.*", "seller.xx.example.com")); System.out.println(isMatchWildCardDomain("*.*", "aaa")); System.out.println(isMatchWildCardDomain("*.*", "aa.aa")); } public static void testWild() { System.out.println(isValidWildCardDomain("*.baidu.com")); System.out.println(isValidWildCardDomain("*.seller.*.example.com")); System.out.println(isValidWildCardDomain("*.seller.*.example.*")); System.out.println(isValidWildCardDomain("*xxx*.baidu.com")); System.out.println(isValidWildCardDomain("*.*")); } public static void main(String[] args) { //System.out.println(isWhiteListTDL("test.example.co.th","example.com")); System.out.println(isValidDomainMayPort("test-api.xxx.services:22")); //testWild(); //System.out.println(isValidWildCardDomain("aaaaaaaaa-aaaaaaaaaaaaaaa-aaaaaaaaaaaaaa.www1.baidu.com")); //System.out.println(dnsquery("www.google1.com",null)); } } ================================================ FILE: src/main/java/utilbox/HelperPlus.java ================================================ package utilbox; import burp.*; import org.apache.commons.lang3.StringUtils; import java.net.MalformedURLException; import java.net.URL; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * source code: https://github.com/bit4woo/burp-api-common/blob/master/src/main/java/burp/HelperPlus.java * author: bit4woo * github: https://github.com/bit4woo * <p> * String getHeadersAsStr(boolean isRequest,byte[] requestOrResponse) * String getHeadersAsStr(boolean messageIsRequest,IHttpRequestResponse messageInfo) * getHeaderList * getHeaderLine * getHeaderValueOf * <p> * addOrUpdateHeaderList * removeHeaderList * <p> * getBody * updateBoby #将body看做一个整体进行替换 * <p> * shorturl * url * protocol * host * port * <p> * getParameters * addParameter --Helper中已经存在 * byte[] addParameter(byte[] request, IParameter parameter); * byte[] removeParameter(byte[] request, IParameter parameter); * byte[] updateParameter(byte[] request, IParameter parameter); * Paras * <p> * method * statusCode */ public class HelperPlus { private static IExtensionHelpers helpers; private final static String Header_Split = ":"; private final static String Header_Connector = ": ";//contains space // 私有静态变量用于保存HelperPlus的唯一实例 private static volatile HelperPlus instance; // 私有构造方法,防止外部直接实例化 private HelperPlus() { this(BurpExtender.getHelpers()); } // 允许传入IExtensionHelpers的构造方法,用于测试或特殊需求 private HelperPlus(IExtensionHelpers helpers) { this.helpers = helpers; } // 提供一个公共的静态方法来获取HelperPlus的实例 public static HelperPlus getInstance() { // 双重检查锁定 if (instance == null) { synchronized (HelperPlus.class) { if (instance == null) { instance = new HelperPlus(); } } } return instance; } /** * 返回HTTP请求或响应的整个header头部分,与body相对应 */ public String getHeadersAsStr(boolean isRequest, byte[] requestOrResponse) { if (requestOrResponse == null) { return ""; } int bodyOffset = -1; if (isRequest) { IRequestInfo analyzeRequest = helpers.analyzeRequest(requestOrResponse); bodyOffset = analyzeRequest.getBodyOffset(); } else { IResponseInfo analyzeResponse = helpers.analyzeResponse(requestOrResponse); bodyOffset = analyzeResponse.getBodyOffset(); } byte[] byte_header = Arrays.copyOfRange(requestOrResponse, 0, bodyOffset);//not length-1 return new String(byte_header); } /** * 返回HTTP请求或响应的整个header头部分,与body相对应 */ public String getHeadersAsStr(boolean messageIsRequest, IHttpRequestResponse messageInfo) { if (messageInfo == null) { return ""; } byte[] requestOrResponse = null; if (messageIsRequest) { requestOrResponse = messageInfo.getRequest(); } else { requestOrResponse = messageInfo.getResponse(); } return getHeadersAsStr(messageIsRequest, requestOrResponse); } /** * 获取header的字符串数组,是构造burp中请求需要的格式。 * return headers list */ public List<String> getHeaderList(boolean messageIsRequest, IHttpRequestResponse messageInfo) { if (null == messageInfo) { return new ArrayList<>(); } byte[] requestOrResponse; if (messageIsRequest) { requestOrResponse = messageInfo.getRequest(); } else { requestOrResponse = messageInfo.getResponse(); } return getHeaderList(messageIsRequest, requestOrResponse); } /** * 获取请求包或者响应包中的header List */ public List<String> getHeaderList(boolean IsRequest, byte[] requestOrResponse) { if (null == requestOrResponse) { return new ArrayList<>(); } if (IsRequest) { IRequestInfo analyzeRequest = helpers.analyzeRequest(requestOrResponse); return analyzeRequest.getHeaders(); } else { IResponseInfo analyzeResponse = helpers.analyzeResponse(requestOrResponse); return analyzeResponse.getHeaders(); } } /** * 新增或更新header * * @param headerLine header的一整行 */ public static List<String> addOrUpdateHeader(List<String> headers, String headerLine) { if (headerLine.contains(":")) { String[] parts = headerLine.split(Header_Split, 2); if (parts.length == 2) { String headerName = parts[0].trim(); String headerValue = parts[1].trim(); return addOrUpdateHeader(headers, headerName, headerValue); } } return headers; } /** * 新增或更新header */ public static List<String> addOrUpdateHeader(List<String> headers, String headerName, String headerValue) { Iterator<String> iterator = headers.iterator(); while (iterator.hasNext()) { String header = iterator.next(); if (header.contains(":")) { String[] parts = header.split(Header_Split, 2);//这里的limit=2 可以理解成分割成2份,否则referer可能别分成3份 if (parts.length == 2) { String headerNameOrigin = parts[0].trim(); if (headerNameOrigin.equalsIgnoreCase(headerName)) { iterator.remove(); headers.add(headerName + Header_Connector + headerValue); return headers; } } } } headers.add(headerName + Header_Connector + headerValue); return headers; } /** * 新增或更新header * * @param headerLine header的一整行 */ public IHttpRequestResponse addOrUpdateHeader(boolean messageIsRequest, IHttpRequestResponse messageInfo, String headerLine) { List<String> headers = getHeaderList(messageIsRequest, messageInfo); byte[] body = getBody(messageIsRequest, messageInfo); headers = addOrUpdateHeader(headers, headerLine); byte[] RequestOrResponse = helpers.buildHttpMessage(headers, body); if (messageIsRequest) { messageInfo.setRequest(RequestOrResponse); } else { messageInfo.setResponse(RequestOrResponse); } return messageInfo; } /** * 新增或更新header */ public IHttpRequestResponse addOrUpdateHeader(boolean messageIsRequest, IHttpRequestResponse messageInfo, String headerName, String headerValue) { List<String> headers = getHeaderList(messageIsRequest, messageInfo); byte[] body = getBody(messageIsRequest, messageInfo); headers = addOrUpdateHeader(headers, headerName, headerValue); byte[] RequestOrResponse = helpers.buildHttpMessage(headers, body); if (messageIsRequest) { messageInfo.setRequest(RequestOrResponse); } else { messageInfo.setResponse(RequestOrResponse); } return messageInfo; } /** * 新增或更新header */ public byte[] addOrUpdateHeader(boolean isRequest, byte[] requestOrResponse, String headerLine) { List<String> headers = getHeaderList(isRequest, requestOrResponse); byte[] body = getBody(isRequest, requestOrResponse); headers = addOrUpdateHeader(headers, headerLine); return helpers.buildHttpMessage(headers, body); } /** * 新增或更新header */ public byte[] addOrUpdateHeader(boolean isRequest, byte[] requestOrResponse, String headerName, String headerValue) { List<String> headers = getHeaderList(isRequest, requestOrResponse); byte[] body = getBody(isRequest, requestOrResponse); headers = addOrUpdateHeader(headers, headerName, headerValue); return helpers.buildHttpMessage(headers, body); } /** * 删除header */ public static List<String> removeHeader(List<String> headers, String headerNameOrHeaderLine) { Iterator<String> it = headers.iterator(); while (it.hasNext()) { String header = it.next(); String headerName = header.split(Header_Split, 2)[0].trim(); if (headerNameOrHeaderLine.length() >= headerName.length()) { //至少要匹配head头 if (header.toLowerCase().startsWith(headerNameOrHeaderLine.toLowerCase().trim())) { it.remove(); } } } return headers; } /** * 删除header */ public IHttpRequestResponse removeHeader(boolean messageIsRequest, IHttpRequestResponse messageInfo, String headerNameOrHeaderLine) { List<String> headers = getHeaderList(messageIsRequest, messageInfo); byte[] body = getBody(messageIsRequest, messageInfo); headers = removeHeader(headers, headerNameOrHeaderLine); byte[] RequestOrResponse = helpers.buildHttpMessage(headers, body); if (messageIsRequest) { messageInfo.setRequest(RequestOrResponse); } else { messageInfo.setResponse(RequestOrResponse); } return messageInfo; } /** * 删除特定的header。 */ public byte[] removeHeader(boolean isRequest, byte[] requestOrResponse, String headerNameOrHeaderLine) { List<String> headers = getHeaderList(isRequest, requestOrResponse); byte[] body = getBody(isRequest, requestOrResponse); headers = removeHeader(headers, headerNameOrHeaderLine); return helpers.buildHttpMessage(headers, body); } /** * 获取某个header的整行,如果没有此header,返回null,以header的名称作为查找依据。 */ public static String getHeaderLine(List<String> headers, String headerName) { if (null == headers || headerName == null) return null; for (String header : headers) { if (header.contains(":")) { String[] parts = header.split(Header_Split, 2); if (parts.length == 2) { String headerNameOrigin = parts[0].trim(); if (headerNameOrigin.equalsIgnoreCase(headerName)) { return header; } } } } return null; } /** * 获取某个header的整行,如果没有此header,返回null,以header的名称作为查找依据。 */ public String getHeaderLine(boolean messageIsRequest, IHttpRequestResponse messageInfo, String headerName) { List<String> headers = getHeaderList(messageIsRequest, messageInfo); return getHeaderLine(headers, headerName); } /** * 获取某个header的整行,如果没有此header,返回null,以header的名称作为查找依据。 */ public String getHeaderLine(boolean messageIsRequest, byte[] requestOrResponse, String headerName) { List<String> headers = getHeaderList(messageIsRequest, requestOrResponse); return getHeaderLine(headers, headerName); } /** * 获取某个header的值,如果没有此header,返回null。 */ public static String getHeaderValueOf(List<String> headers, String headerName) { if (null == headers || headerName == null) return null; for (String header : headers) { if (header.contains(":")) { String[] parts = header.split(Header_Split, 2); if (parts.length == 2) { String headerNameOrigin = parts[0].trim(); String headerValue = parts[1].trim(); if (headerNameOrigin.equalsIgnoreCase(headerName)) { return headerValue; } } } } return null; } /** * 获取某个header的值,如果没有此header,返回null。 */ public String getHeaderValueOf(boolean messageIsRequest, IHttpRequestResponse messageInfo, String headerName) { List<String> headers = getHeaderList(messageIsRequest, messageInfo); return getHeaderValueOf(headers, headerName); } /** * 获取某个header的值,如果没有此header,返回null。 */ public String getHeaderValueOf(boolean messageIsRequest, byte[] requestOrResponse, String headerName) { List<String> headers = getHeaderList(messageIsRequest, requestOrResponse); return getHeaderValueOf(headers, headerName); } /** * 获取数据包的body */ public static byte[] getBody(boolean isRequest, byte[] requestOrResponse) { if (requestOrResponse == null) { return null; } int bodyOffset = -1; if (helpers != null) { if (isRequest) { IRequestInfo analyzeRequest = helpers.analyzeRequest(requestOrResponse); bodyOffset = analyzeRequest.getBodyOffset(); } else { IResponseInfo analyzeResponse = helpers.analyzeResponse(requestOrResponse); bodyOffset = analyzeResponse.getBodyOffset(); } } else { bodyOffset = ByteArrayUtils.BytesIndexOf("\r\n\r\n".getBytes(), requestOrResponse); bodyOffset = bodyOffset + 4; } return Arrays.copyOfRange(requestOrResponse, bodyOffset, requestOrResponse.length); } /** * 获取数据包的body */ public static byte[] getBody(boolean messageIsRequest, IHttpRequestResponse messageInfo) { if (messageInfo == null) { return null; } byte[] requestOrResponse = null; if (messageIsRequest) { requestOrResponse = messageInfo.getRequest(); } else { requestOrResponse = messageInfo.getResponse(); } return getBody(messageIsRequest, requestOrResponse); } /** * 更新数据包的body */ public IHttpRequestResponse UpdateBody(boolean messageIsRequest, IHttpRequestResponse messageInfo, byte[] body) { List<String> headers = getHeaderList(messageIsRequest, messageInfo); byte[] RequestOrResponse = helpers.buildHttpMessage(headers, body); if (messageIsRequest) { messageInfo.setRequest(RequestOrResponse); } else { messageInfo.setResponse(RequestOrResponse); } return messageInfo; } /** * 更新数据包的body */ public byte[] UpdateBody(boolean isRequest, byte[] requestOrResponse, byte[] body) { List<String> headers = getHeaderList(isRequest, requestOrResponse); return helpers.buildHttpMessage(headers, body); } /** * @param service * @return http://www.baidu.com/ 不包含默认端口;包含默认path(/) */ public static String getBaseURL(IHttpService service) { //String shortUrlString = messageInfo.getHttpService().toString();//http://www.baidu.com //新版本burp中,API发生了变化,返回结果是这种burp.Ze6r@7f06cf44/ if (service == null) { return null; } String shortUrlString = service.getProtocol() + "://" + service.getHost() + ":" + service.getPort() + "/"; shortUrlString = removeUrlDefaultPort(shortUrlString); return shortUrlString; } /** * return Type is URL,not String. * use equal() function to compare URL object. the string contains default port or not both OK, but the path(/) is sensitive * URL对象可以用它自己提供的equal()函数进行对比,是否包含默认端口都是没有关系的。但最后的斜杠path却是有关系的。 * <p> * 不包含默认端口的URL格式,符合通常浏览器中的格式 * http://bit4woo.com/test.html#123 */ public final URL getFullURL(IHttpRequestResponse messageInfo) { if (null == messageInfo) return null; IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo); String tmpurl = analyzeRequest.getUrl().toString(); tmpurl = removeUrlDefaultPort(tmpurl); try { return new URL(tmpurl); } catch (MalformedURLException e) { e.printStackTrace(); return null; } } public final URL getFullURL(IHttpService httpService, byte[] request) { if (null == request) return null; IRequestInfo analyzeRequest = helpers.analyzeRequest(httpService,request); String tmpurl = analyzeRequest.getUrl().toString(); tmpurl = removeUrlDefaultPort(tmpurl); try { return new URL(tmpurl); } catch (MalformedURLException e) { e.printStackTrace(); return null; } } /** * return Type is URL,not String. * use equal() function to compare URL object. the string contains default port or not both OK, but the path(/) is sensitive * URL对象可以用它自己提供的equal()函数进行对比,是否包含默认端口都是没有关系的。但最后的斜杠path却是有关系的。 * <p> * 这个函数的返回结果转换成字符串是包含了默认端口的。 * http://bit4woo.com:80/test.html#123 */ public final URL getFullURLWithDefaultPort(IHttpRequestResponse messageInfo) { if (null == messageInfo) return null; IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo); return analyzeRequest.getUrl(); } /** * 1、这个函数的目的是:在【浏览器URL】的基础上,加上默认端口。 * <p> * https://www.baidu.com/ ---> https://www.baidu.com:443/ * http://www.baidu.com ---> http://www.baidu.com:80/ * <p> * 在浏览器中,我们看到的是 baidu.com, 复制粘贴得到的是 https://www.baidu.com/ * let url String contains default port(80\443) and default path(/) * <p> * burp中获取到的URL是包含默认端口的,但是平常浏览器中的URL格式都是不包含默认端口的。 * 应该尽量和平常使用习惯保存一致!所以尽量避免使用该函数。 * * @param urlStr * @return */ public static String addUrlDefaultPort(String urlStr) { try { URL url = new URL(urlStr); String host = url.getHost(); int port = url.getPort(); String path = url.getPath(); if (port == -1) { String newHost = url.getHost() + ":" + url.getDefaultPort(); urlStr = urlStr.replaceFirst(host, newHost); } if (path.equals("")) { urlStr = urlStr + "/"; } return new URL(urlStr).toString(); } catch (MalformedURLException e) { e.printStackTrace(); return urlStr; } } /** * 1.remove default port(80\443) from the url * 2.add default path(/) to the url,if it's empty * 这个函数的目的是让URL的格式和通常从浏览器中复制的格式一致: * 在浏览器中,我们看到的是 baidu.com, 复制粘贴得到的是 https://www.baidu.com/ * <p> * 比如 * http://bit4woo.com:80/ ---> http://bit4woo.com/ * https://bit4woo.com:443 ---> https://bit4woo.com/ */ public static String removeUrlDefaultPort(String urlString) { try { URL url = new URL(urlString); String protocol = url.getProtocol(); String host = url.getHost(); int port = url.getPort();//不包含端口时返回-1 String path = url.getPath(); if ((port == 80 && protocol.equalsIgnoreCase("http")) || (port == 443 && protocol.equalsIgnoreCase("https"))) { String oldHost = url.getHost() + ":" + url.getPort(); urlString = urlString.replaceFirst(oldHost, host); } if (path.equals("")) { urlString = urlString + "/"; } return new URL(urlString).toString(); } catch (MalformedURLException e) { e.printStackTrace(); return urlString; } } public static String getHost(IHttpRequestResponse messageInfo) { return messageInfo.getHttpService().getHost(); } public static String getProtocol(IHttpRequestResponse messageInfo) { return messageInfo.getHttpService().getProtocol(); } public static int getPort(IHttpRequestResponse messageInfo) { return messageInfo.getHttpService().getPort(); } public short getStatusCode(IHttpRequestResponse messageInfo) { if (messageInfo == null || messageInfo.getResponse() == null) { return -1; } IResponseInfo analyzedResponse = helpers.analyzeResponse(messageInfo.getResponse()); return analyzedResponse.getStatusCode(); } public short getStatusCode(byte[] response) { if (response == null) { return -1; } try { IResponseInfo analyzedResponse = helpers.analyzeResponse(response); return analyzedResponse.getStatusCode(); } catch (Exception e) { return -1; } } public List<IParameter> getParameters(IHttpRequestResponse messageInfo) { IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo); return analyzeRequest.getParameters(); } public List<IParameter> getParameters(byte[] request) { IRequestInfo analyzeRequest = helpers.analyzeRequest(request); return analyzeRequest.getParameters(); } /** * 使用burp.IExtensionHelpers.getRequestParameter(byte[], String),未考虑同名参数的情况! */ public IParameter getParameterByKey(IHttpRequestResponse messageInfo, String key) { return helpers.getRequestParameter(messageInfo.getRequest(), key); } public IParameter getParameterByKey(byte[] request, String key) { return helpers.getRequestParameter(request, key); } /** * 根据参数的key查找IParameter对象,考虑了同名函数的情况,但这种情况很少,几乎用不上。 * 尽量不要使用这个函数 */ @Deprecated public static List<IParameter> findParametersByKey(List<IParameter> parameters, String key) { List<IParameter> result = new ArrayList<IParameter>(); for (IParameter para : parameters) { if (para.getName().equalsIgnoreCase(key)) { result.add(para); } } return result; } /** * 根据参数的key和type查找IParameter对象 * 考虑了同名函数的情况,但这种情况很少,几乎用不上 * 尽量不要使用这个函数 */ @Deprecated public static List<IParameter> findParametersByKeyAndType(List<IParameter> parameters, String key, byte type) { List<IParameter> result = new ArrayList<IParameter>(); for (IParameter para : parameters) { if (para.getName().equalsIgnoreCase(key) && para.getType() == type) { result.add(para); } } return result; } /** * 考虑了同名函数的情况,但这种情况很少,几乎用不上 * 尽量不要使用这个函数 */ @Deprecated public List<IParameter> getParametersByKeyAndType(IHttpRequestResponse messageInfo, String key, byte type) { IRequestInfo analyzeRequest = helpers.analyzeRequest(messageInfo); List<IParameter> paras = analyzeRequest.getParameters(); return findParametersByKeyAndType(paras, key, type); } /** * 考虑了同名函数的情况,但这种情况很少,几乎用不上 * 尽量不要使用这个函数 */ @Deprecated public List<IParameter> getParametersByKeyAndType(byte[] request, String key, byte type) { IRequestInfo analyzeRequest = helpers.analyzeRequest(request); return findParametersByKeyAndType(analyzeRequest.getParameters(), key, type); } public IHttpRequestResponse addOrUpdateParameter(IHttpRequestResponse messageInfo, IParameter para) { byte[] request = messageInfo.getRequest(); request = addOrUpdateParameter(request, para); messageInfo.setRequest(request); return messageInfo; } public byte[] addOrUpdateParameter(byte[] request, IParameter para) { IParameter existPara = helpers.getRequestParameter(request, para.getName()); if (null != existPara) { request = helpers.removeParameter(request, existPara); } request = helpers.addParameter(request, para); return request; } public IHttpRequestResponse removeParameter(IHttpRequestResponse messageInfo, IParameter parameter) { byte[] request = messageInfo.getRequest(); request = helpers.removeParameter(request, parameter); messageInfo.setRequest(request); return messageInfo; } public String getMethod(IHttpRequestResponse messageInfo) { if (messageInfo == null || messageInfo.getRequest() == null) { return null; } IRequestInfo analyzedRequest = helpers.analyzeRequest(messageInfo.getRequest()); return analyzedRequest.getMethod(); } public String getMethod(byte[] request) { if (request == null) { return null; } try { IRequestInfo analyzedRequest = helpers.analyzeRequest(request); return analyzedRequest.getMethod(); } catch (Exception e) { return null; } } public String detectCharset(boolean isRequest, byte[] requestOrResponse) { String contentType = getHeaderValueOf(isRequest, requestOrResponse, "Content-Type"); //1、尝试从contentTpye中获取 if (contentType != null) { if (contentType.toLowerCase().contains("charset=")) { String tmpcharSet = contentType.toLowerCase().split("charset=")[1]; if (StringUtils.isNotEmpty(tmpcharSet)) { return CharsetUtils.getCharsetName(tmpcharSet); } } } String charset = detectCharsetInBody(isRequest, requestOrResponse); if (StringUtils.isNotEmpty(charset)) { return CharsetUtils.getCharsetName(charset); } return CharsetUtils.detectCharset(requestOrResponse); } /** * 尝试在响应包中寻找meta charset的标签,来判别响应包的编码 * <p> * 一些常见格式: * <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> * <meta charset="UTF-8"> * <meta charset="utf-8"> * <meta charset=utf-8> * <meta http-equiv="Content-Language" content="zh-CN"> * <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> * <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> * <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> */ public static String detectCharsetInBody(boolean isRequest, byte[] requestOrResponse) { String body = new String(getBody(isRequest, requestOrResponse)); String pattern = "charset=(.*?)[\"/\\s>]+";//加? 非贪婪模式 Pattern metaCharset = Pattern.compile(pattern); Matcher matcher = metaCharset.matcher(body); if (matcher.find()) {//多次查找 String charset = matcher.group(1); return charset; } return null; } public boolean isJSON(byte[] content, boolean isRequest) { if (isRequest) { IRequestInfo requestInfo = helpers.analyzeRequest(content); return requestInfo.getContentType() == IRequestInfo.CONTENT_TYPE_JSON; } else { IResponseInfo responseInfo = helpers.analyzeResponse(content); String dataType = responseInfo.getStatedMimeType().toLowerCase(); String inferDataType = responseInfo.getInferredMimeType().toLowerCase(); return dataType.contains("json") || inferDataType.contains("json"); } } /** * 判断数据包的内容,是否是HTML(主要用于判断响应包) * * @param content * @param isRequest * @return */ public boolean isHtml(byte[] content, boolean isRequest) { if (isRequest) { return false; } else { IResponseInfo responseInfo = helpers.analyzeResponse(content); String dataType = responseInfo.getStatedMimeType().toLowerCase(); String inferDataType = responseInfo.getInferredMimeType().toLowerCase(); return dataType.contains("html") || inferDataType.contains("html"); } } /** * 判断数据包的内容,是否是JavaScript(主要用于判断响应包) * * @param content * @param isRequest * @return */ public boolean isJavaScript(byte[] content, boolean isRequest) { if (isRequest) { return false; } else { IResponseInfo responseInfo = helpers.analyzeResponse(content); String dataType = responseInfo.getStatedMimeType().toLowerCase(); String inferDataType = responseInfo.getInferredMimeType().toLowerCase(); return dataType.contains("script") || inferDataType.contains("script"); } } public String getHTTPBasicCredentials(IHttpRequestResponse messageInfo) throws Exception { String authHeader = getHeaderValueOf(true, messageInfo, "Authorization").trim(); String[] parts = authHeader.split("\\s"); if (parts.length != 2) throw new Exception("Wrong number of HTTP Authorization header parts"); if (!parts[0].equalsIgnoreCase("Basic")) throw new Exception("HTTP authentication must be Basic"); return parts[1]; } private static void test1() { List<String> headerList = new ArrayList<String>(); headerList.add("User-Agent: sssss"); headerList.add("Use: sssss"); headerList.add("User: sssss"); headerList.add("Agent: sssss"); List<String> newHeader = removeHeader(headerList, "Use"); System.out.println(newHeader.toString()); newHeader = addOrUpdateHeader(headerList, "Use1", "xxxx"); System.out.println(newHeader.toString()); } private static void test2() { String url = "http://www.baidu.com"; String url2 = "https://www.baidu.com:443"; System.out.println(addUrlDefaultPort(url)); System.out.println(removeUrlDefaultPort(url2)); System.out.println(removeUrlDefaultPort(url)); System.out.println(addUrlDefaultPort(url)); } public static void main(String args[]) { test2(); } } ================================================ FILE: src/main/java/utilbox/IPAddressUtils.java ================================================ package utilbox; import inet.ipaddr.AddressStringException; import inet.ipaddr.IPAddress; import inet.ipaddr.IPAddressSeqRange; import inet.ipaddr.IPAddressString; import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.util.SubnetUtils; import org.apache.commons.net.util.SubnetUtils.SubnetInfo; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * */ public class IPAddressUtils { //和RegexUtils.IP_ADDRESS_STRING一模一样 public static final String REGEX_TO_GREP_IP_ADDRESS_STRING_NO_PORT = "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]" + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]" + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}" + "|[1-9][0-9]|[0-9]))"; public static final String REGEX_TO_GREP_IP_ADDRESS_STRING_MAY_WITH_PORT = REGEX_TO_GREP_IP_ADDRESS_STRING_NO_PORT + "(?::\\d{1,5})?"; public static final String REGEX_TO_GREP_SUBNET = "\\d{1,3}(?:\\.\\d{1,3}){3}(?:/\\d{1,2})?"; /** * 判断是否是合格的IPv4格式 * 支持 11.02.03.04的格式 * * @param ip * @return */ public static boolean isValidIPv4NoPort(String ip) { if (ip == null || ip.isEmpty()) { return false; } String[] parts = ip.split("\\."); if (parts.length != 4) { return false; } for (String s : parts) { try { int i = Integer.parseInt(s); if ((i < 0) || (i > 255)) { return false; } } catch (NumberFormatException e) { return false; } } //TODO check return !ip.endsWith("."); } public static boolean isPrivateIPv4NoPort(String ipAddress) { try { // 验证IP地址的格式 if (!isValidIPv4NoPort(ipAddress)) { return false; } String[] ipAddressArray = ipAddress.split("\\."); int[] ipParts = new int[ipAddressArray.length]; for (int i = 0; i < ipAddressArray.length; i++) { ipParts[i] = Integer.parseInt(ipAddressArray[i].trim()); } // 检查IP地址的范围 if (ipParts[0] == 10 || (ipParts[0] == 172 && ipParts[1] >= 16 && ipParts[1] < 32) || (ipParts[0] == 192 && ipParts[1] == 168) || (ipParts[0] == 169 && ipParts[1] == 254)) { return true; } } catch (Exception ex) { return false; } return false; } public static boolean isPublicIPv4NoPort(String ipAddress) { return isValidIPv4NoPort(ipAddress) && !isPrivateIPv4NoPort(ipAddress); } /** * 是否是有效的端口 * * @param port * @return */ public static boolean isValidPort(String port) { try { int portInt = Integer.parseInt(port); if (portInt >= 0 && portInt <= 65535) { return true; } } catch (NumberFormatException e) { return false; } return false; } public static boolean isValidPort(int portInt) { return portInt >= 0 && portInt <= 65535; } private static String[] parseIPAndPort(String input) { if (StringUtils.isEmpty(input)) { return new String[]{null, null}; } if (input.contains(":")) { String[] parts = input.split(":"); if (parts.length == 2) { return parts; } else { return new String[]{null, null}; } } else { return new String[]{input, null}; } } /** * 可以包含IP,也可以不包含 * 校验字符串是否是一个合格的IP地址 * 会发现如下类型的IP,是有效的IP地址,但是实际情况却不会有人这么写。 * 应当从我们的正则中剔除 * PING 181.002.245.007 (181.2.245.7): 56 data bytes * * @param ip * @return */ public static boolean isValidIPv4MayPort(String ip) { String[] parts = parseIPAndPort(ip); if (!isValidIPv4NoPort(parts[0])) { return false; } if (StringUtils.isNotEmpty(parts[1])) { return isValidPort(parts[1]); } else { return true; } } public static boolean isPrivateIPv4MayPort(String ip) { String[] parts = parseIPAndPort(ip); if (isPrivateIPv4NoPort(parts[0])) { if (StringUtils.isNotEmpty(parts[1])) { return isValidPort(parts[1]); } else { return true; } } else { return false; } } public static boolean isPublicIPv4MayPort(String ip) { String[] parts = parseIPAndPort(ip); if (isPublicIPv4NoPort(parts[0])) { if (StringUtils.isNotEmpty(parts[1])) { return isValidPort(parts[1]); } else { return true; } } else { return false; } } public static boolean isValidSubnet(String subnet) { if (subnet == null) return false; subnet = subnet.replaceAll(" ", ""); if (subnet.contains("/")) { String[] parts = subnet.split("/"); if (parts.length == 2) { String ippart = parts[0]; if (!isValidIPv4NoPort(ippart)) { return false; } try { int num = Integer.parseInt(parts[1]); if (num > 0 && num < 32) { return true; } } catch (NumberFormatException e) { return false; } } } else if (subnet.contains("-")) { String[] parts = subnet.split("-"); if (parts.length == 2) { String startIP = parts[0]; String endIP = parts[1]; if (isValidIPv4NoPort(startIP) && isValidIPv4NoPort(endIP)) { long start = ipToLong(startIP); long end = ipToLong(endIP); if (start <= end) { return true; } } } } return false; } public static long ipToLong(String ipAddress) { String[] ipParts = ipAddress.split("\\."); long ipLong = 0; for (int i = 0; i < 4; i++) { ipLong += Long.parseLong(ipParts[i]) << (24 - (8 * i)); } return ipLong; } public static Set<String> toClassCSubNets(Set<String> IPSet) { Set<String> subNets = new HashSet<>(); for (String ip : IPSet) { ip = ipClean(ip); if (isValidIPv4NoPort(ip)) { String subnet = ip.substring(0, ip.lastIndexOf(".")) + ".0/24"; subNets.add(subnet); } else if (isValidSubnet(ip)) {//这里的IP也可能是网段,不要被参数名称限定了 subNets.add(ip); } } return subNets; } /* * IP集合,转多个CIDR,smaller newtworks than Class C Networks */ public static Set<String> toSmallerSubNets(Set<String> IPSet) { Set<String> subNets = toClassCSubNets(IPSet); Set<String> smallSubNets = new HashSet<>(); for (String CNet : subNets) {//把所有IP按照C段进行分类 SubnetUtils net = new SubnetUtils(CNet); Set<String> tmpIPSet = new HashSet<>(); for (String ip : IPSet) { ip = ipClean(ip); if (isValidSubnet(ip)) {//这里的IP也可能是网段,不要被参数名称限定了 smallSubNets.add(ip); continue; } if (!isValidIPv4NoPort(ip)) { continue; } if (net.getInfo().isInRange(ip) || net.getInfo().getBroadcastAddress().equals(ip.trim()) || net.getInfo().getNetworkAddress().equals(ip.trim())) { //52.74.179.0 ---sometimes .0 address is a real address. tmpIPSet.add(ip); } }//每个tmpIPSet就是一个C段的IP集合 String tmpSmallNet = ipSetToCIDR(tmpIPSet); if (StringUtils.isNotEmpty(tmpSmallNet)) { smallSubNets.add(tmpSmallNet);//把一个C段中的多个IP计算出其CIDR,即更小的网段 } } return smallSubNets; } /* To get a smaller network with a set of IP addresses */ private static String ipSetToCIDR(Set<String> IPSet) { try { if (IPSet == null || IPSet.size() <= 0) { return null; } if (IPSet.size() == 1) { return IPSet.toArray(new String[0])[0]; } List<String> list = new ArrayList<>(IPSet); SubnetUtils oldsamllerNetwork = new SubnetUtils(list.get(0).trim() + "/24"); for (int mask = 24; mask <= 32; mask++) { //System.out.println(mask); SubnetUtils samllerNetwork = new SubnetUtils(list.get(0).trim() + "/" + mask); for (String ip : IPSet) { ip = ipClean(ip); if (!isValidIPv4NoPort(ip)) { System.out.println(ip + "invalid IP address, skip to handle it!"); continue; } if (samllerNetwork.getInfo().isInRange(ip) || samllerNetwork.getInfo().getBroadcastAddress().equals(ip.trim()) || samllerNetwork.getInfo().getNetworkAddress().equals(ip.trim())) { //52.74.179.0 ---sometimes .0 address is a real address. continue; } else { String networkaddress = oldsamllerNetwork.getInfo().getNetworkAddress(); String tmpmask = oldsamllerNetwork.getInfo().getNetmask(); return new SubnetUtils(networkaddress, tmpmask).getInfo().getCidrSignature(); } } oldsamllerNetwork = samllerNetwork; } return null; } catch (Exception e) { throw e; } } public static String ipClean(String ip) { ip = ip.trim(); if (ip.endsWith(".")) { ip = ip.substring(0, ip.lastIndexOf(".")); } if (ip.contains(":")) { ip = ip.substring(0, ip.lastIndexOf(":")); } return ip; } /* * 多个网段转IP集合,变更表现形式,变成一个个的IP */ public static Set<String> toIPSet(Set<String> subNets) { List<String> result = toIPList(new ArrayList<>(subNets)); return new HashSet<>(result); } public static List<String> toIPList(String subnet) { List<String> IPList = new ArrayList<String>(); try { if (subnet.contains(":")) { return IPList;//暂时先不处理IPv6,需要研究一下 //TODO } if (subnet.contains("/")) { SubnetUtils net = new SubnetUtils(subnet); SubnetInfo xx = net.getInfo(); String[] ips = xx.getAllAddresses(); IPList.add(xx.getNetworkAddress());//.0 IPList.addAll(Arrays.asList(ips)); IPList.add(xx.getBroadcastAddress());//.255 } else if (subnet.contains("-")) {//178.170.186.0-178.170.186.255 String[] ips = subnet.split("-"); if (ips.length == 2) { String startip = ips[0].trim(); String endip = ips[1].trim(); //System.out.println(startip); //System.out.println(endip); IPAddressString string1 = new IPAddressString(startip); IPAddressString string2 = new IPAddressString(endip); IPAddress addr1 = string1.getAddress(); IPAddress addr2 = string2.getAddress(); IPAddressSeqRange range = addr1.toSequentialRange(addr2); Iterator<? extends IPAddress> it = range.iterator(); while (it.hasNext()) { IPAddress item = it.next(); //System.out.println(item.toString()); IPList.add(item.toString()); } } } else { //单IP IPList.add(subnet); } } catch (Exception e) { e.printStackTrace(); } return IPList; } public static List<String> toIPList(List<String> subNets) { List<String> IPList = new ArrayList<>(); for (String subnet : subNets) { IPList.addAll(toIPList(subnet)); } return IPList; } /** * 检查一个IP地址是否在给定的范围内 * * @param inputIP * @param rangeStartIP * @param rangeEndIP * @return * @throws AddressStringException */ public static boolean IsInRange(String inputIP, String rangeStartIP, String rangeEndIP) throws AddressStringException { IPAddress startIPAddress = new IPAddressString(rangeStartIP).getAddress(); IPAddress endIPAddress = new IPAddressString(rangeEndIP).getAddress(); IPAddressSeqRange ipRange = startIPAddress.toSequentialRange(endIPAddress); IPAddress inputIPAddress = new IPAddressString(inputIP).toAddress(); return ipRange.contains(inputIPAddress); } /** * 提取IP,不带端口 * * @param text * @return */ public static List<String> grepIPv4NoPort(String text) { return TextUtils.grepWithRegex(text, REGEX_TO_GREP_IP_ADDRESS_STRING_NO_PORT); } /** * 优先匹配带端口的IP:port格式,没有端口,则匹配纯IP格式 * * @param text * @return */ public static List<String> grepIPv4MayPort(String text) { return TextUtils.grepWithRegex(text, REGEX_TO_GREP_IP_ADDRESS_STRING_MAY_WITH_PORT); } public static List<String> grepPrivateIPv4NoPort(String text) { List<String> result = new ArrayList<>(); List<String> lines = grepIPv4NoPort(text); for (String line : lines) { if (isPrivateIPv4NoPort(line)) { result.add(line); } } return result; } public static List<String> grepPrivateIPv4MayPort(String text) { List<String> result = new ArrayList<>(); List<String> lines = grepIPv4MayPort(text); for (String line : lines) { if (isPrivateIPv4MayPort(line)) { result.add(line); } } return result; } public static List<String> grepPublicIPv4NoPort(String text) { List<String> result = new ArrayList<>(); List<String> lines = grepIPv4NoPort(text); for (String line : lines) { if (isPublicIPv4NoPort(line)) { result.add(line); } } return result; } public static List<String> grepPublicIPv4MayPort(String text) { List<String> result = new ArrayList<>(); List<String> lines = grepIPv4MayPort(text); for (String line : lines) { if (isPublicIPv4MayPort(line)) { result.add(line); } } return result; } /** * 查找masscan结果中的port * * @param text * @return */ public static List<String> grepPort(String text) { return TextUtils.grepWithRegex(text, "(\\d{1,6})"); } /** * 提取网段信息 比如143.11.99.0/24 * * @param text * @return */ public static List<String> grepSubnet(String text) { return TextUtils.grepWithRegex(text, REGEX_TO_GREP_SUBNET); } public static boolean isPrivateIPv6(String ipAddress) { try { // 验证IPv6地址的格式 if (!isValidIPv6(ipAddress)) { return false; } String[] ipParts = ipAddress.trim().split(":"); String firstBlock = ipParts[0].toLowerCase(); // 将第一个块转换为小写字母,以方便比较 String prefix = firstBlock.substring(0, 2); // 检查IPv6地址的范围 if (firstBlock.equals("fe80") || firstBlock.equals("fc00") || firstBlock.equals("fd00") || (prefix.equals("fc") && firstBlock.length() >= 4) || (prefix.equals("fd") && firstBlock.length() >= 4)) { return true; } } catch (Exception ex) { return false; } return false; } public static boolean isValidIPv6(String ipAddress) { if (ipAddress == null || ipAddress.isEmpty()) { return false; } // IPv6地址的正则表达式 String ipv6Pattern = "^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$"; Pattern pattern = Pattern.compile(ipv6Pattern); Matcher matcher = pattern.matcher(ipAddress); return matcher.matches(); } public static void test3() { Set<String> a = new HashSet<String>(); a.add("218.213.102.6/31"); System.out.println(toIPSet(a)); Set<String> subnets = new HashSet<String>(); subnets.add("2402:db40:1::/48"); System.out.print(toIPSet(subnets)); String Domains = "121.32.249.172, 120.92.174.135, 121.32.249.171, 58.220.29.72, 120.92.158.137, 119.147.34.242, 183.52.13.154, 222.186.49.111, 113.96.181.216, 61.147.235.208, 113.96.181.217, 106.7.64.1, 119.147.156.231, 119.147.156.230, 113.96.181.211, 113.96.181.214, 172.18.21.10, 119.125.41.87, 222.186.18.241, 113.96.109.95, 14.215.23.246, 114.80.24.230, 120.92.168.45, 125.77.163.235, 113.101.214.238, 124.239.234.105, 183.2.192.234, 119.125.43.15, 183.2.192.112, 110.43.33.232, 183.2.192.235, 36.25.252.1, 14.215.172.215, 121.12.122.79, 14.215.172.217, 175.6.49.240, 14.215.172.216, 14.215.172.219, 114.80.24.231, 14.215.57.226, 119.125.115.232, 113.96.98.73, 14.215.57.228, 183.131.203.6, 58.222.35.205, 121.11.2.189, 14.215.166.95, 180.122.78.242, 14.215.172.220, 58.215.158.241, 14.215.172.221, 180.101.150.112, 58.216.87.204, 119.147.70.221, 110.76.40.240, 119.147.33.73, 116.5.154.179, 222.188.43.132, 222.188.43.130, 58.216.4.238, 183.61.168.248, 222.188.43.131, 110.43.34.66, 58.216.4.239, 183.61.168.240, 119.147.41.240, 183.61.168.241, 183.61.168.242, 42.120.0.158, 221.231.83.241, 119.147.41.248, 59.36.226.242, 222.188.43.129, 125.94.49.226, 119.147.33.66, 106.7.64.1, 113.96.154.93, 121.12.123.229, 121.11.2.240, 218.94.206.241, 183.131.185.41, 113.113.127.240, 119.96.250.129, 119.3.238.64, 61.147.235.194, 113.113.127.241, 124.232.170.15, 117.50.8.201, 59.32.49.99, 119.125.41.206, 183.6.241.1, 119.147.41.239, 175.6.153.1, 119.147.41.238, 113.96.98.82, 59.36.226.239, 59.36.226.238, 58.216.87.229, 106.117.245.1, 27.159.125.1, 183.61.241.232, 91.195.241.136, 183.6.231.203, 121.14.131.238, 121.14.131.237, 58.216.107.214, 61.147.236.11, 61.147.236.12, 113.113.127.237, 113.113.127.238, 183.136.135.216, 61.150.82.6, 183.136.135.224, 183.136.135.223, 183.136.135.222, 183.136.135.221, 183.136.135.220, 121.12.123.201, 125.94.50.238, 58.220.28.104, 183.61.241.229, 124.229.52.1, 111.73.62.1, 106.117.213.218, 183.136.135.215, 139.196.14.154, 183.136.135.213, 172.18.21.243, 111.73.62.1, 113.96.155.122, 113.96.155.121, 67.198.130.7, 222.186.16.244, 115.238.195.19, 124.239.239.229, 115.238.195.18, 222.186.16.240, 222.186.16.241, 183.134.13.131, 222.186.16.242, 183.134.13.130, 222.186.16.243, 14.215.56.243, 122.228.232.71, 14.215.56.242, 122.228.232.70, 14.215.56.240, 14.215.166.205, 222.186.16.248, 14.17.124.239, 27.148.180.224, 113.100.189.152, 110.167.162.1, 27.128.214.219, 113.96.98.102, 14.215.167.253, 183.61.13.209, 183.60.159.171, 121.11.2.200, 122.228.77.85, 121.9.212.151, 121.9.212.150, 119.125.45.46, 124.239.158.238, 115.238.195.21, 183.134.13.129, 183.131.11.46, 122.228.232.69, 122.228.232.68, 222.186.35.80, 222.186.35.81, 125.77.130.22, 115.238.195.20, 212.64.117.140, 124.239.239.230, 180.122.76.238, 121.9.212.141, 119.147.39.226, 121.9.244.86, 115.231.191.216, 121.9.244.85, 183.61.13.234, 121.9.244.84, 116.5.155.130, 222.186.35.79, 122.227.201.1, 14.215.55.228, 113.96.83.98, 121.32.249.233, 113.100.189.29, 113.96.109.243, 221.228.219.62, 61.146.189.54, 121.9.246.110, 113.96.109.246, 183.2.192.198, 58.216.4.248, 117.91.177.238, 14.215.166.116, 58.216.4.241, 121.32.249.249, 124.229.52.1, 58.216.4.240, 58.216.4.243, 219.135.59.170, 222.186.16.238, 58.216.4.242, 222.186.16.239, 14.17.124.238, 58.216.4.244, 219.132.165.61, 113.64.94.76, 113.105.231.252, 110.43.33.137, 58.223.210.225, 36.25.252.1, 61.146.176.145, 113.105.155.219, 121.11.2.199, 14.29.104.122, 119.147.70.218, 121.11.2.195, 119.147.70.216, 58.215.146.119, 61.160.228.240, 119.3.70.188, 175.6.161.1, 221.231.81.239, 221.231.81.238, 183.2.200.243, 183.60.228.248, 183.2.200.244, 110.43.33.124, 117.25.159.243, 121.12.122.120, 183.60.228.242, 14.215.167.213, 121.12.122.81, 14.29.104.112, 14.215.55.230, 183.146.212.129, 27.148.151.64, 183.146.212.135, 124.238.245.63, 183.146.212.132, 119.96.250.129, 183.146.212.137, 124.238.245.66, 183.146.212.136, 119.125.40.80, 183.146.212.131, 183.146.212.130, 183.2.200.238, 27.159.125.1, 120.92.144.250, 139.159.241.37, 120.92.169.201, 219.152.56.1, 124.115.135.1, 110.43.33.229, 120.92.168.34, 61.140.13.246, 183.52.12.176, 120.92.112.150, 115.238.195.3, 124.238.245.104, 115.238.195.4, 115.223.28.41, 115.238.195.2, 113.96.108.116, 115.238.195.7, 58.222.35.201, 113.96.108.118, 58.222.35.200, 115.238.195.5, 115.238.195.6, 120.92.78.57, 221.228.219.98, 113.94.141.53, 58.222.35.204, 106.225.223.20, 58.222.35.203, 27.128.211.1, 124.232.162.213"; Set<String> IPsOfDomain = new HashSet<>(); IPsOfDomain.addAll(Arrays.asList(Domains.split(", "))); Set<String> subnets1 = toSmallerSubNets(IPsOfDomain); System.out.println(subnets1); } public static void main(String[] args) throws AddressStringException { // test3(); List<String> iplist = IPAddressUtils.grepIPv4MayPort("https://104.17.174.7:2096"); System.out.println(iplist); } } ================================================ FILE: src/main/java/utilbox/TextUtils.java ================================================ package utilbox; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; public class TextUtils { /** * 先解Unicode,再解url,应该才是正确操作吧 * * @param line * @return */ public static String decodeAll(String line) { line = line.trim(); if (needUnicodeConvert(line)) { while (true) {//unicode解码 try { int oldlen = line.length(); line = StringEscapeUtils.unescapeJava(line); int currentlen = line.length(); if (oldlen > currentlen) { continue; } else { break; } } catch (Exception e) { //e.printStackTrace(BurpExtender.getStderr()); break;//即使出错,也要进行后续的查找 } } } if (needURLConvert(line)) { while (true) { try { int oldlen = line.length(); line = URLDecoder.decode(line, "UTF-8"); int currentlen = line.length(); if (oldlen > currentlen) { continue; } else { break; } } catch (Exception e) { //e.printStackTrace(BurpExtender.getStderr()); break;//即使出错,也要进行后续的查找 } } } return line; } public static boolean needUnicodeConvert(String str) { Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))"); //Pattern pattern = Pattern.compile("(\\\\u([A-Fa-f0-9]{4}))");//和上面的效果一样 Matcher matcher = pattern.matcher(str.toLowerCase()); if (matcher.find()) { return true; } else { return false; } } public static boolean needURLConvert(String str) { Pattern pattern = Pattern.compile("(%(\\p{XDigit}{2}))"); Matcher matcher = pattern.matcher(str.toLowerCase()); if (matcher.find()) { return true; } else { return false; } } public static List<String> grepChinese(String inputText) { // 使用正则表达式匹配中文字符 Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]+"); Matcher matcher = pattern.matcher(inputText); // 提取匹配到的中文字符 List<String> chineseCharacters = new ArrayList<String>(); while (matcher.find()) { chineseCharacters.add(matcher.group()); } return chineseCharacters; } /** * 提取两个字符串之间的内容 * * @param inputText 输入字符串 * @param start 开始标记 * @param end 结束标记 * @return 提取的字符串内容 */ public static List<String> grepBetween(String start, String end, String inputText) { // 使用正则表达式匹配中文字符 String regex = Pattern.quote(start) + "(.*?)" + Pattern.quote(end); Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); // Pattern.DOTALL 支持在多行中匹配内容 Matcher matcher = pattern.matcher(inputText); // 提取匹配到的中文字符 List<String> result = new ArrayList<String>(); while (matcher.find()) { result.add(matcher.group(0)); } return result; } /** * 换行符的可能性有三种,都必须考虑到 * * @param input * @return */ public static List<String> textToLines(String input,boolean removeEmpty,boolean doTrim) { List<String> result = new ArrayList<String>(); if (input ==null) return result; String[] lines = input.split("(\r\n|\r|\n)", -1); for (String line : lines) { if (doTrim) { line = line.trim(); } if (removeEmpty && StringUtils.isEmpty(line)) { continue; }else { result.add(line.trim()); } } return result; } /** * 默认删除空字符串、并且trim * * @param input * @return */ public static List<String> textToLines(String input) { return textToLines(input,true,true); } /** * 正则表达式提取 * * @param text * @param regex * @param caseSensitive * @param multipleLine * @return */ public static List<String> grepWithRegex(String text, String regex, boolean caseSensitive, boolean multipleLine, int indexOfCapturingGroup) { List<String> result = new ArrayList<>(); if (text == null || regex == null) { return result; } int flags = 0; if (!caseSensitive) { flags |= Pattern.CASE_INSENSITIVE; } if (multipleLine) { flags |= Pattern.DOTALL; } Pattern pRegex = Pattern.compile(regex, flags); Matcher matcher = pRegex.matcher(text); while (matcher.find()) { result.add(matcher.group(indexOfCapturingGroup)); } return result; } public static List<String> grepWithRegex(String text, String regex, boolean caseSensitive, boolean multipleLine) { return grepWithRegex(text, regex, caseSensitive, multipleLine, 0); } /** * 默认忽略大小写,单行匹配,捕获组的索引是0 * * @param text * @param regex * @return */ public static List<String> grepWithRegex(String text, String regex) { return grepWithRegex(text, regex, false, false, 0); } /** * 重后向前查找,替换匹配的第一个 * * @param string * @param toReplace * @param replacement * @return */ public static String replaceLast(String string, String toReplace, String replacement) { int pos = string.lastIndexOf(toReplace); if (pos > -1) { return string.substring(0, pos) + replacement + string.substring(pos + toReplace.length()); } else { return string; } } /** * 各种替换场景:使用正则、不使用正则、替换第一个、替换全部 * * @param text * @param from * @param to * @param replaceAll * @param useRegex * @return */ public static String replace(String text, String from, String to, boolean replaceAll, boolean useRegex) { if (text == null || from == null || to == null || from.isEmpty()) { return text; } if (!useRegex) { from = Pattern.quote(from); } try { Pattern pattern = Pattern.compile(from); if (replaceAll) { return pattern.matcher(text).replaceAll(to); } else { return pattern.matcher(text).replaceFirst(to); } //text = text.replace(from, to); String.replace(),不用正则的全部替换 } catch (PatternSyntaxException e) { throw new IllegalArgumentException("Invalid regular expression: " + from); } } /** * 文本和正则是否匹配,主要用于格式校验,比如 isValidDomain,isValidEmail等等 * * @param text * @param regex * @param caseSensitive * @param multipleLine * @return */ public static boolean isRegexMatch(String text, String regex, boolean caseSensitive, boolean multipleLine) { if (null == text || null == regex) { return false; } int flags = 0; if (!caseSensitive) { flags |= Pattern.CASE_INSENSITIVE; } if (multipleLine) { flags |= Pattern.DOTALL; } Pattern pattern = Pattern.compile(regex, flags); Matcher matcher = pattern.matcher(text); return matcher.matches(); } public static Boolean isRegexMatch(String text, String regex) { return isRegexMatch(text, regex, false, false); } /** * 获取随机字符串 * * @param length * @return */ public static String getRandomStr(int length) { String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; Random random = new Random(); char[] text = new char[length]; for (int i = 0; i < length; i++) { text[i] = str.charAt(random.nextInt(str.length())); } return new String(text); } /** * 字符串转unicode * * @param str * @return */ public static String stringToUnicode(String str) { StringBuffer sb = new StringBuffer(); char[] c = str.toCharArray(); for (int i = 0; i < c.length; i++) { sb.append("\\u" + Integer.toHexString(c[i])); } return sb.toString(); } /** * unicode转字符串 * * @param unicode * @return */ public static String unicodeToString(String unicode) { StringBuffer sb = new StringBuffer(); String[] hex = unicode.split("\\\\u"); for (int i = 1; i < hex.length; i++) { int index = Integer.parseInt(hex[i], 16); sb.append((char) index); } return sb.toString(); } public static boolean isNumeric(String str) { for (int i = str.length(); --i >= 0; ) { int chr = str.charAt(i); if (chr < 48 || chr > 57) { return false; } } return true; } /** * 通过Pattern.quote处理后,就完全是普通字符串操作了,不是正则表达式了 * * @param input * @param Prefix * @param Suffix * @return */ public static List<String> removePrefixAndSuffix(List<String> input, String Prefix, String Suffix) { ArrayList<String> result = new ArrayList<String>(); if (Prefix == null && Suffix == null) { return result; } else { if (Prefix == null) { Prefix = ""; } if (Suffix == null) { Suffix = ""; } List<String> content = input; for (String item : content) { if (item.startsWith(Prefix)) { //https://stackoverflow.com/questions/17225107/convert-java-string-to-string-compatible-with-a-regex-in-replaceall String tmp = Pattern.quote(Prefix);//自动实现正则转义 item = item.replaceFirst(tmp, ""); } if (item.endsWith(Suffix)) { String tmp = Pattern.quote(reverse(Suffix));//自动实现正则转义 item = reverse(item).replaceFirst(tmp, ""); item = reverse(item); } result.add(item); } return result; } } public static List<String> deduplicate(List<String> input) { List<String> result = new ArrayList<String>(); for (String item : input) { if (result.contains(item)) { continue; } else { result.add(item); } }//不在使用set方法去重,以便保持去重后的顺序! return result; } public static String reverse(String str) { if (str == null) { return null; } return new StringBuffer(str).reverse().toString(); } public static List<Integer> allIndexesOf(String word, String guess) { List<Integer> result = new ArrayList<Integer>(); int index = word.indexOf(guess); while (index >= 0) { result.add(index); index = word.indexOf(guess, index + 1); } return result; } /** * 判断text是否包含了至少某一个关键词。在text和keyword都是有效字符串(不为null,!="")的情况下进行判断。 * @param text * @param keywords * @param caseSensitive * @return */ public static boolean containsAny(String text,List<String> keywords,boolean caseSensitive) { if (StringUtils.isEmpty(text) || keywords.isEmpty()) { return false; } for (String keyword:keywords) { if (StringUtils.isEmpty(keyword)) { continue; } if (caseSensitive) { if (text.contains(keyword)) { return true; } }else { if (text.toLowerCase().contains(keyword.toLowerCase())) { return true; } } } return false; } public static void main(String[] args) { String item = "aaa.bbb@ccc.com".replaceFirst(".*@", ""); System.out.println(item); String[] lines = "".split("(\r\n|\r|\n)", -1); System.out.println(lines.length); System.out.println(Arrays.asList(lines).size()); } } ================================================ FILE: src/main/java/utils/AnalyseInfoUtils.java ================================================ package utils; import burp.BurpExtender; import org.apache.commons.text.StringEscapeUtils; import java.net.URI; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import static utils.BurpPrintUtils.LOG_DEBUG; import static utils.BurpPrintUtils.stderr_println; import static utils.CastUtils.isNotEmptyObj; import static utils.ElementUtils.isContainOneKey; public class AnalyseInfoUtils { private static final int RESULT_SIZE = 1024; /** * 支持自动截断的正则提取文本中的内容 * @param text * @param patter * @return */ public static Set<String> extractInfoWithChunk(String text, String patter, int chunkSize) { Set<String> groups = new HashSet<>(); try{ for (int start = 0; start < text.length(); start += chunkSize) { int end = Math.min(start + chunkSize, text.length()); String beFindContentChunk = text.substring(start, end); Pattern pattern = Pattern.compile(patter, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(beFindContentChunk); while (matcher.find()) { int groupCount = matcher.groupCount(); String group; // 检查是否有至少一个捕获组 if (groupCount > 0) { // // 如果有多个捕获组,处理多个捕获组 // List<String> groupList = new ArrayList<>(); // for (int i = 1; i <= groupCount; i++) { groupList.add(matcher.group(i)); } // group = String.join("|", groupList); //如果有多个捕获组,仅保留第一个捕获组 group = matcher.group(1); } else { // 如果没有捕获组,处理整个匹配 group = matcher.group(); // 处理 group } //格式化响应 //group = formatSensitiveInfo(group); //响应超过长度时 截断 if (group.length() > RESULT_SIZE) group = group.substring(0, RESULT_SIZE); //判断group是否存在价值 if (isUsefulValue(formatSensitiveInfo(group))) groups.add(group); } } } catch (PatternSyntaxException e) { stderr_println("[!] 正则表达式语法错误: " + patter); } catch (NullPointerException e) { stderr_println("[!] 正则表达式传入null: " + patter); } catch (Exception e){ stderr_println("[!] 匹配出现其他报错: " + e.getMessage()); e.printStackTrace(); } return groups; } /** * 判断提取的信息是否是有效的 需要持续更新 * @param group * @return */ private static boolean isUsefulValue(String group) { //String BlackValues = "admin@admin.com"; if (isContainOneKey(group, BurpExtender.CONF_BLACK_EXTRACT_INFO_KEYS, false)){ //stderr_println(LOG_DEBUG, String.format("[-] 提取结果 [%s] 忽略保存", group)); return false; } if (group.contains(":")){ if (group.split(":", 2)[1].trim()==""){ //stderr_println(LOG_DEBUG, String.format("[-] 提取结果 [%s] 没有价值", group)); return false; } } return true; } /** * 从文本中截取指定长度的响应 * @param text * @param maxSize * @return */ public static String SubString(String text, int maxSize) { if (text != null && text.length() > maxSize){ text = text.substring(0, maxSize); } return text; } /** * 最新实现的分块正则匹配常规版本 */ public static Set<String> extractUriMode1(String text, Pattern pattern, int chunkSize) { Set<String> matches = new HashSet<>(); int textLength = text.length(); for (int start = 0; start < textLength; start += chunkSize) { int end = Math.min(start + chunkSize, textLength); String jsChunk = text.substring(start, end); Matcher matcher = pattern.matcher(jsChunk); while (matcher.find()) { if (matcher.groupCount() > 0) { for (int i = 1; i <= matcher.groupCount(); i++) { String match = matcher.group(i); if (match != null) { // Check for non-null value before adding matches.add(match); } } } else { String match = matcher.group(); if (match != null) { // Check for non-null value before adding matches.add(match); } } } } return matches; } /** * 对提取的信息进行简单的格式处理 * @param extractUri * @return */ public static String formatSensitiveInfo(String extractUri){ extractUri = removeSymbol(extractUri); extractUri = decodeHtml(extractUri); return extractUri; } /** * 对提取的信息去除有影响的字符 * @param extractUri * @return */ public static String removeSymbol(String extractUri){ if (isNotEmptyObj(extractUri)) extractUri = extractUri // .replace("<", "") // .replace(">", "") // .replace(": ", "") // .replace(":", "") .replace("\"", "") .replace("'", "") .replace("\\", "") .replaceAll("\n", "") .replaceAll("\t", "") .trim(); return extractUri; } /** * 解码HTML字符串。 * * @param htmlEncodedString 要解码的HTML编码字符串 * @return 解码后的字符串 */ public static String decodeHtml(String htmlEncodedString) { if (isNotEmptyObj(htmlEncodedString)) htmlEncodedString = StringEscapeUtils.unescapeHtml4(htmlEncodedString); return htmlEncodedString; } /** * 去除不可以显示的乱码字符 * @param str * @return */ public static String keepAsciiPrintableChars(String str) { return str.replaceAll("[^\\x20-\\x7E]", ""); } public static Set<String> keepAsciiPrintableChars(Set<String> urlSet) { Set<String> set= new HashSet<>(); for (String url: urlSet){ set.add(keepAsciiPrintableChars(url)); } return set; } /** * 解码HTML字符串。 * * @param urlSet 要解码的HTML编码字符串Set * @return 解码后的字符串 */ public static Set<String> decodeHtml(Set<String> urlSet) { Set<String> set= new HashSet<>(); for (String url: urlSet){ set.add(decodeHtml(url)); } return set; } /** * 计算URl和路径拼接 * @param reqUrl * @param path * @return */ public static String concatUrlAddPath(String reqUrl, String path){ String newUrl; try { //使用当前请求的reqUrl创建URI对象 URI basicUrl = new URI(reqUrl); //计算出新的绝对URL//如果baseUrl是http://example.com/,而url是/about 计算结果就是 http://example.com/about。 newUrl = basicUrl.resolve(path).toString(); //stdout_println(LOG_DEBUG, String.format("[+] Path: %s -> New Url: %s", path, newUrl)); } catch (Exception e) { //stderr_println(LOG_DEBUG, String.format("[!] Concat URL:[%s] + PATH:[%s] -> Error: %s", reqUrl, path, e.getMessage())); // 在发生异常时,尝试简单的字符串拼接 newUrl = reqUrl.endsWith("/") && path.startsWith("/") ? reqUrl + path.substring(1) : reqUrl + "/" + path; newUrl = newUrl.replace("\\",""); stderr_println(LOG_DEBUG, String.format("[!] Concat URL:[%s] + PATH:[%s] -> Error: %s, using fallback method.", reqUrl, path, e.getMessage())); } return newUrl; } /** * 计算URl和路径拼接 * @param reqUrl * @param pathList * @return */ public static List<String> concatUrlAddPath(String reqUrl, List<String> pathList){ List<String> urlList = new ArrayList<>(); for(String path : pathList){ String newUrl = concatUrlAddPath(reqUrl, path); if (isNotEmptyObj(newUrl)) urlList.add(newUrl); } return urlList; } public static void main(String[] args) { List<String> urlList = Arrays.asList("https://34.96.228.184:8888/club/forum.php", "https://34.96.228.184:8888/club/", "https://34.96.228.184:8888/bbs" ); List<String> pathList = Arrays.asList("forum.php?mod=list&type=lastpost&page=1&fid=75\",\"/promotions/jackpot2023\",\"data/cache/style_1_forum_index.css?lo9\",\"static/image/k8-2.png\",\"static/image/jackpot_prize_pool/2-pc2.png\",\"static/js/common.js?lo9\",\"plugin.php?id=qidou_assign\",\"/bbs/login\",\"forum.php?mod=list&type=lastpost&page=1&fid=81\",\"search.php?searchsubmit=yes\",\"forum.php?mod=list&type=lastpost&page=1&fid=83\",\"forum.php?mod=list&type=lastpost&page=1&fid=82\",\"data/cache/style_1_widthauto.css?lo9\",\"static/image/home/k8logo.png\",\"static/image/jackpot_prize_pool/3-pc.png\",\"/bbs/register\",\"static/image/jackpot_prize_pool/arrow.webp\",\"member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes\",\"member.php?mod=register\",\"forum.php?mod=list&type=lastpost&page=1&fid=74\",\"static/image/money-icon.png\",\"static/image/dialognew.png\",\"static/image/k8-app-icon.png\",\"template/default/css/use_common.css\",\"static/image/jackpot_prize_pool/2-image.png\",\"static/image/home/home.png\",\"data/cache/style_1_common.css?lo9\",\"/club/forum.php?mod=viewthread&tid=8153&fid=82\",\"static/image/home/activity.png\",\"static/image/home/game.png\",\"/club/forum.php?mod=viewthread&tid=8265&fid=82\",\"static/js/forum.js?lo9\",\"template/default/css/use_forum_viewthread.css?lo9\",\"template/default/css/nice-select.css?lo9\",\"/club/forum.php?mod=viewthread&tid=8264&fid=82\",\"static/js/logging.js?lo9\",\"/club/forum.php?mod=viewthread&tid=8266&fid=82\",\"static/image/common/favicon.ico\",\"static/image/home/xuetang.png\",\"template/default/css/dialog.css?lo9\",\"/club/forum.php?mod=viewthread&tid=8302fid=83\",\"static/image/money_circle.png\",\"member.php?mod=logging&action=login\",\"static/image/K8.png\",\"template/default/css/use_common.css?lo9\",\"forum.php?mod=ajax&action=notices\",\"plugin.php?id=jyjbwl:index\",\"static/image/k8.png\",\"static/image/k8_icon_0112.png\",\"static/image/jackpot_prize_pool/DINAlternateBold.ttf".split(",")); for (String url : urlList) for (String path : pathList){ path = formatSensitiveInfo(path); System.out.println(String.format("%s <--> %s %s", concatUrlAddPath(url,path), url, path)); } } } ================================================ FILE: src/main/java/utils/AnalyseUriFilter.java ================================================ package utils; import model.HttpUrlInfo; import java.net.MalformedURLException; import java.net.URL; import java.util.*; import java.util.regex.Pattern; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isEmptyObj; import static utils.ElementUtils.isEqualsOneKey; public class AnalyseUriFilter { private static final Pattern CHINESE_PATTERN = Pattern.compile("[\u4E00-\u9FA5]"); /** * 过滤无用的提取路径 通过判断和指定的路径相等 * @param matchList * @return */ public static List<String> filterPathByEqualUselessPath(List<String> matchList, List<String> blackPathEquals) { List<String> newList = new ArrayList<>(); for (String path : matchList){ if(!isEqualsOneKey(path, blackPathEquals, false)){ newList.add(path); } } return newList; } /** * 过滤无用的提取路径 通过判断是否包含无用关键字 * @param matchList * @return */ public static List<String> filterPathByContainUselessKey(List<String> matchList, List<String> blackPathKeys) { if (isEmptyObj(matchList)) return matchList; List<String> newList = new ArrayList<>(); for (String path : matchList){ if(!ElementUtils.isContainOneKey(path, blackPathKeys, false)){ newList.add(path); } } return newList; } /** * 过滤无用的提取路径 通过判断是否包含中文路径 * @param matchList * @return */ public static List<String> filterPathByContainChinese(List<String> matchList) { if (isEmptyObj(matchList)) return matchList; List<String> newList = new ArrayList<>(); for (String s : matchList){ if(!CHINESE_PATTERN.matcher(s).find()){ newList.add(s); } } return newList; } /** * 过滤黑名单HOST域名 * @param urls * @param blackHosts * @return */ public static List<String> filterBlackHosts(List<String> urls, List<String> blackHosts) { if (isEmptyObj(blackHosts) || isEmptyObj(urls)) return urls; List<String> list = new ArrayList<>(); for (String url : urls) { HttpUrlInfo urlInfo = new HttpUrlInfo(url); if (!ElementUtils.isContainOneKey(urlInfo.getRootUrlUsual(), blackHosts, false)) { list.add(url); } } return list; } /** * 过滤黑名单后缀名 图片后缀之类的不需要提取请求信息 * @param uris * @param blackSuffixes * @return */ public static List<String> filterBlackSuffixes(List<String> uris, List<String> blackSuffixes) { if (isEmptyObj(blackSuffixes)||isEmptyObj(uris)) return uris; List<String> list = new ArrayList<>(); for (String urlStr : uris) { String suffix = parseUrlExt(urlStr); if (!isEqualsOneKey(suffix, blackSuffixes, false)) list.add(urlStr); } return list; } /** * 过滤黑名单路径 /jquery.js 之类的不需要提取信息 * @param urls * @param blackPaths * @return */ public static List<String> filterBlackPaths(List<String> urls, List<String> blackPaths) { if (isEmptyObj(urls)) return urls; List<String> list = new ArrayList<>(); for (String urlStr : urls) { try { URL url = new URL(urlStr); String path = url.getPath(); if (!ElementUtils.isContainOneKey(path, blackPaths, false)) { list.add(urlStr); }else { stdout_println(LOG_DEBUG, String.format("[*] Black Paths Filter %s", urlStr)); } } catch (MalformedURLException e) { stderr_println(LOG_DEBUG, String.format("[!] new URL(%s) -> Error: %s", urlStr, e.getMessage())); } } return list; } /** * 过滤提取的值 在请求字符串内的项 * @param baseUri * @param matchUriList * @return */ public static List<String> filterUriBySelfContain(String baseUri, List<String> matchUriList) { if (isEmptyObj(baseUri) || baseUri == "/" ) return matchUriList; if (isEmptyObj(matchUriList)) return matchUriList; List<String> list = new ArrayList<>(); for (String uri : matchUriList){ if (!baseUri.contains(uri)) { // system_println(String.format("%s 不包含 %s", baseUri, uri)); list.add(uri);} } return list; } /** * 过滤提取出的URL列表 仅保留自身域名的 * @param basicHost * @param matchUrlList * @return */ public static List<String> filterUrlByMainHost(String basicHost, List<String> matchUrlList){ if (isEmptyObj(basicHost) || isEmptyObj(matchUrlList)) return matchUrlList; List<String> newUrlList = new ArrayList<>(); for (String matchUrl : matchUrlList){ //对比提取出来的URL和请求URL的域名部分是否相同,不相同的一般不是 try { String newHost = (new URL(matchUrl)).getHost(); if (!newHost.contains(basicHost)) continue; } catch (Exception e) { stderr_println(LOG_DEBUG, String.format("[!] new URL(%s) -> Error: %s", matchUrl, e.getMessage())); continue; } newUrlList.add(matchUrl); } return newUrlList; } /** * 粗略获取一个URI的后缀 支持PATH 忽略 # 号 * @param uri * @return */ private static String parseUrlExt(String uri) { String pureUrl = uri.substring(0, uri.contains("?") ? uri.indexOf("?") : uri.length()); return (pureUrl.lastIndexOf(".") > -1 ? pureUrl.substring(pureUrl.lastIndexOf(".") + 1) : "").toLowerCase(); } /** * 格式化所有URL 以HttpUrlInfo 内部为基准 统一带端口或不带默认端口 * @param urls * @return */ public static List<String> formatUrls(List<String> urls) { if (isEmptyObj(urls)) return urls; List<String> list = new ArrayList<>(); for (String urlStr : urls) { String url = new HttpUrlInfo(urlStr).getRawUrlUsual(); list.add(url); } return list; } } ================================================ FILE: src/main/java/utils/BurpFileUtils.java ================================================ package utils; import burp.BurpExtender; import burp.IBurpExtenderCallbacks; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.TypeReference; import java.io.*; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isNotEmptyObj; public class BurpFileUtils { /** * 检查指定路径的文件是否存在 * @param filePath 文件的路径 * @return 如果文件存在返回true,否则返回false */ public static boolean isFileExists(String filePath) { Path path = Paths.get(filePath); return Files.exists(path); } /** * 拼接目录和文件名 * @param directory 目录路径 * @param fileName 文件名 * @return 拼接后的完整路径 */ public static String concatPath(String directory, String fileName) { Path path = Paths.get(directory, fileName); return path.toString(); } /** * 读取文本文件内容并返回一个字符串 * @param filePath 文本文件的路径 * @return 文件内容字符串,如果发生错误则返回null */ public static String readFileToString(String filePath, Charset charsetName) { StringBuilder content = new StringBuilder(); try (BufferedReader reader = new BufferedReader( new InputStreamReader(new FileInputStream(filePath), charsetName))) { String line; while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } } catch (IOException e) { stderr_println(e.getMessage()); e.printStackTrace(); return null; } return content.toString(); } public static String readFileToString(String filePath) { return readFileToString(filePath, StandardCharsets.UTF_8); } /** * 从jar包中读取资源文件内容到字符串 * @param resourceName 资源的路径(例如:"com/example/myfile.txt") * @param charset * @return 文件内容字符串,如果发生错误则返回null */ public static String readResourceToString(String resourceName, Charset charset) { StringBuilder content = new StringBuilder(); try (InputStream inputStream = BurpFileUtils.class.getClassLoader().getResourceAsStream(resourceName); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))) { if (inputStream == null) { stderr_println("无法找到资源: " + resourceName); return null; } String line; while ((line = reader.readLine()) != null) { content.append(line).append("\n"); } } catch (IOException e) { stderr_println(e.getMessage()); e.printStackTrace(); return null; } return content.toString(); } /** * 获取-插件运行路径 * * @return */ public static String getPluginPath(IBurpExtenderCallbacks callbacks) { String path = ""; Integer lastIndex = callbacks.getExtensionFilename().lastIndexOf(File.separator); path = callbacks.getExtensionFilename().substring(0, lastIndex) + File.separator; return path; } /** * 从 jar文件所在路径或jar文件内部读取配置文件 * @param callbacks * @param configName * @param charset * @return */ public static String ReadPluginConfFile(IBurpExtenderCallbacks callbacks, String configName, Charset charset) { String configJson; String extensionPath = getPluginPath(callbacks); String configPath = concatPath(extensionPath, configName); if(isFileExists(configPath)){ stdout_println(LOG_INFO, String.format("[+] Custom Config File Path: %s", configPath)); configJson = readFileToString(configPath, charset); }else { configName = String.format("conf/%s", configName); stdout_println(LOG_INFO, String.format("[+] User Jar File Inner Config: %s -> %s", extensionPath, configName)); configJson = readResourceToString(configName, charset); } return configJson; } /** * 获取插件同级目录下的指定文件 * @param callbacks * @param fileName * @return */ public static Path getPluginDirFilePath(IBurpExtenderCallbacks callbacks, String fileName) { Path path = Paths.get(getPluginPath(callbacks), fileName); return path.toAbsolutePath(); } /** * 获取插件同级目录下的指定文件 * @param fileName * @return */ public static String getPluginDirFilePath(String fileName) { Path path = Paths.get(getPluginPath(BurpExtender.getCallbacks()), fileName); return path.toString(); } /** * 简单的保存字符串到文件,不处理报错信息 * @param file * @param content * @throws IOException */ public static void writeToFile(File file, String content) throws IOException { // 使用UTF-8编码写入文件 OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8); writer.write(content); writer.close(); } public static void writeToPluginPathFile(String configName, String content) throws IOException { // 使用UTF-8编码写入文件 String pluginDirFilePath = getPluginDirFilePath(configName); File fileToSave = new File(pluginDirFilePath); writeToFile(fileToSave, content); } public static void writeToPluginPathFileNotEx(String configName, String content) { try { writeToPluginPathFile(configName, content); } catch (IOException e) { e.printStackTrace(); } } /** * 从本地缓存文件读取过滤器 */ public static Map<String, Map<String, Object>> LoadJsonFromFile(String configPath) { configPath = getPluginDirFilePath(configPath); if (isFileExists(configPath)){ String configJson = readFileToString(configPath); if (isNotEmptyObj(configJson)){ TypeReference<Map<String, Map<String, Object>>> typeRef = new TypeReference<Map<String, Map<String, Object>>>() {}; return JSON.parseObject(configJson, typeRef); } } return new HashMap<>(); } //检查插件路径是否存在文件 public static boolean fileIsExistOnPluginDir(IBurpExtenderCallbacks callbacks, String fileName) { return isFileExists(concatPath(getPluginPath(callbacks), fileName)); } } ================================================ FILE: src/main/java/utils/BurpHttpUtils.java ================================================ package utils; import burp.*; import model.HttpUrlInfo; import utilbox.HelperPlus; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.zip.GZIPInputStream; import static burp.BurpExtender.CONF_BLACK_ROOT_URL; import static burp.BurpExtender.getHelpers; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isNotEmptyObj; import static utils.ElementUtils.isEqualsOneKey; public class BurpHttpUtils { private static IExtensionHelpers helpers = BurpExtender.getHelpers(); private static IBurpExtenderCallbacks callbacks = BurpExtender.getCallbacks(); public static IHttpRequestResponse makeHttpRequest(String reqUrl, List<String> referReqHeaders) { return makeHttpRequest("GET", reqUrl, "", referReqHeaders); } /** * 发起HTTP请求 * @param reqMethod 请求方法 * @param reqUrl 请求URL * @param reqParam 请求参数 * @param referReqHeaders 请求头 * @return 请求响应结果 */ public static IHttpRequestResponse makeHttpRequest(String reqMethod, String reqUrl, String reqParam, List<String> referReqHeaders) { HttpUrlInfo urlInfo = new HttpUrlInfo(reqUrl); // 创建IHttpService对象 IHttpService httpService = BurpHttpUtils.getHttpService(reqUrl); //构建HTTP请求体 byte[] requestBytes = genRequestBytes(reqMethod, reqUrl, reqParam, referReqHeaders); /* //分析当前创建的请求 判断生成是否一致 HelperPlus helperPlus = HelperPlus.getInstance(); String reqBytesHost = helperPlus.getHeaderValueOf(true, requestBytes, "HOST"); String reqBytesUrl = helperPlus.getFullURL(httpService, requestBytes).toString(); if (!urlInfo.getHostPort().contains(reqBytesHost)) { stdout_println(LOG_DEBUG, String.format( "注意:实际访问的URL和目标访问的URL不一致\n" + "目标HOST头:%s URL:%s -> 实际HOST头:%s URL:%s", urlInfo.getHostPort(), reqUrl, reqBytesHost, reqBytesUrl)); } */ //发送HTTP请求 IHttpRequestResponse requestResponse = null; try { requestResponse = callbacks.makeHttpRequest(httpService, requestBytes); } catch (Exception e){ if (e.getMessage().contains("UnknownHostException")){ //主机不存活,直接加入黑名单host 加入最短的HOST即可 CONF_BLACK_ROOT_URL.add(urlInfo.getHostPortUsual()); stderr_println(LOG_DEBUG, String.format("添加黑名单Host:%s ->%s", reqUrl, urlInfo.getHostPortUsual())); } else { stderr_println(LOG_DEBUG, String.format("获取HTTP响应失败:%s ->%s", reqUrl, e.getMessage())); } } return requestResponse; } /** * 输入URl 构建 GET 请求体 再修改新增请求头(忽略host替换) * @param reqUrl * @param referReqHeaders * @return */ private static byte[] genRequestBytes(String reqMethod, String reqUrl, String reqParam, List<String> referReqHeaders) { //编写函数 实现 基于请求体 替换 URL HttpUrlInfo urlInfo = new HttpUrlInfo(reqUrl); // 构造请求数据包信息 byte[] requestBytes = genBaseRequestBytes(reqMethod, urlInfo.getPathToEnd(), urlInfo.getHostPortUsual(), reqParam); HelperPlus helperPlus = HelperPlus.getInstance(); //基于请求头列表 更新 requestBytes 中的 请求头 if (isNotEmptyObj(referReqHeaders)){ for (String referReqHeader : referReqHeaders){ if (!referReqHeader.toLowerCase().contains("host:")){ // addOrUpdateHeader 不会替换首行,但是会替换 HOST 头部 requestBytes = helperPlus.addOrUpdateHeader(true, requestBytes, referReqHeader); } } } // 根据请求参数自动修改请求体格式 if (isNotEmptyObj(reqParam)&&!isEqualsOneKey(reqMethod.trim(),"GET|HEAD",false)){ requestBytes = helperPlus.addOrUpdateHeader(true, requestBytes, determineContentType(reqParam)); } // 设置 Connection: close requestBytes = helperPlus.addOrUpdateHeader(true, requestBytes, "Connection: close"); //输出修改后的信息 已确定修改成功 20240808 //System.out.println(new String(requestBytes)); return requestBytes; } /** * 根据请求参数自动判断请求体格式 * @param reqParam 请求参数字符串 * @return */ private static String determineContentType(String reqParam) { if (reqParam.startsWith("{") || reqParam.startsWith("[")) { return "Content-Type: application/json"; } else if (reqParam.startsWith("<") && reqParam.endsWith(">")) { return "Content-Type: application/xml"; } else if (reqParam.contains("=") && reqParam.contains("&")) { return "Content-Type: application/x-www-form-urlencoded"; } else { //return "Content-Type: text/plain"; // 默认情况 return "Content-Type: application/x-www-form-urlencoded"; } } /** * 根据输入的信息生成基本的请求体信息 * @param reqMethod 请求方法 * @param reqPath 请求路径 * @param reqHost 请求头 * @param reqParam 请求参数 * @return */ private static byte[] genBaseRequestBytes(String reqMethod, String reqPath, String reqHost, String reqParam) { byte[] requestBytes; //根据请求方法补充数据 //"GET|POST|HEAD|PUT|DELETE|OPTIONS|PATCH" String baseRequestString = "%s %s HTTP/1.1\r\n" + "Host: %s\r\n" + //设置内容类型 后续一般实际会被覆盖 "Content-Type: application/x-www-form-urlencoded\r\n" + //设置浏览器UA 后续一般实际会被覆盖 "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36\r\n" + "\r\n"; //补充PUT POST型的数据 if (isEqualsOneKey(reqMethod,"GET|HEAD",false)){ //如果请求参数不为空的话,就将参数信息添加到请求路径后面 if (isNotEmptyObj(reqParam)) { String delimiter = reqPath.contains("?") || reqPath.endsWith("&") ? "&" : "?"; reqPath += delimiter + reqParam; } //补充基础数据 baseRequestString = String.format(baseRequestString, reqMethod, reqPath, reqHost); requestBytes = baseRequestString.getBytes(); } else { //补充POST|PUT的基础数据 baseRequestString = String.format(baseRequestString, reqMethod, reqPath, reqHost); requestBytes = baseRequestString.getBytes(); //补充请求体数据 if (isNotEmptyObj(reqParam)){ requestBytes = concatenateByteArrays(requestBytes, reqParam.getBytes()); } } return requestBytes; } /** * 实现Gzip数据的解压 * @param compressed * @return * @throws IOException */ private static byte[] gzipDecompress(byte[] compressed) throws IOException { if (compressed == null || compressed.length == 0) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPInputStream gunzip = new GZIPInputStream(new ByteArrayInputStream(compressed)); byte[] buffer = new byte[256]; int n; while ((n = gunzip.read(buffer)) >= 0) { out.write(buffer, 0, n); } // Close the streams gunzip.close(); out.close(); // Get the uncompressed data return out.toByteArray(); } /** * 实现多个bytes数组的相加 * @param arrays * @return */ private static byte[] concatenateByteArrays(byte[]... arrays) { int length = 0; for (byte[] array : arrays) { length += array.length; } byte[] result = new byte[length]; int offset = 0; for (byte[] array : arrays) { System.arraycopy(array, 0, result, offset, array.length); offset += array.length; } return result; } /** * 基于URL生成一个HTTP请求服务对象 */ public static IHttpService getHttpService(String url){ HttpUrlInfo urlInfo = new HttpUrlInfo(url); IHttpService HttpService = helpers.buildHttpService(urlInfo.getHost(), urlInfo.getPort(), urlInfo.getProto()); return HttpService; } /** * 新的请求体生成思路 直接替换一个请求体的 URL 部分 其他部分保留 * @param originalRequest 原始的请求体 * @param newUrl 新的URL信息 * @return */ private static byte[] replaceReqBytesFirstLine(byte[] originalRequest, String newUrl) { IExtensionHelpers helpers = getHelpers(); HelperPlus helperPlus = HelperPlus.getInstance(); HttpUrlInfo urlInfo = new HttpUrlInfo(newUrl); //获取原始请求体的首行 第一个\r\n 的 offset byte[] firstLineBytes = getFirstLineBytes(originalRequest); //删除 originalRequest 的 0 到 offset 部分 byte[] noFirstLineReqBytes = "\r\n".getBytes(); int crlfIndex = firstLineBytes.length; try { // 删除旧的首行,保留请求体 noFirstLineReqBytes = Arrays.copyOfRange(originalRequest, crlfIndex, originalRequest.length); }catch (Exception e){ stderr_println(LOG_ERROR, String.format("请求体构建出错 Error:%s", e.getMessage())); } //根据 newUrl 生成新的 首行 Byte[] String method = helperPlus.getMethod(originalRequest); String newFirstLine = String.format("%s %s HTTP/1.1", method, urlInfo.getPathToEnd()); byte[] newFirstLineBytes = helpers.stringToBytes(newFirstLine); //将新的首行 byte 拼接到 新的 originalRequest 上 byte[] newReqBytes = concatenateByteArrays(newFirstLineBytes, noFirstLineReqBytes); //修改Host头部分 newReqBytes = helperPlus.addOrUpdateHeader(true, newReqBytes, "Host", urlInfo.getHostPort()); return newReqBytes; } /** * 获取HTTP请求的第一行(请求行) 没有解决第一行不是首行的问题 * @return */ private static byte[] getFirstLineBytes(byte[] request) { String requestStr = helpers.bytesToString(request); int firstLineEnd = requestStr.indexOf("\r\n"); if (firstLineEnd == -1) firstLineEnd = requestStr.indexOf("\n"); String firstLine = firstLineEnd != -1 ? requestStr.substring(0, firstLineEnd) : requestStr; byte[] firstLineBytes = helpers.stringToBytes(firstLine); return firstLineBytes; } //记录已进程测试过的连接,加快测试速度 private static ConcurrentHashMap<String, Boolean> AddressConnectStatusMap = new ConcurrentHashMap<>(); /** * 判断目标是否可以正常连接 */ public static boolean AddressCanConnectWithCache(String host, int port) { String host_port = String.format("%s:%s", host, port); //从历史记录中查找连接分析结果 if (AddressConnectStatusMap.containsKey(host_port)){ return AddressConnectStatusMap.get(host_port); } try { // 创建一个 Socket 并设置超时时间 Socket socket = new Socket(); InetSocketAddress address = new InetSocketAddress(host, port); socket.connect(address, 3000); socket.close(); AddressConnectStatusMap.put(host_port, true); return true; }catch (Exception e){ // 错误处理 stderr_println(LOG_ERROR, String.format("[!] Socket Connect Failed: %s -> %s", host_port, e.getMessage())); //记录目标不可访问,下次直接返回不可访问 AddressConnectStatusMap.put(host_port, false); return false; } } /** * 判断目标是否可以正常连接 */ public static boolean AddressCanConnectWithCache(String reqUrl) { IHttpService httpService = BurpHttpUtils.getHttpService(reqUrl); String host = httpService.getHost(); int port = httpService.getPort(); port = port > 0 ? port : (httpService.getProtocol().equalsIgnoreCase("http") ? 80 : 443); return AddressCanConnectWithCache(host, port); } /** * 判断目标是否可以正常连接 */ public static boolean AddressCanConnectWithCache(HttpUrlInfo urlInfo) { return AddressCanConnectWithCache(urlInfo.getHost(), urlInfo.getPort()); } } ================================================ FILE: src/main/java/utils/BurpPrintUtils.java ================================================ package utils; import burp.BurpExtender; import java.io.PrintWriter; import static burp.BurpExtender.SHOW_MSG_LEVEL; public class BurpPrintUtils { private static PrintWriter stdout; private static PrintWriter stderr; // 定义日志级别 public static int LOG_ERROR = 0; //重要 public static int LOG_INFO = 1; //一般 public static int LOG_DEBUG = 2; //调试 public BurpPrintUtils(){ this.stdout = BurpExtender.getStdout(); this.stderr = BurpExtender.getStderr(); } public BurpPrintUtils(PrintWriter stdout, PrintWriter stderr){ this.stdout = stdout; this.stderr = stderr; } /** * 根据输出日志级别输出错误消息 SHOW_MSG_LEVEL 越大,输出内容越少 * @param msgLevel * @param msg */ public static void stdout_println(Integer msgLevel, Object msg){ if(msgLevel <= SHOW_MSG_LEVEL){ stdout.println(msg); System.out.println(msg); } } /** * 根据输出日志级别输出错误消息 SHOW_MSG_LEVEL 越大,输出内容越少 * @param msgLevel * @param msg */ public static void stderr_println(Integer msgLevel, Object msg){ if(msgLevel <= SHOW_MSG_LEVEL){ stderr.println(msg); System.out.println(msg); } } /** * 根据输出日志级别输出错误消息 SHOW_MSG_LEVEL 越大,输出内容越少 * @param msgLevel * @param msg */ public static void system_println(Integer msgLevel, Object msg){ if(msgLevel <= SHOW_MSG_LEVEL) System.out.println(msg); } public static void stdout_println(Object msg){ stdout_println(LOG_INFO,msg); } public static void stderr_println(Object msg){ stderr_println(LOG_ERROR,msg); } public static void system_println(Object msg){ system_println(LOG_INFO,msg); } } ================================================ FILE: src/main/java/utils/BurpSitemapUtils.java ================================================ package utils; import burp.BurpExtender; import burp.IHttpRequestResponse; import burp.IProxyScanner; import database.PathTreeTable; import database.RecordUrlTable; import model.HttpMsgInfo; import java.util.Set; import static burp.BurpExtender.*; import static utils.BurpPrintUtils.*; import static utils.ElementUtils.isContainOneKey; import static utils.ElementUtils.isEqualsOneKey; public class BurpSitemapUtils { /** * 添加 SiteMap 中 所有有关的URL到 RecordPath 或 RecordUrl 表 */ public static void addSiteMapUrlsToRecord(boolean isRecordUrl){ // 1、获取所有有关的 urlPrefix Set<String> urlPrefixes = PathTreeTable.fetchAllRecordPathRootUrls(); for (String urlPrefix:urlPrefixes){ //插入一个标记,表明这个主机已经插入过滤 String insertedFlag = isRecordUrl ? urlPrefix + "/RecordUrl" : urlPrefix + "/RecordPath"; boolean flagIsNotInsert = RecordUrlTable.insertOrUpdateAccessedUrl(insertedFlag, 999) > 0; //忽略导入禁止导入的主机的信息 if (isContainOneKey(urlPrefix, CONF_BLACK_AUTO_RECORD_PATH, false) || isContainOneKey(urlPrefix, CONF_BLACK_ROOT_URL, false )){ continue; } //获取URL相关的前缀 if (flagIsNotInsert){ IHttpRequestResponse[] httpRequestResponses = BurpExtender.getCallbacks().getSiteMap(urlPrefix); if (httpRequestResponses.length>0){ for (IHttpRequestResponse requestResponse: httpRequestResponses){ HttpMsgInfo msgInfo = new HttpMsgInfo(requestResponse); String reqBaseUrl = msgInfo.getUrlInfo().getUrlToFileUsual(); try { if (isRecordUrl){ //插入 reqBaseUrl 排除黑名单后缀、 忽略参数 if(!isEqualsOneKey(msgInfo.getUrlInfo().getSuffix(), CONF_BLACK_URI_EXT_EQUAL, false)){ RecordUrlTable.insertOrUpdateAccessedUrl(msgInfo); } } else { //插入路径 仅保留200 403等有效目录 if(isEqualsOneKey(msgInfo.getRespInfo().getStatusCode(), CONF_WHITE_RECORD_PATH_STATUS, false) && !msgInfo.getUrlInfo().getPathToDir().equals("/") && !isContainOneKey(msgInfo.getRespInfo().getRespTitle(), CONF_BLACK_RECORD_PATH_TITLE, false) ){ // RecordPathTable.insertOrUpdateRecordPath(reqBaseUrl, msgInfo.getRespInfo().getStatusCode()); // stdout_println(LOG_DEBUG, String.format("Record reqBaseUrl: %s", reqBaseUrl)); IProxyScanner.enhanceRecordPathFilter(msgInfo, IProxyScanner.dynamicPathFilterIsOpen); } } } catch (Exception e){ stderr_println(String.format("Record SiteMap Urls (isRecordUrl:%s) req Base Url:%s -> Error: %s", isRecordUrl, reqBaseUrl, e.getMessage())); } } } } } } } ================================================ FILE: src/main/java/utils/CastUtils.java ================================================ package utils; import burp.AnalyseInfo; import burp.BurpExtender; import com.alibaba.fastjson2.*; import sqlUtils.Constants; import model.HttpUrlInfo; import utilbox.HelperPlus; import java.util.*; public class CastUtils { /** * 防止操作的list是null值 */ private static List<String> fixedNullList(List<String> list) { if (list == null) list = new ArrayList<>(); return list; } /** * 将任意类型的List转为Json字符串 */ public static String toJsonString(List<?> list){ return com.alibaba.fastjson2.JSON.toJSONString(list); } /** * 将任意类型转为Json字符串 */ public static String toJsonString(Object object){ return com.alibaba.fastjson2.JSON.toJSONString(object); } /** * List<String> list 元素去重 */ public static List<String> deduplicateStringList(List<String> list) { if (isEmptyObj(list)) return new ArrayList<>(); return new ArrayList<>(new HashSet<>(list)); } /** * 去除JSONArray中的重复项。 * * @param jsonArray 需要去重的原始列表。 * @return 去重后的列表。 */ public static JSONArray deduplicateJsonArray(JSONArray jsonArray) { if (jsonArray == null || jsonArray.size() == 0) return new JSONArray(); // 使用LinkedHashMap来保持插入顺序并去除重复 Map<String, JSONObject> map = new LinkedHashMap<>(); // 将每个JSONObject转换成字符串,并用作Map的键 for (int i = 0; i < jsonArray.size(); i++) { try { JSONObject jsonObject = jsonArray.getJSONObject(i); String jsonString = jsonObject.toString(); map.putIfAbsent(jsonString, jsonObject); } catch (Exception exception) { // Handle any exceptions that might occur during the process. System.err.println("Error processing JSON object: " + exception.getMessage()); } } // 将Map的值转换回List return new JSONArray(new ArrayList<>(map.values())); } /** * 返回两个集合的差集。该集合包含在listA中但不在listB中的所有元素。 * @param listA 第一个集合 * @param listB 第二个集合 * @return 差集 */ public static List<String> listReduceList(List<String> listA, List<String> listB) { listA = fixedNullList(listA); listB = fixedNullList(listB); if (isEmptyObj(listA) || isEmptyObj(listB)) return listA; Set<String> result = new HashSet<>(listA); //result.removeAll(listB); listB.forEach(result::remove); return new ArrayList<>(result); } /** * 将任意类型的 Json字符串 转为 JSONArray */ public static JSONArray toJsonArray(String jsonString){ if (jsonString == null) return new JSONArray(); return JSONArray.parseArray(jsonString); } /** * 将任意类型的 Json字符串 转为 Json 对象 */ public static JSONObject toJsonObject(String jsonString){ if (jsonString == null) return new JSONObject(); return JSONObject.parseObject(jsonString); } /** * 将JsonArray 转为 List<String> */ public static List<String> toStringList(JSONArray array){ if (isEmptyObj(array)) return new ArrayList<>(); return array.toList(String.class); } /** * 将JsonArrayString 转为 List<String> */ public static List<String> toStringList(String jsonArrayString){ return toStringList(toJsonArray(jsonArrayString)); } /** * 格式化Json数据为可输出的状态 */ public static String stringJsonArrayFormat(String jsonArrayString) { if (jsonArrayString == null || jsonArrayString.length()<=2 ) return ""; // 解析JSON数组 JSONArray jsonArray = toJsonArray(jsonArrayString); StringBuilder formattedString = new StringBuilder(); for (Object item : jsonArray) { if (item instanceof String) { formattedString.append((String) item).append("\n"); } else { throw new IllegalArgumentException("JSONArray contains non-string element."); } } return formattedString.toString(); } /** * 合并两个 List<String> 并去重 */ public static List<String> listAddList(List<String> listA, List<String> listB) { listA = fixedNullList(listA); listB = fixedNullList(listB); Set<String> uniqueSet = new LinkedHashSet<>(listA); // 创建 LinkedHashSet 并添加第一个列表的所有元素 uniqueSet.addAll(listB); // 添加第二个列表的所有元素,重复项会被自动过滤 return new ArrayList<>(uniqueSet); // 将 Set 转换回 List 并返回 } /** * 合并两个 List<String> 并去重 */ public static JSONArray listAddList(JSONArray arrayA, JSONArray arrayB) { JSONArray combinedArray = new JSONArray(); combinedArray.addAll(arrayA); combinedArray.addAll(arrayB); combinedArray = CastUtils.deduplicateJsonArray(combinedArray); return combinedArray; } /** * 字符串转列表 */ public static List<String> getUniqueLines(String text) { if (isEmptyObj(text)) { return new ArrayList<>(); } //自动处理换行符 text = text.replace("\r\n","\n"); // 分割字符串 String[] lines = text.split("\n"); // 转换为Set以去除重复项 Set<String> uniqueSet = new LinkedHashSet<>(Arrays.asList(lines)); // 转换回List并返回 return new ArrayList<>(uniqueSet); } /** * 合并新旧列表并去重返回 * @param newUrlList 新的URL列表 (会自动提取RootUrl) * @param rawList 原始的配置文件列表 * @return */ public static List<String> addUrlsRootUrlToList(List<String> newUrlList, List<String> rawList) { //0、获取所有rootUrl Set<String> rootUrlSet = new HashSet<>(); for (String url: newUrlList){ HttpUrlInfo urlInfo = new HttpUrlInfo(url); rootUrlSet.add(urlInfo.getRootUrlUsual()); } //1、加入到黑名单列表 //合并原来的列表 rootUrlSet.addAll(rawList); return new ArrayList<>(rootUrlSet); } public static List<String> getRootUrlList(List<String> newUrlList) { //0、获取所有rootUrl Set<String> rootUrlSet = new HashSet<>(); for (String url: newUrlList){ HttpUrlInfo urlInfo = new HttpUrlInfo(url); rootUrlSet.add(urlInfo.getRootUrlUsual()); } return new ArrayList<>(rootUrlSet); } /** * 解析 响应体 获取 302 URL */ public static String parseRespRedirectUrl(byte[] headerBytes) { String redirectUrl = null; if (headerBytes.length>0) { HelperPlus helperPlus = HelperPlus.getInstance(); redirectUrl = helperPlus.getHeaderValueOf(true, headerBytes, "Location"); } return redirectUrl; } /** * 判断字符串|集合|Map类型 是否为null||为空 */ public static boolean isEmptyObj(Object obj) { if (obj == null) { return true; } else if (obj instanceof String && ((String) obj).trim().isEmpty()) { return true; } else if (obj instanceof Collection && ((Collection<?>) obj).isEmpty()) { return true; } else if (obj instanceof Map && ((Map<?, ?>) obj).isEmpty()) { return true; } return false; } /** * 判断字符串|集合|Map类型 是否为null||为空 */ public static boolean isNotEmptyObj(Object obj) { return !isEmptyObj(obj); } //还原 Map<String,Array> 格式 public static HashMap<String, JSONArray> toUrlInfoArrayMap(String jsonString) { // 使用 FastJSON2 的 parseObject 方法,传入 HashMap 的具体类型 HashMap<String, JSONArray> urlInfoArrayMap = JSONObject.parseObject(jsonString, new TypeReference<HashMap<String, JSONArray>>(){}); return urlInfoArrayMap; } public static HashMap<String, JSONArray> mapAddMap(HashMap<String, JSONArray> map1, HashMap<String, JSONArray> map2) { HashMap<String, JSONArray> map = new HashMap<>(); if (map1.size()>0) map.putAll(map1); if (map2.size()>0) map.putAll(map2); return map; } public static String escapeHtml(String input) { if(input == null) { return ""; } return input.replace("&", "&") .replace("<", "<") .replace(">", ">") .replace("\"", """) .replace("'", "'") .replace("/", "/"); } /** * 格式化Json数据为可输出的状态 */ public static String infoJsonArrayFormatHtml(String jsonArrayString) { if (jsonArrayString == null || jsonArrayString.length()<=2 ) return ""; JSONArray jsonArray = JSONArray.parseArray(jsonArrayString); StringBuilder formattedResult = new StringBuilder(); for (Object obj : jsonArray) { if (obj instanceof JSONObject) { JSONObject jsonObject = (JSONObject) obj; // 使用String.format进行格式化 String formattedItem = String.format( "# ############# type: %s #############<br>" + "# describe: <span style='color: $color$};'>%s</span><br>" + "# value: <span style='color: $color$};'>%s</span><br>" + "# matchType: %s<br>" + "# accuracy: %s<br>" + "# important: %s<br>" , jsonObject.getString(AnalyseInfo.type), jsonObject.getString(AnalyseInfo.describe), escapeHtml(jsonObject.getString(AnalyseInfo.value)), escapeHtml(jsonObject.getString(AnalyseInfo.matchType)), jsonObject.getString(AnalyseInfo.accuracy), jsonObject.getString(AnalyseInfo.important) ); //进行颜色标记 String color = jsonObject.getBoolean("important") ? "red" : "blue"; formattedItem = formattedItem.replace("$color$",color); formattedResult.append(formattedItem); } } return formattedResult.toString(); } /** * 格式化Json数据为可输出的状态 */ public static String urlInfoJsonArrayMapFormatHtml(String urlInfoJsonArrayMapString) { if (urlInfoJsonArrayMapString == null || urlInfoJsonArrayMapString.length()<=2 ) return ""; HashMap<String, JSONArray> urlInfoJsonArrayMap = toUrlInfoArrayMap(urlInfoJsonArrayMapString); StringBuilder formattedResult = new StringBuilder(); // 遍历 HashMap for (Map.Entry<String, JSONArray> entry : urlInfoJsonArrayMap.entrySet()) { String infoUrl = entry.getKey(); JSONArray jsonArray = entry.getValue(); for (Object obj : jsonArray) { if (obj instanceof JSONObject) { JSONObject jsonObject = (JSONObject) obj; // 使用String.format进行格式化 String formattedItem = String.format( "# ############# type: %s #############<br>" + "# Describe: <span style='color: $color$};'>%s</span><br>" + "# Value: <span style='color: $color$};'>%s</span><br>" + "# Match: %s<br>" + "# Accuracy: %s<br>" + "# Important: %s<br>" + "# FromUrl: %s<br>" , jsonObject.getString(AnalyseInfo.type), jsonObject.getString(AnalyseInfo.describe), escapeHtml(jsonObject.getString(AnalyseInfo.value)), escapeHtml(jsonObject.getString(AnalyseInfo.matchType)), jsonObject.getString(AnalyseInfo.accuracy), jsonObject.getString(AnalyseInfo.important), infoUrl ); //进行颜色标记 String color = jsonObject.getBoolean("important") ? "red" : "blue"; formattedItem = formattedItem.replace("$color$",color); formattedResult.append(formattedItem); } } } return formattedResult.toString(); } //Url 列 转 URL 状态码Json public static HashMap<String, JSONObject> toUrlStatusJsonMap(List<String> urlList) { JSONObject defaultJson = new JSONObject() {{ put("status", -1); put("length", -1); }}; // 使用 FastJSON2 的 parseObject 方法,传入 HashMap 的具体类型 HashMap<String, JSONObject> urlStatusArrayMap = new HashMap<>(); for (String url:urlList){ for (String method:BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS){ String urlWithMethod = String.format("%s %s %s", url, Constants.SPLIT_SYMBOL, method); urlStatusArrayMap.put(urlWithMethod,defaultJson); } } return urlStatusArrayMap; } /** * json对象还原到Url Map对象 */ public static HashMap<String, JSONObject> toUrlStatusJsonMap(String jsonString) { if (isEmptyObj(jsonString) || jsonString.length() < 2){ return new HashMap<>(); } // 使用 FastJSON2 的 parseObject 方法,传入 HashMap 的具体类型 HashMap<String, JSONObject> urlInfoArrayMap = JSONObject.parseObject(jsonString, new TypeReference<HashMap<String, JSONObject>>(){}); return urlInfoArrayMap; } //更新两个 UrlStatus Map public static HashMap<String, JSONObject> updateUrlStatusMap(HashMap<String, JSONObject> map1, HashMap<String, JSONObject> map2) { if (map1.isEmpty()) return map2; if (map2.isEmpty()) return map1; HashMap<String, JSONObject> map = new HashMap<>(map1); // 遍历 HashMap 的条目集合 for (Map.Entry<String, JSONObject> entry : map2.entrySet()) { String urlWithMethod = entry.getKey(); JSONObject urlStatusJson = entry.getValue(); Integer status = urlStatusJson.getInteger("status"); Integer length = urlStatusJson.getInteger("length"); if (status > -1 || length > -1){ map.put(urlWithMethod, urlStatusJson); } } return map; } /** * 将HashMap<String, JSONObject>按照String键排序,并返回一个新的SortedMap。 * * @param urlStatusJsonMap 原始未排序的HashMap * @return 按照String键排序后的SortedMap */ public static SortedMap<String, JSONObject> sortUrlStatusJsonMap(HashMap<String, JSONObject> urlStatusJsonMap) { // 创建一个TreeMap用于存放已排序的数据,默认会按照键的自然顺序排序 TreeMap<String, JSONObject> sortedMap = new TreeMap<>(urlStatusJsonMap); return sortedMap; } /** * 序列化已排序的Map到JSON字符串,并保持键值对的顺序。 * * @param sortedMap 已排序的Map * @return JSON格式的字符串 */ public static String toJsonStringWithOrder(SortedMap<String, JSONObject> sortedMap) { // 使用JSONWriter.Feature.MapSortField特性来保持输出顺序 return JSON.toJSONString(sortedMap, JSONWriter.Feature.MapSortField); } //转换Json字符串为可以输出的HTML格式 public static String stringUrlStatusMapFormatHtml(String jsonArrayString) { if (jsonArrayString == null || jsonArrayString.length()<=2 ) return ""; // 解析JSON数组 // HashMap<String, JSONObject> urlStatusJsonMap = toUrlStatusJsonMap(jsonArrayString); //解析JSON并自动排序 SortedMap<String, JSONObject> urlStatusJsonMap = sortUrlStatusJsonMap(toUrlStatusJsonMap(jsonArrayString)); // 开始构建HTML表格 StringBuilder htmlTableBuilder = new StringBuilder(); htmlTableBuilder.append("<table border='1' cellpadding='5' cellspacing='0'>"); htmlTableBuilder.append("<thead><tr><th>URL</th><th>Method</th><th>Status</th><th>Length</th></tr></thead>"); htmlTableBuilder.append("<tbody>"); // 遍历JSON对象并添加行到表格中 for (Map.Entry<String, JSONObject> entry : urlStatusJsonMap.entrySet()) { String urlWithMethod = entry.getKey(); JSONObject urlStatusJson = entry.getValue(); Integer status = urlStatusJson.getInteger("status"); Integer length = urlStatusJson.getInteger("length"); // 分离URL和请求方法 String[] parts = urlWithMethod.split(Constants.SPLIT_SYMBOL); String url = parts[0].trim(); String method = parts.length > 1 ? parts[1].trim() : "NULL"; // 添加一行到HTML表格,直接应用内联样式 String format = String.format( "<tr style='%s'><td>%s</td><td>%s</td><td>%d</td><td>%d</td></tr>\n", status != -1 ? "font-weight: bold; background-color: #f2f2f2;" : "", // 如果需要加粗,则添加内联样式 escapeHtml(url), method, status, length ); htmlTableBuilder.append(format); } htmlTableBuilder.append("</tbody>"); htmlTableBuilder.append("</table>"); return htmlTableBuilder.toString(); } /** * 将列表中的所有字符串元素转换为大写。 * @param list 要转换的字符串列表 * @return 包含大写字符串的新列表 */ public static List<String> elementsToUpper(List<String> list) { List<String> upperCaseList = new ArrayList<>(); for (String item : list) { upperCaseList.add(item.toUpperCase().trim()); } return upperCaseList; } /** * 删除字符串中的所有空白行(只包含一个或多个空格的行)。 * * @param prettyJson 包含多行的字符串 * @return 删除空白行后的字符串 */ public static String removeJsonForMat(String prettyJson) { prettyJson = prettyJson.replace("{","").replace("}",""); // 使用换行符分割字符串 List<String> lines = new ArrayList<>(Arrays.asList(prettyJson.split("\\r?\\n"))); // 过滤掉空白行 List<String> filteredLines = new ArrayList<>(); for (String line : lines) { if (!line.trim().isEmpty()) { filteredLines.add(line); } } // 将过滤后的行重新组合成一个字符串 return String.join(System.lineSeparator(), filteredLines); } /** * 列表转字符串(支持常见类型) * @return 转换后的字符串,格式为 "[item1, item2, item3]" */ public static <T> String listToString(List<T> list) { if (list == null || list.isEmpty()) { return "[]"; // 如果列表为空或为 null,返回空数组的表示形式 } return Arrays.toString(list.toArray()); } public static <T> String setToString(Set<T> set) { if (set == null || set.isEmpty()) { return "[]"; // 如果列表为空或为 null,返回空数组的表示形式 } return Arrays.toString(set.toArray()); } } ================================================ FILE: src/main/java/utils/ConfigUtils.java ================================================ package utils; import burp.BurpExtender; import model.FingerPrintRule; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static utils.BurpPrintUtils.*; import static utils.CastUtils.isNotEmptyObj; public class ConfigUtils { /** * 自动根据规则类型赋值到配置列 */ public static void loadConfigArrayListByRule(FingerPrintRule rule) { switch (rule.getType()) { case "CONF_DEFAULT_PERFORMANCE": BurpExtender.CONF_DEFAULT_PERFORMANCE.addAll(rule.getMatchKeys()); break; case "CONF_WHITE_ROOT_URL": BurpExtender.CONF_WHITE_ROOT_URL.addAll(rule.getMatchKeys()); break; case "CONF_WHITE_RECORD_PATH_STATUS": BurpExtender.CONF_WHITE_RECORD_PATH_STATUS.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_RECORD_PATH_TITLE": BurpExtender.CONF_BLACK_RECORD_PATH_TITLE.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_AUTO_RECORD_PATH": BurpExtender.CONF_BLACK_AUTO_RECORD_PATH.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_AUTO_RECURSE_SCAN": BurpExtender.CONF_BLACK_AUTO_RECURSE_SCAN.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_ROOT_URL": BurpExtender.CONF_BLACK_ROOT_URL.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_URI_PATH": BurpExtender.CONF_BLACK_URI_PATH_KEYS.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_URI_EXT_EQUAL": BurpExtender.CONF_BLACK_URI_EXT_EQUAL.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_EXTRACT_PATH_EQUAL": BurpExtender.CONF_BLACK_EXTRACT_PATH_EQUAL.addAll(rule.getMatchKeys()); break; case "CONF_BLACK_EXTRACT_INFO_KEYS": BurpExtender.CONF_BLACK_EXTRACT_INFO_KEYS.addAll(rule.getMatchKeys()); break; case "CONF_REGULAR_EXTRACT_URIS": BurpExtender.CONF_REGULAR_EXTRACT_URIS.addAll(rule.getMatchKeys()); break; //添加HTTP请求相关参数配置 case "CONF_BLACK_RECURSE_REQ_PATH_KEYS": BurpExtender.CONF_BLACK_RECURSE_REQ_PATH_KEYS.addAll(rule.getMatchKeys()); break; case "CONF_RECURSE_REQ_HTTP_METHODS": BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS.addAll(rule.getMatchKeys()); break; case "CONF_RECURSE_REQ_HTTP_PARAMS": BurpExtender.CONF_RECURSE_REQ_HTTP_PARAMS.addAll(rule.getMatchKeys()); break; default: break; } } /** * 清空所有的配置列表 */ public static void autoClearAllConfArrayList() { BurpExtender.CONF_DEFAULT_PERFORMANCE = new ArrayList<>(); //默认的性能配置 BurpExtender.CONF_WHITE_ROOT_URL = new ArrayList<>(); //仅扫描的URL BurpExtender.CONF_WHITE_RECORD_PATH_STATUS = new ArrayList<>(); //作为正常访问结果的状态码 BurpExtender.CONF_BLACK_AUTO_RECORD_PATH = new ArrayList<>(); //不自动记录PATH的URL域名 BurpExtender.CONF_BLACK_AUTO_RECURSE_SCAN = new ArrayList<>(); //不自动进行递归扫描的URL域名 BurpExtender.CONF_BLACK_URI_EXT_EQUAL = new ArrayList<>(); //不检查的URL后缀 BurpExtender.CONF_BLACK_URI_PATH_KEYS = new ArrayList<>(); //不检查的URL路径 BurpExtender.CONF_BLACK_ROOT_URL = new ArrayList<>(); //不检查的URL域名 BurpExtender.CONF_BLACK_EXTRACT_PATH_EQUAL = new ArrayList<>(); //需要忽略的响应提取路径 完整路径 BurpExtender.CONF_BLACK_EXTRACT_INFO_KEYS = new ArrayList<>(); //需要忽略的响应提取信息 BurpExtender.CONF_REGULAR_EXTRACT_URIS = new ArrayList<>(); //URL提取正则表达式 //添加HTTP请求相关参数配置 BurpExtender.CONF_BLACK_RECURSE_REQ_PATH_KEYS = new ArrayList<>(); //禁止递归访问的URL路径[包含]此项任一元素 BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS = new ArrayList<>(); //递归访问URL时的HTTP请求方法 BurpExtender.CONF_RECURSE_REQ_HTTP_PARAMS = new ArrayList<>(); //递归访问URL时的HTTP请求参数 } /** * 从规则里面重新提取全部配置 */ public static void reloadConfigArrayListFromRules(List<FingerPrintRule> fingerprintRules) { //清空所有配置列表参数 autoClearAllConfArrayList(); if (isNotEmptyObj(fingerprintRules)){ //循环更新全局配置 for (int i = 0 ; i < fingerprintRules.size(); i ++){ FingerPrintRule rule = fingerprintRules.get(i); loadConfigArrayListByRule(rule); } } //重新编译正则表达式 BurpExtender.URI_MATCH_REGULAR_COMPILE = RegularUtils.compileUriMatchRegular(BurpExtender.CONF_REGULAR_EXTRACT_URIS); //处理必须有内容的列 //设置默认请求方法 if (BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS.isEmpty()){ BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS = Collections.singletonList("GET"); } else { BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS = CastUtils.elementsToUpper(BurpExtender.CONF_RECURSE_REQ_HTTP_METHODS); } //设置默认请求参数 if (BurpExtender.CONF_RECURSE_REQ_HTTP_PARAMS.isEmpty()){ BurpExtender.CONF_RECURSE_REQ_HTTP_PARAMS = Collections.singletonList(""); } //配置基于性能的选项 parseDefaultProptites(BurpExtender.CONF_DEFAULT_PERFORMANCE); } private static void parseDefaultProptites(List<String> configList) { for (String configItem : configList) { String[] keyValue = configItem.split("="); if (keyValue.length == 2) { String key = keyValue[0]; String value = keyValue[1]; switch (key) { case "maxPatterChunkSizeDefault": BurpExtender.maxPatterChunkSizeDefault = Integer.parseInt(value); stdout_println(LOG_DEBUG, String.format("[+] maxPatterChunkSizeDefault: [%s]", Integer.parseInt(value))); break; case "maxStoreRespBodyLenDefault": BurpExtender.maxStoreRespBodyLenDefault = Integer.parseInt(value); stdout_println(LOG_DEBUG, String.format("[+] maxStoreRespBodyLenDefault: [%s]", Integer.parseInt(value))); break; case "monitorExecutorIntervalsDefault": BurpExtender.monitorExecutorIntervalsDefault = Integer.parseInt(value); stdout_println(LOG_DEBUG, String.format("[+] monitorExecutorIntervalsDefault: [%s]", Integer.parseInt(value))); break; case "dynamicPathFilterIsOpenDefault": BurpExtender.dynamicPathFilterIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] dynamicPathFilterIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "autoRecordPathIsOpenDefault": BurpExtender.autoRecordPathIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] autoRecordPathIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "autoPathsToUrlsIsOpenDefault": BurpExtender.autoPathsToUrlsIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] autoPathsToUrlsIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "autoRecursiveIsOpenDefault": BurpExtender.autoRecursiveIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] autoRecursiveIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "proxyListenIsOpenDefault": BurpExtender.proxyListenIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] proxyListenIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "autoRefreshUnvisitedIsOpenDefault": BurpExtender.autoRefreshUnvisitedIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] autoRefreshUnvisitedIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "autoRefreshUiIsOpenDefault": BurpExtender.autoRefreshUiIsOpenDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] autoRefreshTableUiIsOpenDefault: [%s]", Boolean.parseBoolean(value))); break; case "forceDecodeUnicodeDefault": BurpExtender.forceDecodeUnicodeDefault = Boolean.parseBoolean(value); //stdout_println(LOG_DEBUG, String.format("[+] forceDecodeUnicodeDefault: [%s]", Boolean.parseBoolean(value))); break; case "addApiToUnvisitedUrlsDefault": BurpExtender.addApiToUnvisitedUrlsDefault = Boolean.parseBoolean(value); stdout_println(LOG_DEBUG, String.format("[+] addApiUrlsToUnvisitedUrls: [%s]", Boolean.parseBoolean(value))); break; default: stderr_println(LOG_ERROR, "[!] Unknown configuration key: " + key); } } else { System.out.println("Invalid configuration format: " + configItem); } } } } ================================================ FILE: src/main/java/utils/ElementUtils.java ================================================ package utils; import java.util.*; import java.util.regex.Pattern; import static utils.CastUtils.isEmptyObj; public class ElementUtils { private static List<String> formatElementList(List<String> elements) { List<String> list = new ArrayList<>(); for (String element : elements) { list.add(format(element)); } return list; } private static boolean isContainOneKey(String stringFormat, List<String> elementsFormat) { // for (String element : elementsFormat) { // if (stringFormat.contains(element)){ // return true; // } // } // return false; // 使用 Stream API anyMatch 检查是否包含任意一個元素 return elementsFormat.stream().anyMatch(stringFormat::contains); } private static boolean isEqualsOneKey(String stringFormat, List<String> elementsFormat) { // //进行判断 // for (String element : elementsFormat) { // if (stringFormat.equals(element)) { // return true; // } // } // return false; // 使用 Stream API anyMatch 检查是否 equals 任意一個元素 return elementsFormat.stream().anyMatch(stringFormat::equals); } private static boolean isContainAllKey(String stringFormat, List<String> elementsFormat) { // for (String element : elementsFormat) { // if (!stringFormat.contains(element)){ // return false; // } // } // return true; // 使用 Stream API allMatch 检查 stringFormat 是否包含 elementsFormat 中的所有元素 return elementsFormat.stream().allMatch(stringFormat::contains); } /** * 小写和去两端字符 * @param string * @return */ private static String format(String string){ return string.toLowerCase(); } /** * 判断字符串 是否 等于 元素列表中的任意元素 忽略大小写 * * @param string 单个字符串。 * @param elementsString 允许的字符串,用'|'分隔。 * @param defaultBool 当 elementsString 为空时应该返回的响应码 * @return 如果 string 在 elementsString 范围内则返回 true,否则返回false。 */ public static boolean isEqualsOneKey(String string, String elementsString, boolean defaultBool) { //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elementsString)) return defaultBool; //预先格式化处理 String stringFormat = format(string); String[] elementsFormat = format(elementsString).split("\\|"); return isEqualsOneKey(stringFormat, Arrays.asList(elementsFormat)); } /** * 判断字符串 是否 等于 元素列表中的任意元素 忽略大小写 * * @param stringA 单个字符串。 * @param elements 允许的字符串列表 * @param defaultBool 当 elements 为空时应该返回的响应码 * @return 如果 string 在 elements 范围内则返回 true,否则返回false。 */ public static boolean isEqualsOneKey(Object stringA, List<String> elements, boolean defaultBool) { String string = String.valueOf(stringA); //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elements)) return defaultBool; String stringFormat = format(string); List<String> elementsFormat = formatElementList(elements); return isEqualsOneKey(stringFormat, elementsFormat); } /** * 判断字符串 是否 包含 列表中的任意元素 * * @param string 单个字符串。 * @param elementsString 允许的字符串,用'|'分隔。 * @param defaultBool 当 elementsString 为空时应该返回的响应码 * @return 如果 elementStrings 的任意子元素 在 string 内 则返回true,否则返回false。 */ public static boolean isContainOneKey(String string, String elementsString, boolean defaultBool) { //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elementsString)) return defaultBool; //预先格式化处理 String stringFormat = format(string); String[] elementsFormat = format(elementsString).split("\\|"); return isContainOneKey(stringFormat, Arrays.asList(elementsFormat)); } /** * 判断字符串 是否 包含 列表中的任意元素 * * @param string 单个字符串。 * @param elements 允许的字符串,用'|'分隔。 * @param defaultBool 当 elementsString 为空时应该返回的响应码 * @return 如果 elementStrings 的任意子元素 在 string 内 则返回true,否则返回false。 */ public static boolean isContainOneKey(String string, List<String> elements, boolean defaultBool) { //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elements)) return defaultBool; String stringFormat = format(string); List<String> elementsFormat = formatElementList(elements); return isContainOneKey(stringFormat, elementsFormat); } /** * 判断字符串 是否 包含 列表中的任意元素 * * @param string 单个字符串。 * @param elements 允许的字符串,用'|'分隔。 * @param defaultBool 当 elementsString 为空时应该返回的响应码 * @return 如果 elementStrings 的任意子元素 在 string 内 则返回true,否则返回false。 */ public static boolean isContainAllKey(String string, List<String> elements, boolean defaultBool) { //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elements)) return defaultBool; String stringFormat = format(string); List<String> elementsFormat = formatElementList(elements); return isContainAllKey(stringFormat, elementsFormat); } /** * 判断字符串 是否 包含 列表中的任意元素 * * @param string 单个字符串。 * @param elementsString 允许的字符串,用'|'分隔。 * @param defaultBool 当 elementsString 为空时应该返回的响应码 * @return 如果 elementStrings 的任意子元素 在 string 内 则返回true,否则返回false。 */ public static boolean isContainAllKey(String string, String elementsString, boolean defaultBool, String split) { //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elementsString)) return defaultBool; String stringFormat = format(string); String[] elementsFormat = format(elementsString).split(Pattern.quote(split)); return isContainAllKey(stringFormat, Arrays.asList(elementsFormat)); } public static Set<String> findContainKeys(String string, String elementsString, String split) { HashSet findElements = new HashSet(); //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elementsString)) return findElements; //预先格式化处理 String stringFormat = format(string); String[] elementsFormat = format(elementsString).split(Pattern.quote(split)); for (String element : elementsFormat) { element = element.trim(); if(!element.isEmpty() && stringFormat.contains(element)){ findElements.add(element); } } return findElements; } public static boolean isContainOneKeys(String string, String elementsString, String split) { HashSet findElements = new HashSet(); //当元素为空时,返回默认值 if (isEmptyObj(string) || isEmptyObj(elementsString)) return false; //预先格式化处理 String[] elementsFormat = format(elementsString).split(Pattern.quote(split)); for (String element : elementsFormat) { element = element.trim(); if(!element.isEmpty() && format(string).contains(element)){ return true; } } return false; } } ================================================ FILE: src/main/java/utils/PathTreeUtils.java ================================================ package utils; import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import sqlUtils.Constants; import model.PathTreeModel; import model.RecordPathDirsModel; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import static utils.CastUtils.*; public class PathTreeUtils { /** * 基于输入的PATH路径实现字典树的生成 * @param uriPath * @return */ public static JSONObject createRootTree(String uriPath) { List<String> filteredParts = getUrlPart(uriPath); // 初始化根节点 JSONObject tree = new JSONObject(); tree.put("ROOT", new JSONObject()); // 用于追踪当前层级的JSONObject JSONObject currTreeNode = tree.getJSONObject("ROOT"); for (String part : filteredParts) { //添加子节点 if (!currTreeNode.containsKey(part)) { currTreeNode.put(part, new JSONObject()); } //修改当前操作的节点为子节点 currTreeNode = currTreeNode.getJSONObject(part); } return tree; } public static String formatUriPath(String uriPath) { return uriPath.replace("../", "").replace("./", ""); } /** * 拆分输入的PATH路径为列表 * @param uriPath * @return */ public static List<String> getUrlPart(String uriPath) { // 去除URL首尾的斜杠并分割路径部分 uriPath = formatUriPath(uriPath); String[] parts = uriPath.split("/"); // 使用传统循环过滤掉空字符串 List<String> filteredParts = new ArrayList<>(); for (String part : parts) { if (isNotEmptyObj(part)) { filteredParts.add(part); } } return filteredParts; } /** * 深度合并两个json对象 * @param baseTree * @param addTree * @return */ public static JSONObject deepMergeJsonTree(JSONObject baseTree, JSONObject addTree) { if (isEmptyObj(baseTree)) return addTree; if (isEmptyObj(addTree)) return baseTree; for (Map.Entry<String, Object> entry : addTree.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); if (baseTree.containsKey(key)) { if (baseTree.get(key) instanceof JSONObject && value instanceof JSONObject) { baseTree.put(key, deepMergeJsonTree(baseTree.getJSONObject(key), (JSONObject) value)); } else if (baseTree.get(key) instanceof JSONArray && value instanceof JSONArray) { // 这里简单合并数组,实际情况可能需要更复杂的逻辑处理 JSONArray array = new JSONArray(); array.addAll(baseTree.getJSONArray(key)); array.addAll((JSONArray) value); baseTree.put(key, array); } else { // 如果类型不同或非容器类型,选择第二个对象的值 baseTree.put(key, value); } } else { baseTree.put(key, value); } } return baseTree; } /** * 计算字符串中子字符串的数量 * @param str * @param substr * @return */ public static int counts(String str, String substr) { int index = 0; int count = 0; while ((index = str.indexOf(substr, index)) != -1) { count++; index += substr.length(); // 移动到子字符串下一个可能的起始位置 } return count; } /** * 优化的带有查找数量限制的方案 * @param subtree * @param targetKey * @param currentNodePath * @param maxFindPaths * @param foundPaths * @return */ private static List<JSONArray> findNodePathsRecursive(JSONObject subtree, String targetKey, JSONArray currentNodePath, int maxFindPaths, AtomicInteger foundPaths) { List<JSONArray> findNodePathResult = new ArrayList<>(); //判断是否有查找的必要,子链条字符串中都没有这个键,就可以直接忽略这个子树 if(counts(subtree.toJSONString(), String.format("\"%s\"", targetKey)) < 1){ return findNodePathResult; } // 检查是否已找到足够的路径 if (foundPaths.get() >= maxFindPaths) { return findNodePathResult; } //开始对比当前键 for (String currNode : subtree.keySet()) { JSONArray currNodePath = new JSONArray(currentNodePath); currNodePath.add(currNode); if (currNode.equalsIgnoreCase(targetKey)) { findNodePathResult.add(currNodePath); foundPaths.incrementAndGet(); // 达到需要找到的节点路径数量,停止查找 if (foundPaths.get() >= maxFindPaths) { return findNodePathResult; } } //开始对比当前键的值(子树) Object valueAsNewTree = subtree.get(currNode); if (valueAsNewTree instanceof JSONObject) { // 传递已找到路径的数量和路径列表 List<JSONArray> subNodePath = findNodePathsRecursive((JSONObject) valueAsNewTree, targetKey, currNodePath, maxFindPaths, foundPaths); findNodePathResult.addAll(subNodePath); // 达到需要找到的节点路径数量,停止查找 if (foundPaths.get() >= maxFindPaths) { return findNodePathResult; } } } return findNodePathResult; } /** * 输入根树节点和有顺序的键路径,获取键的值对象 * @param jsonObject * @param pathKeys * @return */ public static JSONObject findJsonValueByPaths(JSONObject jsonObject, JSONArray pathKeys) { JSONObject currentValue = jsonObject; for (Object key : pathKeys) { if (!(currentValue instanceof JSONObject)) { return null; // 如果当前值不是JSONObject,则路径不正确 } currentValue = (JSONObject) currentValue.get(key); if (currentValue == null) { return null; // 如果在路径中的某个键未找到,则返回null } } return currentValue; } /** * 完整的子节点查找 * @param rootTree * @param parts * @return */ public static List<JSONArray> findNodePathInTree(JSONObject rootTree, List<String> parts) { List<JSONArray> endPaths = new ArrayList<>(); //要搜索的位置,只搜索第一个,第二个作为补充即可,不要进行过多计算 String targetKey = parts.get(0); int maxKeyCounts = counts(rootTree.toJSONString(), String.format("\"%s\"", targetKey)); List<JSONArray> findNodePaths = findNodePathsRecursive(rootTree, targetKey, new JSONArray(), maxKeyCounts, new AtomicInteger(0)); //找到一个节点信息 if (findNodePaths.size() == 1 || parts.size() <= 1) { endPaths.addAll(findNodePaths); } //找到多个节点信息 并且还有其他关键字可以查找 if (findNodePaths.size() > 1 && parts.size() > 1) { for (JSONArray nodePath : findNodePaths) { JSONObject subValueTree = findJsonValueByPaths(rootTree, nodePath); // System.out.println(String.format("根据 键路径 %s 在根树中找到值 %s", nodePath, subValueTree)); if (counts(subValueTree.toJSONString(), String.format("\"%s\"", parts.get(1))) > 0) { //找到了对应的子节点数据,就决定是它了 endPaths.add(nodePath); //break; //考虑只查询一次, 节省递归次数 } } //循环完毕都没有找到,还是重新用开始这几个吧,有总比没有好吧 if (endPaths.size() < 1) endPaths.addAll(findNodePaths); } return endPaths; } /** * 将列表中的键拼接起来 * @param endNodePaths * @return */ public static JSONArray concatNodePaths(List<JSONArray> endNodePaths) { // 返回最终的列表 JSONArray findPaths = new JSONArray(); if (isNotEmptyObj(endNodePaths)){ for (JSONArray endNodePath : endNodePaths) { // 确保每个元素都是字符串,因为String.join需要处理字符串数组 List<String> stringPath = new ArrayList<>(); for (Object obj : endNodePath) { stringPath.add(obj.toString()); // 假设obj可以安全地转换为字符串 } String joinedPath = String.join("/", stringPath); findPaths.add(joinedPath); } } return findPaths; } /** * 输入一个路径列表,自动合并|生成树 * @param uriPathList * @return */ public static JSONObject createRootTree(List<String> uriPathList) { //存储数据 JSONObject baseTree = new JSONObject(); if (isNotEmptyObj(uriPathList)) { //处理其他情况 baseTree = createRootTree(uriPathList.get(0)); for (int i = 1; i < uriPathList.size(); i++) { baseTree = deepMergeJsonTree(baseTree, createRootTree(uriPathList.get(i))); } } return baseTree; } /** * 过滤路径列表中的空和/ * @param uriPathList * @return */ public static List<String> filterBlankPath(List<String> uriPathList) { List list = new ArrayList<String>(); for (String path: uriPathList){ if (isNotEmptyObj(path) && !"/".equals(path.trim())) list.add(path); } return list; } /** * 生成路径树 输入格式 {host:[path list]} */ public static PathTreeModel genPathsTree(RecordPathDirsModel recordPathModel) { PathTreeModel pathTreeModel = null; // 3、为每个域名计算根数 String[] reqPathDirsToPaths = recordPathModel.getReqPathDirs().split(Constants.SPLIT_SYMBOL); if (reqPathDirsToPaths.length > 0) { List<String> filterPaths = filterBlankPath(Arrays.asList(reqPathDirsToPaths)); JSONObject newPathTree = createRootTree(filterPaths); if (isNotEmptyObj(newPathTree)){ pathTreeModel = new PathTreeModel( recordPathModel.getRootUrl(), reqPathDirsToPaths.length, newPathTree ); } } return pathTreeModel; } public static JSONArray findNodePathInTree(JSONObject tree, String sub_url) { JSONArray findPaths = new JSONArray(); List<String> sub_parts = getUrlPart(sub_url); if (isNotEmptyObj(sub_parts)) { //从树中寻找可能的节点路径 List<JSONArray> endNodePaths = findNodePathInTree(tree, sub_parts); if (isNotEmptyObj(endNodePaths)) findPaths = concatNodePaths(endNodePaths); } return findPaths; } /** * 基于Json树生成所有Path */ private static List<String> covertTreeToPaths(JSONObject json, String path) { List<String> paths = new ArrayList<>(); for (Map.Entry<String, Object> entry : json.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); // 构建新的路径 String newPath = path.isEmpty() ? key : path + "/" + key; paths.add(newPath); if (value instanceof JSONObject) { // 如果值是JSONObject,递归调用 // 注意:这里的collectJsonPaths调用不需要额外的List参数 paths.addAll(covertTreeToPaths((JSONObject) value, newPath)); } } return paths; } public static List<String> covertTreeToPaths(JSONObject tree) { return covertTreeToPaths(tree, ""); } public static void main(String[] args) { String url = "/biz-gateway/walletParam/paramTypeGroup/findListByGroupName"; JSONObject tree = createRootTree(url); System.out.println(tree.toJSONString()); String url2 = "/biz-gateway/walletSystem/sysLogin/randomImage/1715413128"; JSONObject tree2 = createRootTree(url2); System.out.println(tree2.toJSONString()); tree = deepMergeJsonTree(tree, tree2); System.out.println(tree.toJSONString()); String url3 = "/biz-gateway/walletSystem/sysLogin/randomImage/walletParam"; tree = deepMergeJsonTree(tree, createRootTree(url3)); System.out.println(tree.toJSONString()); String sub_url = "../walletParam/paramTypeGroup/findListByGroupName"; JSONArray findNode = findNodePathInTree(tree, sub_url); System.out.println(findNode.toJSONString()); List<String> paths = covertTreeToPaths(tree); System.out.println(paths); } } ================================================ FILE: src/main/java/utils/RegularUtils.java ================================================ package utils; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import static utils.BurpPrintUtils.*; public class RegularUtils { /** * 编译提取URI的正则表达式列表 */ public static List<Pattern> compileUriMatchRegular(List<String> regularList) { List<Pattern> patternList = new ArrayList<>(); if (CastUtils.isNotEmptyObj(regularList)){ for (String regular : regularList) { try { Pattern pattern = Pattern.compile(regular); patternList.add(pattern); stdout_println(LOG_DEBUG, String.format("[+] compile regular success: [%s]", regular)); } catch (PatternSyntaxException e) { // 处理正则表达式语法错误 stderr_println(LOG_ERROR, String.format("[!] Invalid regular expression: [%s] -> [%s]", regular, e.getMessage())); } catch (Exception e) { // 处理其他可能的异常 stderr_println(LOG_ERROR, String.format("Unexpected error occurred while compiling regex: [%s] -> [%s]", regular, e.getMessage()) ); } } } if (patternList.isEmpty()){ Pattern FIND_PATH_PATTERN = Pattern.compile("(?:\"|')(((?:[a-zA-Z]{1,10}://|//)[^\"'/]{1,}\\.[a-zA-Z]{2,}[^\"']{0,})|((?:/|\\.\\./|\\./)[^\"'><,;|*()(%%$^/\\\\\\[\\]][^\"'><,;|()]{1,})|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{1,}\\.(?:[a-zA-Z]{1,4}|action)(?:[\\?|/|;][^\"|']{0,}|))|([a-zA-Z0-9_\\-]{1,}\\.(?:php|asp|aspx|jsp|json|action|html|js|txt|xml)(?:\\?[^\"|']{0,}|)))(?:\"|')"); patternList.add(FIND_PATH_PATTERN); } return patternList; } } ================================================ FILE: src/main/java/utils/RespFieldCompareutils.java ================================================ package utils; import burp.IHttpRequestResponse; import com.alibaba.fastjson2.JSON; import model.HttpMsgInfo; import model.HttpUrlInfo; import model.RespFieldsModel; import utilbox.HelperPlus; import java.security.SecureRandom; import java.util.*; import static utils.BurpPrintUtils.*; import static utils.BurpPrintUtils.LOG_ERROR; import static utils.CastUtils.isEmptyObj; import static utils.CastUtils.isNotEmptyObj; public class RespFieldCompareutils { /** * 实际用来对比的模型数据 */ public static Map<String, Object> findMapsSameFieldValue(List<Map<String, Object>> FieldValuesMapList) { if (FieldValuesMapList == null || FieldValuesMapList.size() <= 1) { return Collections.emptyMap(); } // 获取第一个对象的字段映射,用于参考 Map<String, Object> referenceFields = FieldValuesMapList.get(0); Map<String, Object> commonFields = new HashMap<>(); // 遍历所有字段 for (Map.Entry<String, Object> entry : referenceFields.entrySet()) { String fieldName = entry.getKey(); Object fieldValue = entry.getValue(); if (isNotEmptyObj(fieldValue)) { // 检查所有对象的该字段是否具有相同的值 //忽略空字段 boolean allMatch = true; for (Map<String, Object> FieldValuesMap : FieldValuesMapList) { Object currentFieldValue = FieldValuesMap.get(fieldName); if (isEmptyObj(currentFieldValue) || !fieldValue.equals(currentFieldValue)) { allMatch = false; break; // 一旦发现本字段值不匹配,立即退出循环, 比较下一个字段 } } if (allMatch) { commonFields.put(fieldName, fieldValue); } } } return commonFields; } /** * 用 当前响应对象 和 筛选条件 进行对比 * @param currentCommonFields 当前响应对象 * @param filterCommonFields 筛选条件 * @return */ public static boolean sameFieldValueIsEquals(Map currentCommonFields, Map filterCommonFields, boolean equalsAllFields) { boolean allValuesEquals = equalsAllFields ? mapSameFieldAsAllValuesEquals(currentCommonFields, filterCommonFields) : mapSameFieldOneValuesEquals(currentCommonFields, filterCommonFields); return allValuesEquals; } /** * 实际用来对比的Map数据 所有相同键都相等 */ public static boolean mapSameFieldAsAllValuesEquals(Map<String, Object> currRespCommonFields, Map<String, Object> filterRespCommonFields) { // 遍历所有字段 boolean allMatch = true; for (Map.Entry<String, Object> entry : filterRespCommonFields.entrySet()) { String fieldName = entry.getKey(); Object fieldValue = entry.getValue(); if (isNotEmptyObj(fieldValue)) { // 检查所有对象的该字段是否具有相同的值 Object currentFieldValue = currRespCommonFields.get(fieldName); if (isEmptyObj(currentFieldValue) || !fieldValue.equals(currentFieldValue)) { allMatch = false; } } } return allMatch; } /** * 实际用来对比的Map数据 有一个相同键相等 */ public static boolean mapSameFieldOneValuesEquals(Map<String, Object> currRespCommonFields, Map<String, Object> filterRespCommonFields) { // 遍历所有字段 boolean allMatch = false; for (Map.Entry<String, Object> entry : filterRespCommonFields.entrySet()) { String fieldName = entry.getKey(); Object fieldValue = entry.getValue(); if (isNotEmptyObj(fieldValue)) { //检查所有对象的该字段是否 有一个是 具有相同的值 Object currentFieldValue = currRespCommonFields.get(fieldName); if (isNotEmptyObj(currentFieldValue) && fieldValue.equals(currentFieldValue)) { allMatch = true; break; } } } return allMatch; } /** * 基于当前请求信息生成URL */ public static List<String> generateTestUrls(HttpUrlInfo urlInfo) { //获取当前的URL 生成几个测试URL String rootUrlSimple = urlInfo.getRootUrlNotSlash(); //当前请求 http://xxx.com String pathToFile = urlInfo.getPathToFile(); //当前请求文件路径 /user/login.php String pathToDir = urlInfo.getPathToDir(); //当前请求目录 /user/ String suffix = urlInfo.getSuffixUsual(); //当前请求后缀 .php String file = urlInfo.getFile(); //当前请求文件 login.php String SLASH = "/"; List<String> testUrls; testUrls = (SLASH.equals(pathToDir) || isEmptyObj(file)) ? generateTestUrls(rootUrlSimple, SLASH): generateTestUrls(rootUrlSimple, pathToFile, pathToDir, suffix, SLASH); return testUrls; } /** * 生成随机字符串 */ public static String getRandomStr(int length) { SecureRandom random = new SecureRandom(); StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) { int randomCharType = random.nextInt(3); // 0 - uppercase, 1 - lowercase, 2 - digit switch (randomCharType) { case 0: sb.append((char) ('A' + random.nextInt(26))); // A-Z break; case 1: sb.append((char) ('a' + random.nextInt(26))); // a-z break; case 2: sb.append((char) ('0' + random.nextInt(10))); // 0-9 break; } } return sb.toString(); } /** * 基于当前请求信息生成URL */ private static List<String> generateTestUrls(String rootUrl, String pathToFile, String pathToDir, String suffix, String SLASH) { List<String> urls = new ArrayList<>(); String random1 = getRandomStr(8); String random2 = getRandomStr(8); // 1. 随机目录随机文件当前后缀 urls.add(rootUrl + SLASH + random1 + SLASH + random2 + (isEmptyObj(suffix) ? "" : suffix)); // 2. 当前目录随机文件 urls.add(rootUrl + pathToDir + random1 + (isEmptyObj(suffix) ? "" : suffix)); // 3. 随机目录当前路径 urls.add(rootUrl + SLASH + random1 + pathToFile); return urls; } /** * 完全随机生成URL */ private static List<String> generateTestUrls(String rootUrl, String SLASH) { List<String> urls = new ArrayList<>(); String rand1 = getRandomStr(8); String rand2 = getRandomStr(8); String suffix = getRandomStr(3); //2、rootUrl/dir1/dir2/file1 urls.add(rootUrl + SLASH + rand1 + SLASH + rand2 + SLASH + rand2+ "." + suffix); //1、rootUrl/dir1/file1.suffix urls.add(rootUrl + SLASH + rand1 + SLASH + rand2); //3、rootUrl/file1.suffix urls.add(rootUrl + SLASH + rand2 + "." + suffix); return urls; } /** * 生成动态过滤信息 */ public static Map<String, Object> generateDynamicFilterMap(HttpMsgInfo msgInfo, boolean checkSocketConnect) { //生成测试路径 List<String> testUrlList = RespFieldCompareutils.generateTestUrls(msgInfo.getUrlInfo()); Map<String, Object> filterModel = new HashMap<>(); //判断是否能够正常建立socket连接 if (!checkSocketConnect || BurpHttpUtils.AddressCanConnectWithCache(testUrlList.get(0))){ List<Map<String, Object>> FieldValuesMapList = new ArrayList<>(); //进行URL请求 并获取 respInfoJson HelperPlus helperPlus = HelperPlus.getInstance(); List<String> rawHeaders = helperPlus.getHeaderList(true, msgInfo.getReqBytes()); //记录准备加入的请求 for (String reqUrl:testUrlList){ try { //发起HTTP请求 //stdout_println(LOG_DEBUG, String.format("[*] Auto Access Test URL: %s", reqUrl)); IHttpRequestResponse requestResponse = BurpHttpUtils.makeHttpRequest(reqUrl, rawHeaders); if (requestResponse != null){ HttpMsgInfo newMsgInfo = new HttpMsgInfo(requestResponse); RespFieldsModel respCompareModel = new RespFieldsModel(newMsgInfo.getRespInfo()); FieldValuesMapList.add(respCompareModel.getAllFieldsAsMap()); stdout_println(LOG_DEBUG, String.format("[*] TEST URL:%s -> %s", reqUrl, JSON.toJSON(respCompareModel.getAllFieldsAsMap()))); } Thread.sleep(200); } catch (InterruptedException e) { stderr_println(LOG_ERROR, String.format("Thread.sleep Error: %s", e.getMessage())); e.printStackTrace(); } } //生成过滤条件 filterModel = RespFieldCompareutils.findMapsSameFieldValue(FieldValuesMapList); } if (isNotEmptyObj(filterModel)) { stdout_println(LOG_INFO, String.format("[*] 生成动态过滤条件成功: %s-> %s", msgInfo.getUrlInfo().getRootUrlUsual(), JSON.toJSON(filterModel))); }else { stderr_println(LOG_ERROR, String.format("[!] 生成动态过滤条件为空: %s-> %s", msgInfo.getUrlInfo().getRootUrlUsual(), JSON.toJSON(filterModel))); } return filterModel; } } ================================================ FILE: src/main/java/utils/RespHashUtils.java ================================================ package utils; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.CRC32; public class RespHashUtils { public static String getFaviconHash(byte[] body) { String base64Favicon = Base64.getEncoder().encodeToString(body); // 格式化base64字符串 String formattedBase64Favicon = formatBase64(base64Favicon); // 计算格式化后base64字符串的murmurHash3值 return String.valueOf(murmurHash3_x86_32(formattedBase64Favicon.getBytes(), 0, formattedBase64Favicon.length(), 0)); } private static String formatBase64(String base64) { Pattern pattern = Pattern.compile(".{76}"); Matcher matcher = pattern.matcher(base64); StringBuilder formattedBase64 = new StringBuilder(); while (matcher.find()) { formattedBase64.append(matcher.group()).append("\n"); } int remainder = base64.length() % 76; if (remainder > 0) { formattedBase64.append(base64.substring(base64.length() - remainder)).append("\n"); } return formattedBase64.toString(); } public static int murmurHash3_x86_32(final byte[] data, int offset, int len, final int seed) { final int c1 = 0xcc9e2d51; final int c2 = 0x1b873593; int h1 = seed; final int roundedEnd = offset + (len & 0xfffffffc); // round down to 4 byte block for (int i = offset; i < roundedEnd; i += 4) { // little endian load order int k1 = (data[i] & 0xff) | ((data[i + 1] & 0xff) << 8) | ((data[i + 2] & 0xff) << 16) | (data[i + 3] << 24); k1 *= c1; k1 = Integer.rotateLeft(k1, 15); k1 *= c2; h1 ^= k1; h1 = Integer.rotateLeft(h1, 13); h1 = h1 * 5 + 0xe6546b64; } // handle the last few bytes of the input array int k1 = 0; switch (len & 0x03) { case 3: k1 = (data[roundedEnd + 2] & 0xff) << 16; // fall through case 2: k1 |= (data[roundedEnd + 1] & 0xff) << 8; // fall through case 1: k1 |= (data[roundedEnd] & 0xff); k1 *= c1; k1 = Integer.rotateLeft(k1, 15); k1 *= c2; h1 ^= k1; } // finalization h1 ^= len; // fmix h1 ^= h1 >>> 16; h1 *= 0x85ebca6b; h1 ^= h1 >>> 13; h1 *= 0xc2b2ae35; h1 ^= h1 >>> 16; return h1; } /** * 字符串转 CRC32 */ public static String calcCRC32(String string) { // 使用 UTF-8 编码将字符串转换为字节数组 byte[] inputBytes = string.getBytes(StandardCharsets.UTF_8); return calcCRC32(inputBytes); } /** * 字符Byte[]转 CRC32 */ public static String calcCRC32(byte[] inputBytes) { // 初始化CRC32对象 CRC32 crc32 = new CRC32(); // 更新CRC值 crc32.update(inputBytes, 0, inputBytes.length); // 将计算后的CRC32值转换为十六进制字符串并返回 return Long.toHexString(crc32.getValue()).toLowerCase(); } } ================================================ FILE: src/main/java/utils/RespTitleUtils.java ================================================ package utils; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RespTitleUtils { /** * 从HTML文档中提取<title>标签的内容。 */ public static String parseTextTitle(byte[] bodyBytes) { String title = null; if (bodyBytes.length>0){ byte[] bytesToParse = bodyBytes; // 如果bodyBytes长度大于10000,仅取前10000字节 if (bodyBytes.length > 10000) { bytesToParse = Arrays.copyOfRange(bodyBytes, 0, 10000); } // 将字节数组转换为字符串 String htmlContent = new String(bytesToParse, StandardCharsets.UTF_8); // 定义一个正则表达式来匹配<title>标签内的内容 Pattern pattern = Pattern.compile("<title>(.*?)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL); // 创建一个Matcher对象 Matcher matcher = pattern.matcher(htmlContent); // 检查是否找到了匹配项 if (matcher.find()) { title = matcher.group(1).trim(); } } return title; } /** * 获取 HTML 中 标签的内容,支持分块匹配。 * * @param responseBody 响应体内容 * @param chunkSize 每次处理的块大小(字符数) * @return 匹配到的 <title> 标签内容,如果没有匹配到则返回空字符串 */ public static String getTitle(String responseBody, int chunkSize) { if (responseBody == null || responseBody.isEmpty()) { return ""; } // 定义正则表达式,匹配 <title> 标签内容 Pattern pattern = Pattern.compile("<title>(.*?)", Pattern.CASE_INSENSITIVE); // 分块处理 responseBody int length = responseBody.length(); for (int start = 0; start < length; start += chunkSize) { // 计算当前块的结束位置 int end = Math.min(start + chunkSize, length); String chunk = responseBody.substring(start, end); // 使用正则表达式匹配当前块 Matcher matcher = pattern.matcher(chunk); if (matcher.find()) { return matcher.group(1); // 返回第一个匹配到的 内容 } } // 如果没有匹配到,返回空字符串 return ""; } } ================================================ FILE: src/main/java/utils/RespWebpackJsParser.java ================================================ package utils; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RespWebpackJsParser { //aaaaaaa.aaaa.js //0.690fe1e4ceaf45313632.js //private static final String WEBPACK_JS_PATTERN_CHECK = "\"([\\w-]+)\":\"(\\w+)\"\\}\\[\\w\\]\\+\".js\""; //字符型 private static final String WEBPACK_JS_PATTERN_CHECK = "[\"]?([\\d\\w-]+)[\"]?:\"(\\w+)\"\\}\\[\\w\\]\\+\".js\""; //字符+数字 private static final String WEBPACK_JS_PATTERN_EXTRACT_JS = "([^{^+}]+\\}[\\[\\]\\w\\+\\\"]{5}.js\")"; //private static final String WEBPACK_JS_PATTERN_EXTRACT_KV = "\"([\\w-]+)\":\"(\\w+)\""; //字符型 private static final String WEBPACK_JS_PATTERN_EXTRACT_KV = "[\"]?([\\d\\w-]+)[\"]?:\"(\\w+)\""; //字符+数字 private static final Pattern patternCheck = Pattern.compile(WEBPACK_JS_PATTERN_CHECK); private static final Pattern patternExtractJS = Pattern.compile(WEBPACK_JS_PATTERN_EXTRACT_JS); private static final Pattern patternExtractKV = Pattern.compile(WEBPACK_JS_PATTERN_EXTRACT_KV); public static Set<String> parseWebpackSimple(String text) { Set<String> matches = new LinkedHashSet<>(); Matcher matcherCheck = patternCheck.matcher(text); if (matcherCheck.find()) { Matcher matcherJs = patternExtractJS.matcher(text); while (matcherJs.find()) { String extract = matcherJs.group(1); Matcher matcherKV = patternExtractKV.matcher(extract); while (matcherKV.find()) { String key = matcherKV.group(1); String value = matcherKV.group(2); if (!value.isEmpty()) { matches.add(key + "." + value + ".js"); } } } } return matches; } /** * 最新实现的分块正则匹配常规版本 */ public static Set<String> parseWebpackSimpleChunk(String text, int chunkSize) { Set<String> matches = new HashSet<>(); int textLength = text.length(); for (int start = 0; start < textLength; start += chunkSize) { int end = Math.min(start + chunkSize, textLength); String jsChunk = text.substring(start, end); matches.addAll(parseWebpackSimple(jsChunk)); } return matches; } public static void main(String[] args) { String jsFile = "C:\\Users\\WINDOWS\\Desktop\\testdata\\数字型.js"; String data = BurpFileUtils.readFileToString(jsFile); System.out.println(data.length()); Set<String> results = parseWebpackSimple(data); for (String result : results) { System.out.println(result); } } } ================================================ FILE: src/main/java/utils/UiUtils.java ================================================ package utils; import burp.BurpExtender; import burp.IProxyScanner; import database.*; import model.FindPathModel; import model.RecordHashMap; import sqlUtils.CommonDeleteLine; import ui.*; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableRowSorter; import java.awt.*; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.net.URL; import java.util.*; import java.util.List; import static utils.BurpPrintUtils.*; public class UiUtils { public static ImageIcon getImageIcon(String iconPath, int xWidth, int yWidth){ // 根据按钮的大小缩放图标 URL iconURL = UiUtils.class.getResource(iconPath); ImageIcon originalIcon = new ImageIcon(iconURL); Image img = originalIcon.getImage(); Image newImg = img.getScaledInstance(xWidth, yWidth, Image.SCALE_SMOOTH); return new ImageIcon(newImg); } public static ImageIcon getImageIcon(String iconPath){ // 根据按钮的大小缩放图标 URL iconURL = UiUtils.class.getResource(iconPath); ImageIcon originalIcon = new ImageIcon(iconURL); Image img = originalIcon.getImage(); Image newImg = img.getScaledInstance(17, 17, Image.SCALE_SMOOTH); return new ImageIcon(newImg); } /** * 获取当前显示行的 number */ public static int getIdAtActualRow(JTable table, int row, int columnIndex) { TableRowSorter<DefaultTableModel> sorter = (TableRowSorter<DefaultTableModel>) table.getRowSorter(); int modelRow = sorter.convertRowIndexToModel(row); int id = (int) table.getModel().getValueAt(modelRow, columnIndex); return id; } /** * 批量获取所有行列表相关的 numbers 列表 默认在第1列 */ public static List<Integer> getIdsAtActualRows(JTable table, int[] selectedRows, int columnIndex) { List<Integer> ids = new ArrayList<>(); if (selectedRows.length > 0) { for (int selectedRow : selectedRows) { if (selectedRow != -1){ ids.add(getIdAtActualRow(table, selectedRow, columnIndex)); } } } return ids; } /** * 获取当前显示行的 String */ public static String getStringAtActualRow(JTable table, int row, int columnIndex) { // 获取实际的行索引,因为JTable的 getSelectedRows 返回的是视图索引 TableRowSorter<DefaultTableModel> sorter = (TableRowSorter<DefaultTableModel>) table.getRowSorter(); int modelRow = sorter.convertRowIndexToModel(row); String url = (String) table.getModel().getValueAt(modelRow, columnIndex); return url; } /** * 批量获取所有行列表相关的 String 列表 */ public static List<String> getStringListAtActualRows(JTable table, int[] selectedRows, int columnIndex) { List<String> urls = new ArrayList<>(); if (selectedRows.length > 0){ // 遍历所有选定的行 for (int selectedRow : selectedRows) { if (selectedRow != -1) urls.add(getStringAtActualRow(table, selectedRow, columnIndex)); } } return urls; } /** * 把字符串传递到系统剪贴板 * @param text */ public static void copyToSystemClipboard(String text) { // 创建一个StringSelection对象,传入要复制的文本 StringSelection stringSelection = new StringSelection(text); // 获取系统剪贴板 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); // 将数据放到剪贴板上 clipboard.setContents(stringSelection, null); stdout_println(LOG_DEBUG, "Text copied to clipboard."); } /** * 显示消息到弹出框 * @param text */ public static void showOneMsgBoxToCopy(String text, String title) { // 创建一个JTextArea JTextArea textArea = new JTextArea(text); textArea.setLineWrap(true); // 自动换行 textArea.setWrapStyleWord(true); // 断行不断字 textArea.setEditable(true); // 设置为不可编辑 textArea.setCaretPosition(0); // 将插入符号位置设置在文档开头,这样滚动条会滚动到顶部 // 使JTextArea能够被复制 textArea.setSelectionStart(0); textArea.setSelectionEnd(textArea.getText().length()); // 将JTextArea放入JScrollPane JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(350, 150)); // 设定尺寸 // 弹出一个包含滚动条的消息窗口 //String title = "提取url成功"; JOptionPane.showMessageDialog( null, scrollPane, title, JOptionPane.INFORMATION_MESSAGE ); } /** * 为 数据模型创建捆绑的 tableUI 支持内容悬浮提示 */ public static JTable creatTableUiWithTips(DefaultTableModel tableModel) { JTable tableUI = new JTable(tableModel) { //通过匿名内部类创建JTable,用于在不单独创建一个子类的情况下,覆写或添加JTable的行为。 //覆写JTable的getToolTipText(MouseEvent e)方法。这个方法决定了当鼠标悬停在表格的某个单元格上时,将显示的工具提示文本内容。 @Override public String getToolTipText(MouseEvent e) { int row = rowAtPoint(e.getPoint()); int col = columnAtPoint(e.getPoint()); //通过调用rowAtPoint(e.getPoint())和columnAtPoint(e.getPoint())方法,根据鼠标事件的坐标找到对应的行号和列号。 //检查行号和列号是否有效(大于-1),如果是,则获取该单元格的值 if (row > -1 && col > -1) { Object value = getValueAt(row, col); return value == null ? null : value.toString(); } //如果找不到有效的行或列,最终调用超类的getToolTipText(e)方法,保持默认行为 return super.getToolTipText(e); } }; return tableUI; } /** * 为表头添加点击排序功能 */ public static void tableAddActionSortByHeader(JTable tableUI,DefaultTableModel tableModel) { //为 table添加排序功能 //创建并设置 TableRowSorter TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<>(tableModel); tableUI.setRowSorter(sorter); // 设置列类型和比较器 for (int i = 0; i < tableModel.getColumnCount(); i++) { //Comparator.naturalOrder() 使用自然排序 是 Java 8 引入的一个实用方法,按字母顺序(对于字符串)或数值大小(对于数字类型)。 Comparator<?> comparator = Comparator.naturalOrder(); // 如果比较器不是 null,则设置该比较器 sorter.setComparator(i, comparator); } // 监听表头点击事件 tableUI.getTableHeader().addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int viewIndex = tableUI.columnAtPoint(e.getPoint()); if (viewIndex >= 0) { int modelIndex = tableUI.convertColumnIndexToModel(viewIndex); // 获取当前列的排序模式 List<? extends RowSorter.SortKey> currentSortKeys = sorter.getSortKeys(); RowSorter.SortKey currentSortKey = null; // 遍历当前排序键列表,查找当前列的排序键 for (RowSorter.SortKey key : currentSortKeys) { if (key.getColumn() == modelIndex) { currentSortKey = key; break; } } // 确定新的排序类型 SortOrder newSortOrder; if (currentSortKey == null) { // 如果当前列未排序,则默认为升序 newSortOrder = SortOrder.ASCENDING; } else { // 如果当前列已排序,改变排序方向 newSortOrder = currentSortKey.getSortOrder() == SortOrder.ASCENDING ? SortOrder.DESCENDING : SortOrder.ASCENDING; } // 清除旧的排序 sorter.setSortKeys(null); // 应用新的排序 List<RowSorter.SortKey> newSortKeys = new ArrayList<>(); newSortKeys.add(new RowSorter.SortKey(modelIndex, newSortOrder)); sorter.setSortKeys(newSortKeys); } } }); } /** * 设置 table 的指定列的最大宽度 */ public static void tableSetColumnMaxWidth(JTable tableUI, int columnIndex, int maxWidth) { // 获取表格的列数 tableUI.getColumnModel().getColumn(columnIndex).setMaxWidth(maxWidth); } /** * 设置 table 的指定列的最小宽度 */ public static void tableSetColumnMinWidth(JTable tableUI, int columnIndex, int minWidth) { // 获取表格的列数 tableUI.getColumnModel().getColumn(columnIndex).setMinWidth(minWidth); } /** * 为UI的指定列设置左对齐,其他的设置居中对齐 */ public static void tableSetColumnsAlignRender(JTable tableUI, List<Integer> leftColumns) { DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer(); //居中对齐的单元格渲染器 centerRenderer.setHorizontalAlignment(JLabel.CENTER); DefaultTableCellRenderer leftRenderer = new DefaultTableCellRenderer(); //左对齐的单元格渲染器 leftRenderer.setHorizontalAlignment(JLabel.LEFT); // 获取表格的列数 int columnCount = tableUI.getColumnCount(); // 设置左对齐 for (Integer leftColumn : leftColumns) { if (leftColumn < columnCount) tableUI.getColumnModel().getColumn(leftColumn).setCellRenderer(leftRenderer); } // 设置居中对齐 for (int column = 0; column < columnCount; column++) { if (!leftColumns.contains(column)) { if (column < columnCount) tableUI.getColumnModel().getColumn(column).setCellRenderer(centerRenderer); } } } /** * 弹框 读取用户输入 弹框 输出到用户 * @param stringList * @param itemType * @param title */ public static void showInputBoxAndHandle(List<String> stringList, String itemType, String title) { //弹出框,等待用户输入 //创建一个对话框,便于输入url数据 JDialog dialog = new JDialog(); dialog.setTitle(title); dialog.setLayout(new GridBagLayout()); // 使用GridBagLayout布局管理器 GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.insets = new Insets(10, 10, 10, 10); // 设置组件之间的间距 // 添加第一行提示 JLabel urlJLabel = new JLabel("输入数据:"); constraints.gridx = 0; // 第1列 constraints.gridy = 0; // 第1行 constraints.gridwidth = 2; // 占据两列的空间 dialog.add(urlJLabel, constraints); JTextArea customParentPathArea = new JTextArea(15, 35); customParentPathArea.setText(""); customParentPathArea.setLineWrap(true); // 自动换行 customParentPathArea.setWrapStyleWord(true); //断行不断字 constraints.gridy = 1; // 第2行 constraints.gridx = 0; // 第1列 dialog.add(new JScrollPane(customParentPathArea), constraints); // 添加滚动条 // 添加按钮面板 JPanel buttonPanel = new JPanel(); JButton confirmButton = new JButton("确认"); JButton cancelButton = new JButton("取消"); buttonPanel.add(confirmButton); buttonPanel.add(cancelButton); constraints.gridx = 0; // 第一列 constraints.gridy = 2; // 第三行 constraints.gridwidth = 2; // 占据两列的空间 dialog.add(buttonPanel, constraints); dialog.pack(); // 调整对话框大小以适应其子组件 dialog.setLocationRelativeTo(null); // 居中显示 dialog.setVisible(true); // 显示对话框 // 取消按钮事件 cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dialog.dispose(); // 关闭对话框 } }); // 不同的 确认按钮动作 confirmButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取用户输入 String inputText = customParentPathArea.getText(); dialog.dispose(); // 关闭对话框 //调用新的动作 List<String> urlList = CastUtils.getUniqueLines(inputText); if (!urlList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { List<FindPathModel> findPathModelList = new ArrayList<FindPathModel>(); Set<String> pathSet = new HashSet<>(); Set<String> urlSet; switch (itemType){ case "calcSingleLayerNodeItemOnUrl": //基于pathSet和用户输入组合URL findPathModelList = AnalyseUrlResultTable.fetchPathDataByMsgHashList(stringList); pathSet = FindPathModel.getSingleLayerPathSet(findPathModelList); urlSet = new LinkedHashSet<>(); for (String prefix : urlList) { List<String> urls = AnalyseInfoUtils.concatUrlAddPath(prefix, new ArrayList<>(pathSet)); if (urls.size() > 0) urlSet.addAll(urls); } //直接复制到用户的粘贴板 copyToSystemClipboard(String.join("\n", urlSet)); //弹框让用户查看 showOneMsgBoxToCopy(String.join("\n", urlSet), "单层路径生成URL"); break; case "calcSingleLayerNodeItemOnHost": //基于pathSet和用户输入组合URL findPathModelList = AnalyseHostResultTable.fetchPathDataByRootUrl(stringList); pathSet = FindPathModel.getSingleLayerPathSet(findPathModelList); urlSet = new LinkedHashSet<>(); for (String prefix : urlList) { List<String> urls = AnalyseInfoUtils.concatUrlAddPath(prefix, new ArrayList<>(pathSet)); if (urls.size() > 0) urlSet.addAll(urls); } //直接复制到用户的粘贴板 copyToSystemClipboard(String.join("\n", urlSet)); //弹框让用户查看 showOneMsgBoxToCopy(String.join("\n", urlSet), "单层路径生成URL"); break; } return null; } }.execute(); } } }); } /** * 创建常用的开关UI */ public static JToggleButton getToggleButtonByDefaultValue(boolean IsOpenDefault) { JToggleButton toggleButton; //根据默认条件设置UI if (IsOpenDefault){ toggleButton = new JToggleButton(UiUtils.getImageIcon("/icon/openButtonIcon.png", 40, 24)); toggleButton.setSelectedIcon(UiUtils.getImageIcon("/icon/shutdownButtonIcon.png", 40, 24)); }else { toggleButton = new JToggleButton(UiUtils.getImageIcon("/icon/shutdownButtonIcon.png", 40, 24)); toggleButton.setSelectedIcon(UiUtils.getImageIcon("/icon/openButtonIcon.png", 40, 24)); } toggleButton.setPreferredSize(new Dimension(50, 24)); toggleButton.setBorder(null); // 设置无边框 toggleButton.setFocusPainted(false); // 移除焦点边框 toggleButton.setContentAreaFilled(false); // 移除选中状态下的背景填充 return toggleButton; } /** * 创建加入URL和PATH表的对话框函数 */ public static void creatTextDialogForAddRecord(String title, String RecordType) { //创建一个对话框,便于输入url数据 JDialog dialog = new JDialog(); dialog.setTitle(title); dialog.setLayout(new GridBagLayout()); // 使用GridBagLayout布局管理器 GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.insets = new Insets(10, 10, 10, 10); // 设置组件之间的间距 // 添加第一行提示 JLabel urlJLabel = new JLabel("输入数据:"); constraints.gridx = 0; // 第1列 constraints.gridy = 0; // 第1行 constraints.gridwidth = 2; // 占据两列的空间 dialog.add(urlJLabel, constraints); JTextArea customParentPathArea = new JTextArea(5, 20); customParentPathArea.setText(""); customParentPathArea.setLineWrap(true); // 自动换行 customParentPathArea.setWrapStyleWord(true); //断行不断字 constraints.gridy = 1; // 第2行 constraints.gridx = 0; // 第1列 dialog.add(new JScrollPane(customParentPathArea), constraints); // 添加滚动条 // 添加按钮面板 JPanel buttonPanel = new JPanel(); JButton confirmButton = new JButton("确认"); JButton cancelButton = new JButton("取消"); buttonPanel.add(confirmButton); buttonPanel.add(cancelButton); constraints.gridx = 0; // 第一列 constraints.gridy = 2; // 第三行 constraints.gridwidth = 2; // 占据两列的空间 dialog.add(buttonPanel, constraints); dialog.pack(); // 调整对话框大小以适应其子组件 dialog.setLocationRelativeTo(null); // 居中显示 dialog.setVisible(true); // 显示对话框 // 取消按钮事件 cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dialog.dispose(); // 关闭对话框 } }); // 不同的 确认按钮动作 confirmButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取用户输入 String inputText = customParentPathArea.getText(); dialog.dispose(); // 关闭对话框 //调用新的动作 java.util.List<String> urlList = CastUtils.getUniqueLines(inputText); if (!urlList.isEmpty()){ // 使用SwingWorker来处理数据更新,避免阻塞EDT new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { switch (RecordType){ case "addUrlToRecordUrl": RecordUrlTable.insertOrUpdateAccessedUrlsBatch(urlList, 299); break; case "addUrlToRecordPath": RecordPathTable.insertOrUpdateRecordPathsBatch(urlList, 299); break; case "addRootUrlToAllowListen": BurpExtender.CONF_WHITE_ROOT_URL = CastUtils.addUrlsRootUrlToList(urlList, BurpExtender.CONF_WHITE_ROOT_URL); RuleConfigPanel.saveConfigToDefaultJson(); break; case "addRootUrlToBlackUrlRoot": //1、修改配置文件 BurpExtender.CONF_BLACK_ROOT_URL = CastUtils.addUrlsRootUrlToList(urlList, BurpExtender.CONF_BLACK_ROOT_URL); RuleConfigPanel.saveConfigToDefaultJson(); //2、删除 Root URL 对应的 结果数据 java.util.List<String> rootUrlList = CastUtils.getRootUrlList(urlList); int count1 = CommonDeleteLine.deleteLineByUrlLikeRootUrls(ReqDataTable.tableName, rootUrlList); int count2 = CommonDeleteLine.deleteLineByUrlLikeRootUrls(AnalyseUrlResultTable.tableName, rootUrlList); stdout_println(LOG_DEBUG, String.format("deleteReqDataCount:%s , deleteAnalyseResultCount:%s", count1, count2)); //3、刷新表格 BasicUrlInfoPanel.getInstance().refreshBasicUrlTableModel(false); break; } return null; } }.execute(); } } }); } //创建功能按钮内容和对应事件 public static JPopupMenu createMoreMenuWithAction() { JPopupMenu moreMenu = new JPopupMenu("功能"); JMenuItem addRootUrlToAllowListen = new JMenuItem("添加到RootUrl白名单"); addRootUrlToAllowListen.setIcon(UiUtils.getImageIcon("/icon/addButtonIcon.png")); moreMenu.add(addRootUrlToAllowListen); JMenuItem addRootUrlToBlackUrlRoot = new JMenuItem("添加到RootUrl黑名单"); addRootUrlToBlackUrlRoot.setIcon(UiUtils.getImageIcon("/icon/addButtonIcon.png")); moreMenu.add(addRootUrlToBlackUrlRoot); JMenuItem addUrlToRecordPath = new JMenuItem("添加有效PATH到PathTree"); addUrlToRecordPath.setIcon(UiUtils.getImageIcon("/icon/addButtonIcon.png")); moreMenu.add(addUrlToRecordPath); JMenuItem addUrlToRecordUrl = new JMenuItem("添加已访问URL到访问记录"); addUrlToRecordUrl.setIcon(UiUtils.getImageIcon("/icon/addButtonIcon.png")); moreMenu.add(addUrlToRecordUrl); JMenuItem loadSitemapToRecordPath = new JMenuItem("加载SiteMap到Path记录"); loadSitemapToRecordPath.setIcon(UiUtils.getImageIcon("/icon/importItem.png")); moreMenu.add(loadSitemapToRecordPath); JMenuItem loadSitemapToRecordUrl = new JMenuItem("加载SiteMap到Url记录"); loadSitemapToRecordUrl.setIcon(UiUtils.getImageIcon("/icon/importItem.png")); moreMenu.add(loadSitemapToRecordUrl); JMenuItem clearUselessData = new JMenuItem("清除无用数据"); clearUselessData.setIcon(UiUtils.getImageIcon("/icon/deleteButton.png")); moreMenu.add(clearUselessData); JMenuItem clearModelTableData = new JMenuItem("清除表格数据表"); clearModelTableData.setIcon(UiUtils.getImageIcon("/icon/deleteButton.png")); moreMenu.add(clearModelTableData); JMenuItem clearRecordTableData = new JMenuItem("清除记录数据表"); clearRecordTableData.setIcon(UiUtils.getImageIcon("/icon/deleteButton.png")); moreMenu.add(clearRecordTableData); JMenuItem clearRecordUrlTableData = new JMenuItem("清除访问记录表"); clearRecordUrlTableData.setIcon(UiUtils.getImageIcon("/icon/deleteButton.png")); moreMenu.add(clearRecordUrlTableData); JMenuItem clearAllTableData = new JMenuItem("清空所有数据表"); clearAllTableData.setIcon(UiUtils.getImageIcon("/icon/deleteButton.png")); moreMenu.add(clearAllTableData); // 为 功能 菜单项 清除无用数据 添加 Action Listener clearUselessData.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清空表格模型中的无效数据 TableLineDataModelBasicUrlSQL.clearUrlTableLineAnyIsNull(); // TODO BasicUrlConfigPanel.setAutoRefreshOpenOnUrl(); // BasicHostConfigPanel.setAutoRefreshOpenOnHost(); } }); // 为 功能 菜单项 清除数据表数据 添加 Action Listener clearModelTableData.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清空表格模型中的所有行数据 UiUtils.clearModelData(false); // TODO BasicUrlConfigPanel.setAutoRefreshOpenOnUrl(); // BasicHostConfigPanel.setAutoRefreshOpenOnHost(); } }); // 为 功能 菜单项 清除所有表数据 添加 Action Listener clearAllTableData.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 清空表格模型中的所有行数据 UiUtils.clearModelData(true); // TODO BasicUrlConfigPanel.setAutoRefreshOpenOnUrl(); // BasicHostConfigPanel.setAutoRefreshOpenOnHost(); } }); // 清除记录URL PATH TREE 数据 clearRecordTableData.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DBService.clearRecordTables(); // TODO BasicUrlConfigPanel.setAutoRefreshOpenOnUrl(); } }); // 清除记录URL数据 clearRecordUrlTableData.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DBService.clearTable(RecordUrlTable.tableName); // TODO BasicUrlConfigPanel.setAutoRefreshOpenOnUrl(); // BasicHostConfigPanel.setAutoRefreshOpenOnHost(); } }); // 为 功能 菜单项 加载站点地图到PATH记录 添加 Action Listener loadSitemapToRecordPath.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { BurpSitemapUtils.addSiteMapUrlsToRecord(false); stdout_println(LOG_DEBUG, "Add SiteMap Urls To Record Path Table End."); return null; } }.execute(); } }); // 为 功能 菜单项 加载站点地图到URL记录 添加 Action Listener loadSitemapToRecordUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { BurpSitemapUtils.addSiteMapUrlsToRecord(true); stdout_println(LOG_DEBUG, "Add SiteMap Urls To Record Url Table End."); return null; } }.execute(); } }); // 为 功能 菜单项 输入有效URL列表到数据框 从而加入到PATH addUrlToRecordPath.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { UiUtils.creatTextDialogForAddRecord("添加有效PATH至PATH记录", "addUrlToRecordPath"); } }); // 为 功能 菜单项 输入URL列表到数据框 从而加入到 URL记录 addUrlToRecordUrl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { UiUtils.creatTextDialogForAddRecord("添加URL至已访问URL记录", "addUrlToRecordUrl"); } }); // 为 功能 菜单项 输入有效URL列表到数据框 从而加入到PATH addRootUrlToAllowListen.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { UiUtils.creatTextDialogForAddRecord("添加到RootUrl白名单", "addRootUrlToAllowListen"); } }); // 为 功能 菜单项 输入有效URL列表到数据框 从而加入到PATH addRootUrlToBlackUrlRoot.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { UiUtils.creatTextDialogForAddRecord("添加到RootUrl黑名单", "addRootUrlToBlackUrlRoot"); } }); return moreMenu; } /** * 清理所有数据 */ public static void clearModelData(boolean clearAllTable){ // 清空model BasicUrlInfoPanel.clearBasicUrlMsgTableModel(); BasicHostInfoPanel.clearBasicHostMsgTableModel(); //清空记录变量的内容 IProxyScanner.urlScanRecordMap = new RecordHashMap(); BasicUrlConfigPanel.lbRequestCountOnUrl.setText("0"); BasicUrlConfigPanel.lbTaskerCountOnUrl.setText("0"); BasicUrlConfigPanel.lbAnalysisEndCountOnUrl.setText("0/0"); BasicHostConfigPanel.lbRequestCountOnHost.setText("0"); BasicHostConfigPanel.lbTaskerCountOnHost.setText("0"); BasicHostConfigPanel.lbAnalysisEndCountOnHost.setText("0/0"); //置空 过滤数据 IProxyScanner.urlCompareMap.clear(); //清空数据库内容 if (clearAllTable) { DBService.clearAllTables(); } else { DBService.clearModelTables(); } // 清空检索框的内容 SwingUtilities.invokeLater(new Runnable() { public void run() { BasicUrlConfigPanel.setUrlSearchBoxTextOnUrl(""); BasicHostConfigPanel.setUrlSearchBoxTextOnHost(""); } }); // 还可以清空编辑器中的数据 BasicUrlInfoPanel.clearBasicUrlMsgTabsData(); BasicHostInfoPanel.clearBasicHostMsgTabsData(); } /** * 根据当前刷新开关状态配置定时器暂停或者重启 */ public static void setAutoRefreshUiByButton(boolean autoRefreshUiIsOpen) { if(autoRefreshUiIsOpen){ BasicHostInfoPanel.startTimerBasicHost(); BasicUrlInfoPanel.startTimerBasicUrl(); } else { BasicHostInfoPanel.stopTimerBasicHost(); BasicUrlInfoPanel.stopTimerBasicUrl(); } } } ================================================ FILE: src/main/resources/conf/finger-important.json ================================================ { "fingerprint": [ { "describe": "性能相关配置", "isImportant": false, "isOpen": true, "matchKeys": [ "maxPatterChunkSizeDefault=20000", "maxStoreRespBodyLenDefault=1200000", "monitorExecutorIntervalsDefault=4", "dynamicPathFilterIsOpenDefault=false", "autoRecordPathIsOpenDefault=true", "autoPathsToUrlsIsOpenDefault=true", "autoRecursiveIsOpenDefault=false", "proxyListenIsOpenDefault=false", "autoRefreshUnvisitedIsOpenDefault=false", "autoRefreshUiIsOpenDefault=false", "forceDecodeUnicodeDefault=true", "addApiToUnvisitedUrlsDefault=true" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_DEFAULT_PERFORMANCE" }, { "describe": "允许[监听扫描]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_WHITE_ROOT_URL" }, { "describe": "禁止[监听扫描|提取URL]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [ ".activity.windows.com", ".adblockplus.org", ".alibaba.com", ".alicdn.com", ".alipayobjects.com", ".aliyun.com", ".amap.com", ".asp.net", ".baidu.com", ".bilibili.com", ".bing.com", ".cdn-go.cn", ".cdn.mozilla.net", ".dftoutiao.com", ".eastday.com", ".feishu.cn", ".feishu.com", ".feishucdn.com", ".firefox.com.cn", ".firefoxchina.cn", ".fofa.info", ".geetest.com", ".githubusercontent.com", ".google.com", ".googleapis.com", ".googletagmanager.com", ".gstatic.com.com", ".gtimg.com", ".gvt1.com", ".jsdelivr.net", ".live.com", ".microsoft.com", ".mozilla.com", ".mozilla.net", ".mozilla.org", ".msftconnecttest.com", ".msn.cn", ".msn.com", ".netease.com", ".npmjs.org", ".office.com", ".officeapps.live.com", ".qcloud.com", ".qnic.com", ".scorecardresearch.com", ".shodan.io", ".telemetry.mozilla.org", ".vuejs.org", ".vulbox.com", ".w3.org", ".windowsupdate.com", ".qq.com", ".wx.qq.com", ".xp.cn", ".yahoo.com", "github.com", "google.com", "lodash.com", "npms.io" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_ROOT_URL" }, { "describe": "禁止进行[监听扫描|URL提取|PATH提取]的URI路径关键字", "isImportant": false, "isOpen": true, "matchKeys": [ "/jquery/", "/echarts/", "/amazeui/", "/animation/", "/zh-cn.js", ":/usr/" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_URI_PATH_KEYS" }, { "describe": "禁止[提取PATH]等于此项", "isImportant": false, "isOpen": true, "matchKeys": [ "/", "/?", "image/x-icon", "image/png", "image/jpg", "application/x-www-form-urlencoded", "multipart/form-data", "MM/DD/YYYY", "YYYY/MM/DD", "text/javascript", "text/xml", "text/html", "text/csv", "text/css", "text/plain", "application/json", "ecdsa/rsa", "/.*/", "/.+/" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_EXTRACT_PATH_EQUAL" }, { "describe": "禁止进行[监听扫描|URL提取|PATH提取]的URI文件扩展名", "isImportant": false, "isOpen": true, "matchKeys": [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "x", "y", "gif", "png", "jpg", "jpeg", "webp", "tif", "tiff", "bmp", "css", "woff", "woff2", "svg", "pdf", "docx", "doc", "xlsx", "xls", "pptx", "ppt", "ttf", "otf", "mp3", "wav", "aac", "ogg", "mp4", "avi", "mov", "wmv", "flv", "zip", "rar", "gz", "7z", "scss", "sass", "less", "eot", "swf", "vue" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_URI_EXT_EQUAL" }, { "describe": "禁止自动进行[有效PATH记录]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_AUTO_RECORD_PATH" }, { "describe": "禁止自动进行[未访问URL扫描]的RootUrl关键字", "isImportant": false, "isOpen": true, "matchKeys": [ "testphp.vulnweb.com" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_AUTO_RECURSE_SCAN" }, { "describe": "允许自动进行[有效PATH记录]的响应状态码", "isImportant": false, "isOpen": true, "matchKeys": [ "200", "403" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_WHITE_RECORD_PATH_STATUS" }, { "describe": "禁止自动进行[有效PATH记录]的响应标题", "isImportant": false, "isOpen": true, "matchKeys": [ "404 not Found" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_RECORD_PATH_TITLE" }, { "describe": "禁止[提取敏感信息]包含此项", "isImportant": false, "isOpen": true, "matchKeys": [ "admin@admin.com" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_EXTRACT_INFO_KEYS" }, { "describe": "提取响应URL|PATH的正则表达式", "isImportant": false, "isOpen": true, "matchKeys": [ "(?:\"|')(((?:[a-zA-Z]{1,10}://|//)[^\"'/]{1,}\\.[a-zA-Z]{2,}[^\"']{0,})|((?:/|\\.\\./|\\./)[^\"'><,;|*()(%%$^/\\\\\\[\\]][^\"'><,;|()]{1,})|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{1,}\\.(?:[a-zA-Z]{1,4}|action)(?:[\\?|#][^\"|']{0,}|))|([a-zA-Z0-9_\\-/]{1,}/[a-zA-Z0-9_\\-/]{3,}(?:[\\?|#][^\"|']{0,}|))|([a-zA-Z0-9_\\-]{1,}\\.(?:\\w)(?:[\\?|#][^\"|']{0,}|)))(?:\"|')", "(https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;\\u4E00-\\u9FFF]+[-A-Za-z0-9+&@#/%=~_|])" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_REGULAR_EXTRACT_URIS" }, { "describe": "禁止递归访问的URL路径关键字", "isImportant": false, "isOpen": true, "matchKeys": [ "logout", "cancel", "delete", "remove", "update" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_BLACK_RECURSE_REQ_PATH_KEYS" }, { "describe": "递归访问URL时的HTTP请求方法", "isImportant": false, "isOpen": true, "matchKeys": [ "GET", "POST" ], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_RECURSE_REQ_HTTP_METHODS" }, { "describe": "递归访问URL时的HTTP请求参数", "isImportant": false, "isOpen": true, "matchKeys": [], "accuracy": "config", "location": "config", "matchType": "config", "type": "CONF_RECURSE_REQ_HTTP_PARAMS" }, { "accuracy": "high", "describe": "AppSecret、AppID", "isImportant": true, "isOpen": true, "matchKeys": [ "AppSecret&&AppID", "AppSecret&&AppKey" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "Authorization Header", "isImportant": false, "isOpen": true, "matchKeys": [ "((basic [a-z0-9=:_\\+\\/-]{5,100})|(bearer [a-z0-9_.=:_\\+\\/-]{5,100}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "Chinese Mobile Number", "isImportant": false, "isOpen": true, "matchKeys": [ "[^\\w]((?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[189]))\\d{8})[^\\w]" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "Cloud Key", "isImportant": true, "isOpen": true, "matchKeys": [ "(((access)(|-|_)(key)(|-|_)(id|secret))|(LTAI[a-z0-9]{12,20}))" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Druid", "isImportant": true, "isOpen": true, "matchKeys": [ "(Druid Stat Index)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Email", "isImportant": false, "isOpen": true, "matchKeys": [ "(([a-z0-9]+[_|\\.])*[a-z0-9]+@([a-z0-9]+[-|_|\\.])*[a-z0-9]+\\.((?!js|css|jpg|jpeg|png|ico)[a-z]{2,5}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "FTP泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "ftpUsername&&ftpPassword", "FTP_USER&&FTP_ADDR&&FTP_PASS" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "GraphQL", "isImportant": true, "isOpen": true, "matchKeys": [ "/graphql", "/graphiql" ], "location": "path", "matchType": "any_keywords", "type": "敏感路径" }, { "accuracy": "high", "describe": "GraphQL API", "isImportant": true, "isOpen": true, "matchKeys": [ "/graphiql", "__graphiql", "/graphiql" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "Internal IP Address", "isImportant": false, "isOpen": true, "matchKeys": [ "[^0-9]((127\\.0\\.0\\.1)|(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(172\\.((1[6-9])|(2\\d)|(3[01]))\\.\\d{1,3}\\.\\d{1,3})|(192\\.168\\.\\d{1,3}\\.\\d{1,3}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "JDBC Connection", "isImportant": true, "isOpen": true, "matchKeys": [ "(jdbc:[a-z:]+://[a-z0-9\\.\\-_:;=/@?,&]+)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "JDBC泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "jdbc:(mysql|h2|oracle|sqlserver|jtds:sqlserver):" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "JDBC泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "System.Data.SqlClient", "Data.PassportContext", "mysql.username&&mysql.password&&mysql.url", "jdbc.username&&jdbc.password", "mssql.jdbc&&mssql.user", "com.microsoft.sqlserver.jdbc.SQLServerDriver" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "JSON Web Token", "isImportant": true, "isOpen": true, "matchKeys": [ "(eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9._-]{10,}|eyJ[A-Za-z0-9_\\/+-]{10,}\\.[A-Za-z0-9._\\/+-]{10,})" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Java Deserialization", "isImportant": false, "isOpen": true, "matchKeys": [ "(javax\\.faces\\.ViewState)" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "MAC Address", "isImportant": false, "isOpen": true, "matchKeys": [ "(^([a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5})|[^a-zA-Z0-9]([a-fA-F0-9]{2}(:[a-fA-F0-9]{2}){5}))" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "OpenAPI-Swagger", "isImportant": true, "isOpen": true, "matchKeys": [ "/swagger-resources", "/swagger/" ], "location": "path", "matchType": "any_keywords", "type": "敏感路径" }, { "accuracy": "high", "describe": "Password Field", "isImportant": true, "isOpen": true, "matchKeys": [ "((|'|\")(|[\\w]{1,10})([p](ass|wd|asswd|assword))(|[\\w]{1,10})(|'|\")(:|=)(|)('|\")(.*?)('|\")(|,))" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "SSH泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "ssh://" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "SpringbootActuator", "isImportant": true, "isOpen": true, "matchKeys": [ "/mappings", "/actuator" ], "location": "path", "matchType": "any_keywords", "type": "敏感路径" }, { "accuracy": "high", "describe": "Swagger UI", "isImportant": true, "isOpen": true, "matchKeys": [ "((swagger-ui.html)|(\\\"swagger\\\":)|(Swagger UI)|(swaggerUi)|(swaggerVersion))" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Ueditor", "isImportant": true, "isOpen": true, "matchKeys": [ "(ueditor\\.(config|all)\\.js)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "Upload Form", "isImportant": false, "isOpen": true, "matchKeys": [ "(type\\=\\\"file\\\")" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "Windows File/Dir Path", "isImportant": true, "isOpen": true, "matchKeys": [ "'[^\\w](([a-zA-Z]:\\\\(?:\\w+\\\\?)*)|([a-zA-Z]:\\\\(?:\\w+\\\\)*\\w+\\.\\w+))'" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "shiro", "isImportant": true, "isOpen": true, "matchKeys": [ "(=deleteMe|rememberMe=)" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "云KEY", "isImportant": true, "isOpen": true, "matchKeys": [ "ALI_ACCESS_ID&&ALI_ACCESS_KEY", "ACCESSID&&ACCESSKEY", "AccessKey ID&&AccessKey Secret", "accessKeyId&&accessKeySecret", "ACCESS_ID&&ACCESS_KEY", "SSOusername&&SSOpassword", "oss://", "UC_DBHOST&&UC_DBUSER&&UC_KEY&&UC_API", "access_key_id&&secret_access_key", "accessKeyId&&accessSecret", "\"accessKeyId\"", "accessKeyId&&secretAccessKey" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "企业微信Corpid、Corpsecret", "isImportant": true, "isOpen": true, "matchKeys": [ "Corpid&&Corpsecret" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "修改密码", "isImportant": true, "isOpen": true, "matchKeys": [ "username&&userName", "actionid", "newPws&&newpassword" ], "location": "body", "matchType": "all_keywords", "type": "敏感内容" }, { "accuracy": "medium", "describe": "初始密码", "isImportant": true, "isOpen": true, "matchKeys": [ "(initPassword\\s*[:=]\\s*\"?|\"initPassword\"\\s*:\\s*\"?|\"初始密码\"\\s*:\\s*\"?)[\"]?[^\"\\s]+[\"]?|\\b初始密码是\\s+[^\"\\s]+" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "手机, 用户名", "isImportant": true, "isOpen": true, "matchKeys": [ "personName&&phoneNo&&deptName", "tel&&account&&userName&&mailAccount&&Content-Type: application/json", "email&&phone&&pwd&&id&&name&&Content-Type: application/json", "msg&&mobile\"&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "管理员账号、管理员密码", "isImportant": true, "isOpen": true, "matchKeys": [ "管理员密码&&管理员账号", "'admin_pwd'&&'admin_user'", "<pwd>&&<admin_user>", "\"admin_pwd\"&&\"admin_user\"" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "缺少参数", "isImportant": false, "isOpen": true, "matchKeys": [ "\".*Required .{1,18} parameter.*\"" ], "location": "body", "matchType": "any_regular", "type": "提示信息" }, { "accuracy": "high", "describe": "缺少参数", "isImportant": false, "isOpen": true, "matchKeys": [ "Content-Type: application/json&&is not present", "Content-Type: application/json&&缺少参数", "Content-Type: application/json&&参数缺少" ], "location": "body", "matchType": "any_keywords", "type": "提示信息" }, { "accuracy": "high", "describe": "账号", "isImportant": true, "isOpen": true, "matchKeys": [ "description&&name\"&&message\"&&Type\"&&Content-Type: application/json", "person&&mobilPhone&&id&&status" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "账号, 密码", "isImportant": false, "isOpen": true, "matchKeys": [ "password&&name&&userid&&Content-Type: application/json", "user=='&&password=='", "userName =>&&password =>&&info", "secret_key&&address", "secret_key&&api_key", "password:&&HOST:&&NAME:", "server&&pwd&&database&&user", "Authentication failed&&user&&__construct", "VPN服务器地址&&用户名&&密码", "username&&password&&jdbc:", "String username&&String password&&=", "jdbc.url&&://&&username&&password", "pass&&email&&user&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "账号, 身份证", "isImportant": true, "isOpen": true, "matchKeys": [ "身份证号码&&姓名&&公司&&Content-Type: application/json", "gmsfhm&&Content-Type: application/json", "cjrsfzh&&Content-Type: application/json", "sfzhm&&total&&rows", "keyHash&&idCard&&partment", "Idcard&&Name&&id&&status&&address", "name&&sfzh&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "账号, 邮箱, 收集", "isImportant": true, "isOpen": true, "matchKeys": [ "name&&realName&&email&&phone&&Content-Type: application/json" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "身份证", "isImportant": true, "isOpen": true, "matchKeys": [ "(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65|71|81|82)\\\\d{4}(19|20)\\\\d{2}((0[1-9])|(1[0-2]))((0[1-9])|([12]\\\\d)|(3[01]))\\\\d{3}([0-9Xx])" ], "location": "body", "matchType": "any_regular", "type": "敏感内容" }, { "accuracy": "high", "describe": "邮箱凭证泄漏", "isImportant": true, "isOpen": true, "matchKeys": [ "EMAIL_HOST_USER&&EMAIL_HOST_PASSWORD", "mail.username&&mail.password", "sender.username&&sender.password", "mailUserPwd&&mailUserName", "mail_user&&mail_pass", "EMAIL_PSWD&&EMAIL_USER", "EMAIL_LOGIN_NAME&&EMAIL_LOGIN_PASSWD", "email_username&&email_password", "smtp_username&&smtp_password", "mailuser&&mailPassword", "mailServerUsername&&mailServerPassword", "WebMail.UserName&&WebMail.Password" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "high", "describe": "飞书App_Id、App_Secret", "isImportant": true, "isOpen": true, "matchKeys": [ "App_Id&&App_Secret" ], "location": "body", "matchType": "any_keywords", "type": "敏感内容" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/images/tongda.ico" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "<title>Office Anywhere", "网络智能办公系统" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "tongda2000.com", "官网" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "通达OA", "login" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "-187813927" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "通达OA", "isImportant": true, "isOpen": true, "matchKeys": [ "-759108386" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1578525679" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/wui/common/page/sysRemind.jsp" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微OA", "isImportant": true, "isOpen": true, "matchKeys": [ "ecology_JSessionid" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微云桥 e-Bridge", "isImportant": true, "isOpen": true, "matchKeys": [ "wx.weaver", "e-Bridge" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微e-mobile", "isImportant": true, "isOpen": true, "matchKeys": [ "移动管理平台-企业管理" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "泛微emp-移动管理平台", "isImportant": true, "isOpen": true, "matchKeys": [ "2062026853" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "sys/ui/extend/theme/default/style/icon.css", "sys/ui/extend/theme/default/style/profile.css" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "蓝凌软件", "App_Themes/Login" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "login_single_horizontal" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "login_single_full_screen" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "蓝凌EIS智慧协同平台", "isImportant": true, "isOpen": true, "matchKeys": [ "/scripts/jquery.landray.common.js", "蓝凌软件" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/seeyon/USER-DATA/IMAGES/LOGIN/login.gif" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/seeyon/common/" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA", "isImportant": true, "isOpen": true, "matchKeys": [ "165601673" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA M3 Server", "isImportant": true, "isOpen": true, "matchKeys": [ "M3 Server" ], "location": "title", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远OA M1 Server", "isImportant": true, "isOpen": true, "matchKeys": [ "M1-Server" ], "location": "title", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "致远 Analytics Cloud 分析云", "isImportant": false, "isOpen": true, "matchKeys": [ "410106848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "万户 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "defaultroot", "Logon!logon.action", "domainAccount" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "万户 OA", "isImportant": true, "isOpen": true, "matchKeys": [ "/defaultroot/public/edit/logindownload/Logindownload.jsp" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "万户ezOFFICE", "isImportant": true, "isOpen": true, "matchKeys": [ "-1827521324" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "万户网络ezEIP", "isImportant": true, "isOpen": true, "matchKeys": [ "Powered By wanhu - www.wanhu.com.cn", "ezEip" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "华天动力OA", "isImportant": true, "isOpen": true, "matchKeys": [ "OAapp/WebObjects/OAapp.woa", "/htoa/js/jquery.js" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友软件", "isImportant": false, "isOpen": true, "matchKeys": [ "UFIDA Software CO.LTD all rights reserved" ], "location": "body", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "用友NC", "isImportant": true, "isOpen": true, "matchKeys": [ "logo/images/ufida_nc.png", "用友NC" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友 NC Cloud", "isImportant": true, "isOpen": true, "matchKeys": [ "platform/pub/welcome.do" ], "location": "body", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友GRP-U8 新政府会计制度专版", "isImportant": true, "isOpen": true, "matchKeys": [ "-299520369" ], "location": "icon_hash", "matchType": "any_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友U8", "isImportant": true, "isOpen": true, "matchKeys": [ "U8远程接入官方网站", "用友" ], "location": "body", "matchType": "all_keywords", "type": "OA类" }, { "accuracy": "lower", "describe": "用友-畅捷通OEM", "isImportant": false, "isOpen": true, "matchKeys": [ "GNRemote.dll", "Web_sc/login.gn" ], "location": "body", "matchType": "all_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "用友BIP 数据应用服务", "isImportant": false, "isOpen": true, "matchKeys": [ "1183274548" ], "location": "icon_hash", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "奇安信自动化渗透测试系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-747580443" ], "location": "icon_hash", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "奇安信VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "奇安信VPN" ], "location": "title", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "天融信产品", "isImportant": true, "isOpen": true, "matchKeys": [ "<TITLE>Web User Login", "loginCheck" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "topsecsvportalstyle" ], "location": "header", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "天融信VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "vone/pub/image/logo1.png" ], "location": "header", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "天融信WEB应用安全防护系统", "isImportant": true, "isOpen": true, "matchKeys": [ "module=login", "topsec", "login" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信 Reporter", "isImportant": true, "isOpen": true, "matchKeys": [ "Login @ Reporter", "topsec", "login" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信防火墙", "isImportant": true, "isOpen": true, "matchKeys": [ "TOPSEC", "image/aaa.png", "username" ], "location": "body", "matchType": "all_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信TopAPP负载均衡系统", "isImportant": true, "isOpen": true, "matchKeys": [ "TopAPP负载均衡系统", "天融信" ], "location": "body", "matchType": "all_keywords", "type": "负载均衡" }, { "accuracy": "lower", "describe": "天融信-上网行为管理系统", "isImportant": true, "isOpen": true, "matchKeys": [ "images/logo3.gif", "dkey_activex_download.php", "login_commit.php" ], "location": "body", "matchType": "all_keywords", "type": "上网行为管理类" }, { "accuracy": "lower", "describe": "天融信设备", "isImportant": true, "isOpen": true, "matchKeys": [ "-2019013898" ], "location": "icon_hash", "matchType": "any_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "天融信应用交付系统", "isImportant": true, "isOpen": true, "matchKeys": [ "TopApp-AD" ], "location": "body", "matchType": "any_keywords", "type": "安全设备类" }, { "accuracy": "lower", "describe": "ARRAY VPN", "isImportant": true, "isOpen": true, "matchKeys": [ "/prx/000/http/localh/oauth_auth" ], "location": "body", "matchType": "any_keywords", "type": "VPN类" }, { "accuracy": "lower", "describe": "siteserver", "isImportant": true, "isOpen": true, "matchKeys": [ "/sitefiles/assets/components/", "siteid" ], "location": "body", "matchType": "all_keywords", "type": "官网类" }, { "accuracy": "lower", "describe": "siteserver", "isImportant": true, "isOpen": true, "matchKeys": [ "sitefiles", "siteid" ], "location": "body", "matchType": "all_keywords", "type": "官网类" }, { "accuracy": "lower", "describe": "拓尔思", "isImportant": true, "isOpen": true, "matchKeys": [ "/was5/web/", "trs" ], "location": "body", "matchType": "all_keywords", "type": "官网类" }, { "accuracy": "lower", "describe": "契约锁", "isImportant": true, "isOpen": true, "matchKeys": [ "qyswebapp" ], "location": "body", "matchType": "any_keywords", "type": "合同类" }, { "accuracy": "lower", "describe": "明源云ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "-626335361" ], "location": "icon_hash", "matchType": "any_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "明源云ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "明源云ERP" ], "location": "title", "matchType": "any_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "明源云 ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "PubPlatform", "明源云", "LoginHandler" ], "location": "body", "matchType": "all_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "明源云 ERP", "isImportant": true, "isOpen": true, "matchKeys": [ "#153290", "明源软件" ], "location": "body", "matchType": "all_keywords", "type": "ERP系统" }, { "accuracy": "lower", "describe": "CoreMail", "isImportant": true, "isOpen": true, "matchKeys": [ "coremail/common" ], "location": "body", "matchType": "any_keywords", "type": "邮件类" }, { "accuracy": "lower", "describe": "宏景eHR人力资源信息管理系统", "isImportant": true, "isOpen": true, "matchKeys": [ "人力资源信息管理系统", "hrlogon" ], "location": "body", "matchType": "all_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "JeecgBoot", "isImportant": true, "isOpen": true, "matchKeys": [ "fileview.jeecg.com/onlinePreview" ], "location": "body", "matchType": "any_keywords", "type": "CMS" }, { "accuracy": "lower", "describe": "亿赛通(DLP)", "isImportant": true, "isOpen": true, "matchKeys": [ "CDGServer3", "welcomebg.jpg" ], "location": "body", "matchType": "all_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "亿赛通-电子文档安全管理系统", "isImportant": true, "isOpen": true, "matchKeys": [ "/CDGServer3/SysConfig.jsp" ], "location": "body", "matchType": "any_keywords", "type": "其他" }, { "accuracy": "lower", "describe": "通用企业管理软件", "isImportant": false, "isOpen": true, "matchKeys": [ "/cwbase/web/Login.aspx" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iDS联网数字标牌管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "iDS联网数字标牌管理系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "Nexus Repository Manager" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网动统一通信平台(Active UC)", "isImportant": false, "isOpen": true, "matchKeys": [ "网动统一通信平台(Active UC)" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道 zentao", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to use zentao" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "快云服务器小助手", "isImportant": false, "isOpen": true, "matchKeys": [ "快云服务器助手" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道 zentao", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to zentao" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "富通天下外贸ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "用户登录_富通天下外贸ERP" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海翔D8药业云平台", "isImportant": false, "isOpen": true, "matchKeys": [ "登录海翔" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "Kibana" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "永中在线编辑软件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "Web Office", "img/eio.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "南方数码交易一体化系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/SouthUIContent/themes/easydropdown.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "朗新天霁人力资源管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "hrsoft.com.cn", "chkLogindiv", "CustStyle" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科荣 AIO 运营管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "style1/css/ListRange.css", "主账套", "login.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "联达动力医院综合办公管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "login.aspx?Method=AJAX&UserName=", "Login_Return_XML.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中农信达三资云平台", "isImportant": false, "isOpen": true, "matchKeys": [ "技术支持:北京中农信达信息技术有限公司" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "电子申请客户端管理系统(EAC)", "isImportant": false, "isOpen": true, "matchKeys": [ "script/css/gwssi.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "青纺联物联查询平台", "isImportant": false, "isOpen": true, "matchKeys": [ "青纺联物联查询平台", "Themes/default/login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "致梦科技-管家婆物联通", "isImportant": false, "isOpen": true, "matchKeys": [ "HtmlPages/Vue/vue.js", "GetLoginValidate" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "广联达 Glodon", "isImportant": false, "isOpen": true, "matchKeys": [ "/ConsoleCommon/Content/weebox.css", "广联达" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "任我行 CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "/Handlers/IdentifyingCode.ashx" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "广联达 广讯通", "isImportant": false, "isOpen": true, "matchKeys": [ "gtp.standard", "JS/gxtAutoLogin.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "智能表综合管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "js/jsCore.js", "Ajax_Code/Login.ashx", "login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科德电子智慧水务平台", "isImportant": false, "isOpen": true, "matchKeys": [ "山东科德电子有限公司", "J_LoginSub" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "秦川燃气综合管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "系统登录", "res/icon/key.png", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "东胜物流软件", "isImportant": false, "isOpen": true, "matchKeys": [ "js/dhtmlxcombo_whp.js", "login.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "九思 OA 协同办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/jsoa/login.jsp" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "润申信息企业标准化管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "润申信息", "企业标准化管理系统", "loginForm" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "银达汇智智慧综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "福州银达云创信息科技有限公司", "miniui/crypto/CodeManage.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "同鑫T9eHR信息化管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "T9eHR-iconfont", "Authentication/Login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NortekControlLineareMerge", "isImportant": false, "isOpen": true, "matchKeys": [ "img/emerge.ico", "login_pw" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "顶讯科技-易宝OA系统", "isImportant": false, "isOpen": true, "matchKeys": [ "欢迎登录易宝OA系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "惠商+管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "惠商+管理系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "红帆-ioffice OA", "isImportant": false, "isOpen": true, "matchKeys": [ "iOffice.net" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "管家婆全渠道业务同步中心", "isImportant": false, "isOpen": true, "matchKeys": [ "管家婆全渠道业务同步中心" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spring env", "isImportant": false, "isOpen": true, "matchKeys": [ "servletContextInitParams" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "微三云管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "WSY_logo", "管理系统 MANAGEMENT SYSTEM" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "日志易", "isImportant": false, "isOpen": true, "matchKeys": [ "auth/passwordReset", "yw-login-", "yw-login-logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "思迪数据池管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "Ajax/Login", "思迪", "canvas" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科迈 RAS", "isImportant": false, "isOpen": true, "matchKeys": [ "科迈RAS", "CmxGoUrl.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spring env", "isImportant": false, "isOpen": true, "matchKeys": [ "logback" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Error 404--Not Found" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Error 403--" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "/console/framework/skins/wlsconsole/images/login_WebLogic_branding.png" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TWCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "href=\"/twcms/theme/default/css/global.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to Weblogic Application Server" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Weblogic", "isImportant": false, "isOpen": true, "matchKeys": [ "<i>Hypertext Transfer Protocol -- HTTP/1.1</i>" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/por/login_psw.csp" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "loginPageSP/loginPrivacy.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "e-mobile", "isImportant": false, "isOpen": true, "matchKeys": [ "weaver,e-mobile" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ecology", "isImportant": false, "isOpen": true, "matchKeys": [ "ecology_JSessionid" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PbootCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "PbootSystem" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启明某VPN设备", "isImportant": false, "isOpen": true, "matchKeys": [ "cover_admin.css", "SSLVPN LOGIN" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天玥运维安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "css/fw/full.css", "js/p/login.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TP-LINK 产品", "isImportant": false, "isOpen": true, "matchKeys": [ "TP-LINK" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Influxdb", "isImportant": false, "isOpen": true, "matchKeys": [ "X-Influxdb" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "微宏 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "wh/servlet/MainServer" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "rememberMe=" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dreamer CMS-Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "dreamer-" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dreamer CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "-748565678" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧星自来水营业管理信息系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1704826498" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bonobo Git Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-219625874" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "晶奇科技救助管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1185226132" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "流量通 流量平台", "isImportant": false, "isOpen": true, "matchKeys": [ "325583172" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "北京朗新天霁人力资源系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1143915194" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "护卫神·主机大师", "isImportant": false, "isOpen": true, "matchKeys": [ "1188645141" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "友加畅捷U+财会通", "isImportant": false, "isOpen": true, "matchKeys": [ "2049187099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "信锐物联平台", "isImportant": false, "isOpen": true, "matchKeys": [ "147973611" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WiseGrid慧敏应用交付网关", "isImportant": false, "isOpen": true, "matchKeys": [ "910523681" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dreamer CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "dreamer-cms" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shiro", "isImportant": false, "isOpen": true, "matchKeys": [ "=deleteMe" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "重庆佰鼎-佰鼎OA", "isImportant": false, "isOpen": true, "matchKeys": [ "default.aspx", "Style/Style.css", "Skin2017", "TxtUserPwd" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PbootCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "PbootCMS" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Swagger UI", "isImportant": false, "isOpen": true, "matchKeys": [ "Swagger UI" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ruijie", "isImportant": false, "isOpen": true, "matchKeys": [ "4008 111 000" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei SMC", "isImportant": false, "isOpen": true, "matchKeys": [ "Script/SmcScript.js?version=" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C Router", "isImportant": false, "isOpen": true, "matchKeys": [ "/wnm/ssl/web/frame/login.html" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "/+CSCOE+/logon.html" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服 waf", "isImportant": false, "isOpen": true, "matchKeys": [ "rsa.js", "commonFunction.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服防火墙数据中心", "isImportant": false, "isOpen": true, "matchKeys": [ "Redirect to...", "/LogInOut.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服一体化网关 MIG", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/login.cgi", "/html/wz_tooltip.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网御 vpn", "isImportant": false, "isOpen": true, "matchKeys": [ "/vpn/common/js/leadsec.js", "/vpn/user/common/custom/auth_home.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Typecho", "isImportant": false, "isOpen": true, "matchKeys": [ "typecho", "usr/themes" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "401 登陆认证", "isImportant": false, "isOpen": true, "matchKeys": [ "401 Authorization" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "唯德科创 IPEasy 知易通", "isImportant": false, "isOpen": true, "matchKeys": [ "_IPEasy知易通" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Airflow", "isImportant": false, "isOpen": true, "matchKeys": [ "Airflow - Login" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启明星辰天清汉马USG防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "/cgi-bin/webui?op=get_product_model" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "飞鱼星上网行为管理", "isImportant": false, "isOpen": true, "matchKeys": [ "css/R1Login.css", "share.ti_username", "login_logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服上网行为管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "utccjfaewjb = function(str, key)" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服上网行为管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "document.write(WRFWWCSFBXMIGKRKHXFJ" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服应用交付报表系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/reportCenter/index.php?cls_mode=cluster_mode_others" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "群晖 NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "Synology", "webman/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金蝶云星空", "isImportant": false, "isOpen": true, "matchKeys": [ "HTML5/content/themes/kdcss.min.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金蝶云星空", "isImportant": false, "isOpen": true, "matchKeys": [ "/ClientBin/Kingdee.BOS.XPF.App.xap" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启明星辰天清汉马USG防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "天清汉马USG" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jboss", "isImportant": false, "isOpen": true, "matchKeys": [ "jboss.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "assets/gitlab_logo" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "入口校验失败" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "没有找到站点", "可能原因", "CDN产品", "Web服务", "检查端口是否正确" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>恭喜,站点创建成功", "面板系统后台", "系统自动生成" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DouPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by DouPHP", "DouPHP", "theme" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "扫码登录更安全", "bt.cn", "/login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "站点创建成功", "bt.cn" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "站点创建成功", "宝塔" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "-386189083" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道", "isImportant": false, "isOpen": true, "matchKeys": [ "self.location", "Lw==" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道", "isImportant": false, "isOpen": true, "matchKeys": [ "/theme/default/images/main/zt-logo.png" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禅道", "isImportant": false, "isOpen": true, "matchKeys": [ "zentaosid" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "YONYOU NC", "isImportant": false, "isOpen": true, "matchKeys": [ "uclient.yonyou.com", "UClient" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宝塔-BT.cn", "isImportant": false, "isOpen": true, "matchKeys": [ "宝塔Linux面板" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>RabbitMQ Management" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zabbix", "isImportant": false, "isOpen": true, "matchKeys": [ "zabbix", "Zabbix SIA" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "联软准入", "isImportant": false, "isOpen": true, "matchKeys": [ "网络准入", "leagsoft", "redirect" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "列目录", "isImportant": false, "isOpen": true, "matchKeys": [ "Index of /" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "列目录", "isImportant": false, "isOpen": true, "matchKeys": [ " - /" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "浪潮服务器IPMI管理口", "isImportant": false, "isOpen": true, "matchKeys": [ "img/inspur_logo.png", "Management System" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RegentApi_v2.0", "isImportant": false, "isOpen": true, "matchKeys": [ "RegentApi_v2.0" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tomcat默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "/manager/status", "/manager/html" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "slack-instance", "isImportant": false, "isOpen": true, "matchKeys": [ "99395752" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "spring-boot", "isImportant": false, "isOpen": true, "matchKeys": [ "116323821" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jenkins", "isImportant": false, "isOpen": true, "matchKeys": [ "81586312" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cnservers LLC", "isImportant": false, "isOpen": true, "matchKeys": [ "-235701012" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "743365239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Chainpoint", "isImportant": false, "isOpen": true, "matchKeys": [ "2128230701" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LaCie", "isImportant": false, "isOpen": true, "matchKeys": [ "-1277814690" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parse", "isImportant": false, "isOpen": true, "matchKeys": [ "246145559" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "628535358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "855273746" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Avigilon", "isImportant": false, "isOpen": true, "matchKeys": [ "1318124267" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – Confluence", "isImportant": false, "isOpen": true, "matchKeys": [ "-305179312" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "786533217" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Pi Star", "isImportant": false, "isOpen": true, "matchKeys": [ "432733105" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian", "isImportant": false, "isOpen": true, "matchKeys": [ "705143395" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Angular IO (AngularJS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1255347784" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "XAMPP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1275226814" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "React", "isImportant": false, "isOpen": true, "matchKeys": [ "-2009722838" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "981867722" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "-923088984" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Aplikasi", "isImportant": false, "isOpen": true, "matchKeys": [ "494866796" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti Aircube", "isImportant": false, "isOpen": true, "matchKeys": [ "1249285083" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – Bamboo", "isImportant": false, "isOpen": true, "matchKeys": [ "-1379982221" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Exostar – Managed Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "420473080" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – Confluence", "isImportant": false, "isOpen": true, "matchKeys": [ "-1642532491" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco Meraki", "isImportant": false, "isOpen": true, "matchKeys": [ "163842882" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Archivematica", "isImportant": false, "isOpen": true, "matchKeys": [ "-1378182799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TCN", "isImportant": false, "isOpen": true, "matchKeys": [ "-702384832" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CX", "isImportant": false, "isOpen": true, "matchKeys": [ "-532394952" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ace", "isImportant": false, "isOpen": true, "matchKeys": [ "-183163807" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "552727997" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NetData", "isImportant": false, "isOpen": true, "matchKeys": [ "1302486561" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenGeo Suite", "isImportant": false, "isOpen": true, "matchKeys": [ "-609520537" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dgraph Ratel", "isImportant": false, "isOpen": true, "matchKeys": [ "-1961046099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Atlassian – JIRA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1581907337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Material Dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "1913538826" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Form.io", "isImportant": false, "isOpen": true, "matchKeys": [ "1319699698" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kubeflow", "isImportant": false, "isOpen": true, "matchKeys": [ "-1203021870" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "netdata dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "-182423204" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CapRover", "isImportant": false, "isOpen": true, "matchKeys": [ "988422585" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WiJungle", "isImportant": false, "isOpen": true, "matchKeys": [ "2113497004" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Onera", "isImportant": false, "isOpen": true, "matchKeys": [ "1234311970" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SmartPing", "isImportant": false, "isOpen": true, "matchKeys": [ "430582574" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenStack", "isImportant": false, "isOpen": true, "matchKeys": [ "1232596212" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "netdata dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "1585145626" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FRITZ!Box", "isImportant": false, "isOpen": true, "matchKeys": [ "-219752612" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "fortinet-forticlient", "isImportant": false, "isOpen": true, "matchKeys": [ "945408572" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti – AirOS", "isImportant": false, "isOpen": true, "matchKeys": [ "-697231354" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Fortinet – Forticlient", "isImportant": false, "isOpen": true, "matchKeys": [ "945408572" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Outlook Web Application", "isImportant": false, "isOpen": true, "matchKeys": [ "1768726119" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei – Claro", "isImportant": false, "isOpen": true, "matchKeys": [ "2109473187" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ASUS AiCloud", "isImportant": false, "isOpen": true, "matchKeys": [ "552592949" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SonicWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "631108382" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Google", "isImportant": false, "isOpen": true, "matchKeys": [ "708578229" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-134375033" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua Storm (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "2019488876" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei – ADSL/Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-1395400951" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sophos Cyberoam (appliance)", "isImportant": false, "isOpen": true, "matchKeys": [ "1601194732" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LANCOM Systems", "isImportant": false, "isOpen": true, "matchKeys": [ "-325082670" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-1050786453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TilginAB (HomeGateway)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1346447358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Supermicro Intelligent Management (IPMI)", "isImportant": false, "isOpen": true, "matchKeys": [ "1410610129" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zyxel ZyWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "-440644339" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dell SonicWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "363324987" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti Login Portals", "isImportant": false, "isOpen": true, "matchKeys": [ "-1446794564" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sophos User Portal/VPN Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "1045696447" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Tomcat", "isImportant": false, "isOpen": true, "matchKeys": [ "-297069493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "396533629" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cyberoam", "isImportant": false, "isOpen": true, "matchKeys": [ "1462981117" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor", "isImportant": false, "isOpen": true, "matchKeys": [ "1594377337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vodafone (Technicolor)", "isImportant": false, "isOpen": true, "matchKeys": [ "165976831" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "UBNT Router UI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1677255344" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras Wireless", "isImportant": false, "isOpen": true, "matchKeys": [ "-359621743" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Connect (Webmail)", "isImportant": false, "isOpen": true, "matchKeys": [ "-677167908" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "BIG-IP", "isImportant": false, "isOpen": true, "matchKeys": [ "878647854" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microsoft OWA", "isImportant": false, "isOpen": true, "matchKeys": [ "442749392" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "pfSense", "isImportant": false, "isOpen": true, "matchKeys": [ "1405460984" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iKuai Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-271448102" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "31972968" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "3CX Phone System", "isImportant": false, "isOpen": true, "matchKeys": [ "970132176" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bluehost", "isImportant": false, "isOpen": true, "matchKeys": [ "-1119613926" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor", "isImportant": false, "isOpen": true, "matchKeys": [ "123821839" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZTE Corporation (Gateway/Appliance)", "isImportant": false, "isOpen": true, "matchKeys": [ "459900502" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ruckus Wireless", "isImportant": false, "isOpen": true, "matchKeys": [ "-2069844696" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bitnami", "isImportant": false, "isOpen": true, "matchKeys": [ "-1607644090" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Juniper Device Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "2141724739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "1835479497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "1278323681" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NETASQ - Secure / Stormshield", "isImportant": false, "isOpen": true, "matchKeys": [ "-1929912510" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "-1255992602" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "1895360511" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "-991123252" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vmware Secure File Transfer", "isImportant": false, "isOpen": true, "matchKeys": [ "1642701741" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SAP Netweaver", "isImportant": false, "isOpen": true, "matchKeys": [ "-266008933" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SAP ID Service: Log On", "isImportant": false, "isOpen": true, "matchKeys": [ "-1967743928" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SAP Conversational AI", "isImportant": false, "isOpen": true, "matchKeys": [ "1347937389" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Palo Alto Login Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "602431586" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Palo Alto Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-318947884" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Outlook Web Application", "isImportant": false, "isOpen": true, "matchKeys": [ "1356662359" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "1453890729" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Docker", "isImportant": false, "isOpen": true, "matchKeys": [ "-1814887000" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Docker", "isImportant": false, "isOpen": true, "matchKeys": [ "1937209448" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Amazon", "isImportant": false, "isOpen": true, "matchKeys": [ "-1544605732" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Amazon", "isImportant": false, "isOpen": true, "matchKeys": [ "716989053" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpMyAdmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-1010568750" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zhejiang Uniview Technologies Co.", "isImportant": false, "isOpen": true, "matchKeys": [ "-1240222446" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ISP Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-986678507" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AXIS (network cameras)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1616143106" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Roundcube Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-976235259" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "UniFi Video Controller (airVision)", "isImportant": false, "isOpen": true, "matchKeys": [ "768816037" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "pfSense", "isImportant": false, "isOpen": true, "matchKeys": [ "1015545776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Freebox OS", "isImportant": false, "isOpen": true, "matchKeys": [ "1838417872" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Keenetic", "isImportant": false, "isOpen": true, "matchKeys": [ "547282364" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sierra Wireless Ace Manager (Airlink)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1571472432" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Synology DiskStation", "isImportant": false, "isOpen": true, "matchKeys": [ "149371702" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "INSTAR IP Cameras", "isImportant": false, "isOpen": true, "matchKeys": [ "-1169314298" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-1038557304" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Octoprint (3D printer)", "isImportant": false, "isOpen": true, "matchKeys": [ "1307375944" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "1280907310" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vesta Hosting Control Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "1954835352" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Farming Simulator Dedicated Server", "isImportant": false, "isOpen": true, "matchKeys": [ "509789953" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Residential Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "-1933493443" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1993518473" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Arris", "isImportant": false, "isOpen": true, "matchKeys": [ "-1477563858" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PLEX Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-895890586" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "-1354933624" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Deluge", "isImportant": false, "isOpen": true, "matchKeys": [ "944969688" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "479413330" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cambium Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-435817905" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-981606721" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua Storm (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "833190513" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-652508439" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Fireware Watchguard", "isImportant": false, "isOpen": true, "matchKeys": [ "-569941107" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shock&Innovation!! netis setup", "isImportant": false, "isOpen": true, "matchKeys": [ "1326164945" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cacaoweb", "isImportant": false, "isOpen": true, "matchKeys": [ "-1738184811" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Loxone (Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "904434662" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HP Printer / Server", "isImportant": false, "isOpen": true, "matchKeys": [ "905744673" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netflix", "isImportant": false, "isOpen": true, "matchKeys": [ "902521196" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Linksys Smart Wi-Fi", "isImportant": false, "isOpen": true, "matchKeys": [ "-2063036701" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "lwIP (A Lightweight TCP/IP stack)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1205024243" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hitron Technologies", "isImportant": false, "isOpen": true, "matchKeys": [ "607846949" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua Storm (DVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "1281253102" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MOBOTIX Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "661332347" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Blue Iris (Webcam)", "isImportant": false, "isOpen": true, "matchKeys": [ "-520888198" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vigor Router", "isImportant": false, "isOpen": true, "matchKeys": [ "104189364" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Alibaba Cloud (Block Page)", "isImportant": false, "isOpen": true, "matchKeys": [ "1227052603" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DD WRT (DD-WRT milli_httpd)", "isImportant": false, "isOpen": true, "matchKeys": [ "252728887" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mitel Networks (MiCollab End User Portal)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1922044295" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "1221759509" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Router", "isImportant": false, "isOpen": true, "matchKeys": [ "1037387972" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PRTG Network Monitor", "isImportant": false, "isOpen": true, "matchKeys": [ "-655683626" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Elastic (Database)", "isImportant": false, "isOpen": true, "matchKeys": [ "1611729805" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dlink Webcam", "isImportant": false, "isOpen": true, "matchKeys": [ "1144925962" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Wildfly", "isImportant": false, "isOpen": true, "matchKeys": [ "-1666561833" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco Meraki Dashboard", "isImportant": false, "isOpen": true, "matchKeys": [ "804949239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Workday", "isImportant": false, "isOpen": true, "matchKeys": [ "-459291760" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JustHost", "isImportant": false, "isOpen": true, "matchKeys": [ "1734609466" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Baidu (IP error page)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1507567067" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "2006716043" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Yii PHP Framework (Default Favicon)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1298108480" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "truVision NVR (interlogix)", "isImportant": false, "isOpen": true, "matchKeys": [ "1782271534" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SOYAL Serial Device Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1777351344" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Redmine", "isImportant": false, "isOpen": true, "matchKeys": [ "603314" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpMyAdmin", "isImportant": false, "isOpen": true, "matchKeys": [ "-476231906" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco (eg:Conference Room Login Page)", "isImportant": false, "isOpen": true, "matchKeys": [ "-646322113" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jetty 404", "isImportant": false, "isOpen": true, "matchKeys": [ "-629047854" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Luma Surveillance", "isImportant": false, "isOpen": true, "matchKeys": [ "-1351901211" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-519765377" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HP Printer / Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-2144363468" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "-127886975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "1139788073" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "-1235192469" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ALIBI NVR", "isImportant": false, "isOpen": true, "matchKeys": [ "1876585825" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor 应用交付报表系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1810847295" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Websockets test page (eg: port 5900)", "isImportant": false, "isOpen": true, "matchKeys": [ "-291579889" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "macOS Server (Apple)", "isImportant": false, "isOpen": true, "matchKeys": [ "1629518721" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenRG", "isImportant": false, "isOpen": true, "matchKeys": [ "-986816620" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cisco Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-299287097" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sangfor", "isImportant": false, "isOpen": true, "matchKeys": [ "-1926484046" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HeroSpeed Digital Technology Co. (NVR/IPC/XVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "-873627015" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nomadix Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "2071993228" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitlab", "isImportant": false, "isOpen": true, "matchKeys": [ "516963061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Magento", "isImportant": false, "isOpen": true, "matchKeys": [ "-38580010" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MK-AUTH", "isImportant": false, "isOpen": true, "matchKeys": [ "1490343308" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shoutcast Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-632583950" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "95271369" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "1476335317" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "-842192932" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "105083909" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "240606739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FireEye", "isImportant": false, "isOpen": true, "matchKeys": [ "2121539357" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Adobe Campaign Classic", "isImportant": false, "isOpen": true, "matchKeys": [ "-333791179" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "XAMPP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1437701105" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Niagara Web Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-676077969" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor", "isImportant": false, "isOpen": true, "matchKeys": [ "-2138771289" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hitron Technologies Inc.", "isImportant": false, "isOpen": true, "matchKeys": [ "711742418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBM Notes", "isImportant": false, "isOpen": true, "matchKeys": [ "728788645" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Barracuda", "isImportant": false, "isOpen": true, "matchKeys": [ "1436966696" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ServiceNow", "isImportant": false, "isOpen": true, "matchKeys": [ "86919334" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Openfire Admin Console", "isImportant": false, "isOpen": true, "matchKeys": [ "1211608009" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HP iLO", "isImportant": false, "isOpen": true, "matchKeys": [ "2059618623" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sunny WebBox", "isImportant": false, "isOpen": true, "matchKeys": [ "1975413433" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZyXEL", "isImportant": false, "isOpen": true, "matchKeys": [ "943925975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei", "isImportant": false, "isOpen": true, "matchKeys": [ "281559989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tenda Web Master", "isImportant": false, "isOpen": true, "matchKeys": [ "-2145085239" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Prometheus Time Series Collection and Processing Server", "isImportant": false, "isOpen": true, "matchKeys": [ "-1399433489" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "wdCP 云主机面板", "isImportant": false, "isOpen": true, "matchKeys": [ "1786752597" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Domoticz (Home Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "90680708" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tableau", "isImportant": false, "isOpen": true, "matchKeys": [ "-1441956789" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "openWRT Luci", "isImportant": false, "isOpen": true, "matchKeys": [ "-675839242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti – AirOS", "isImportant": false, "isOpen": true, "matchKeys": [ "1020814938" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MDaemon Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-766957661" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teltonika", "isImportant": false, "isOpen": true, "matchKeys": [ "119741608" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Entrolink", "isImportant": false, "isOpen": true, "matchKeys": [ "1973665246" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WindRiver-WebServer", "isImportant": false, "isOpen": true, "matchKeys": [ "74935566" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microhard Systems", "isImportant": false, "isOpen": true, "matchKeys": [ "-1723752240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Skype", "isImportant": false, "isOpen": true, "matchKeys": [ "-1807411396" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teltonika", "isImportant": false, "isOpen": true, "matchKeys": [ "-1612496354" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Eltex (Router)", "isImportant": false, "isOpen": true, "matchKeys": [ "1877797890" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "bintec elmeg", "isImportant": false, "isOpen": true, "matchKeys": [ "-375623619" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SyncThru Web Service (Printers)", "isImportant": false, "isOpen": true, "matchKeys": [ "1483097076" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "BoaServer", "isImportant": false, "isOpen": true, "matchKeys": [ "1169183049" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Securepoint", "isImportant": false, "isOpen": true, "matchKeys": [ "1051648103" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Moodle", "isImportant": false, "isOpen": true, "matchKeys": [ "-438482901" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RADIX", "isImportant": false, "isOpen": true, "matchKeys": [ "-1492966240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CradlePoint Technology (Router)", "isImportant": false, "isOpen": true, "matchKeys": [ "1466912879" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "-167656799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Blackboard", "isImportant": false, "isOpen": true, "matchKeys": [ "-1593651747" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jupyter Notebook", "isImportant": false, "isOpen": true, "matchKeys": [ "-895963602" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HostMonster - Web hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "-972810761" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1703788174" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Rocket Chat", "isImportant": false, "isOpen": true, "matchKeys": [ "225632504" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "mofinetwork", "isImportant": false, "isOpen": true, "matchKeys": [ "-1702393021" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zabbix", "isImportant": false, "isOpen": true, "matchKeys": [ "892542951" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TOTOLINK (network)", "isImportant": false, "isOpen": true, "matchKeys": [ "547474373" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ossia (Provision SR) | Webcam/IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "-374235895" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1544230796" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "517158172" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jeedom (home automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "462223993" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JBoss Application Server 7", "isImportant": false, "isOpen": true, "matchKeys": [ "937999361" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Niagara Web Server / Tridium", "isImportant": false, "isOpen": true, "matchKeys": [ "1991562061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Solarwinds Serv-U FTP Server", "isImportant": false, "isOpen": true, "matchKeys": [ "812385209" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Aruba (Virtual Controller)", "isImportant": false, "isOpen": true, "matchKeys": [ "1142227528" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dell", "isImportant": false, "isOpen": true, "matchKeys": [ "-1153950306" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RemObjects SDK / Remoting SDK for .NET HTTP Server Microsoft", "isImportant": false, "isOpen": true, "matchKeys": [ "72005642" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Zyxel ZyWALL", "isImportant": false, "isOpen": true, "matchKeys": [ "-484708885" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VisualSVN Server", "isImportant": false, "isOpen": true, "matchKeys": [ "706602230" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jboss", "isImportant": false, "isOpen": true, "matchKeys": [ "-656811182" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "STARFACE VoIP Software", "isImportant": false, "isOpen": true, "matchKeys": [ "-332324409" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netis (network devices)", "isImportant": false, "isOpen": true, "matchKeys": [ "-594256627" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WHM", "isImportant": false, "isOpen": true, "matchKeys": [ "-649378830" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tandberg", "isImportant": false, "isOpen": true, "matchKeys": [ "97604680" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ghost (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015932800" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Avtech IP Surveillance (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-194439630" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Liferay Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "129457226" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Plesk Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "-771764544" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Odoo", "isImportant": false, "isOpen": true, "matchKeys": [ "-617743584" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Polycom", "isImportant": false, "isOpen": true, "matchKeys": [ "77044418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cake PHP", "isImportant": false, "isOpen": true, "matchKeys": [ "980692677" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Exacq", "isImportant": false, "isOpen": true, "matchKeys": [ "476213314" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CheckPoint", "isImportant": false, "isOpen": true, "matchKeys": [ "794809961" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ubiquiti UNMS", "isImportant": false, "isOpen": true, "matchKeys": [ "1157789622" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "cPanel Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1244636413" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WorldClient for Mdaemon", "isImportant": false, "isOpen": true, "matchKeys": [ "1985721423" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netport Software (DSL)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1124868062" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "f5 Big IP", "isImportant": false, "isOpen": true, "matchKeys": [ "-335242539" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mailcow", "isImportant": false, "isOpen": true, "matchKeys": [ "2146763496" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "QNAP NAS Virtualization Station", "isImportant": false, "isOpen": true, "matchKeys": [ "-1041180225" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netgear", "isImportant": false, "isOpen": true, "matchKeys": [ "-1319025408" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gogs", "isImportant": false, "isOpen": true, "matchKeys": [ "917966895" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Trendnet IP camera", "isImportant": false, "isOpen": true, "matchKeys": [ "512590457" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Asustor", "isImportant": false, "isOpen": true, "matchKeys": [ "1678170702" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Dahua", "isImportant": false, "isOpen": true, "matchKeys": [ "-1466785234" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Discuz!", "isImportant": false, "isOpen": true, "matchKeys": [ "-505448917" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Discuz!", "isImportant": false, "isOpen": true, "matchKeys": [ "Discuz!", "Comsenz", "cache/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "wdCP cloud host management system", "isImportant": false, "isOpen": true, "matchKeys": [ "255892555" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "1627330242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SmarterMail", "isImportant": false, "isOpen": true, "matchKeys": [ "-1935525788" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Seafile", "isImportant": false, "isOpen": true, "matchKeys": [ "-12700016" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "bintec elmeg", "isImportant": false, "isOpen": true, "matchKeys": [ "1770799630" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NETGEAR ReadyNAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-137295400" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iPECS", "isImportant": false, "isOpen": true, "matchKeys": [ "-195508437" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "bet365", "isImportant": false, "isOpen": true, "matchKeys": [ "-2116540786" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Reolink", "isImportant": false, "isOpen": true, "matchKeys": [ "-38705358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "idera", "isImportant": false, "isOpen": true, "matchKeys": [ "-450254253" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Proofpoint", "isImportant": false, "isOpen": true, "matchKeys": [ "-1630354993" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Connect WebMail", "isImportant": false, "isOpen": true, "matchKeys": [ "-1678298769" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WorldClient for Mdaemon", "isImportant": false, "isOpen": true, "matchKeys": [ "-35107086" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Realtek", "isImportant": false, "isOpen": true, "matchKeys": [ "2055322029" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 Ruijie Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-692947551" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Askey Cable Modem", "isImportant": false, "isOpen": true, "matchKeys": [ "-1710631084" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Askey Cable Modem", "isImportant": false, "isOpen": true, "matchKeys": [ "89321398" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JAWS Web Server (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "90066852" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JAWS Web Server (IP Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "768231242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Homegrown Website Hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "-421986013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Technicolor / Thomson Speedtouch (Network / ADSL)", "isImportant": false, "isOpen": true, "matchKeys": [ "156312019" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DVR (Korean)", "isImportant": false, "isOpen": true, "matchKeys": [ "-560297467" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "-1950415971" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TP-LINK (Network Device)", "isImportant": false, "isOpen": true, "matchKeys": [ "1842351293" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Salesforce", "isImportant": false, "isOpen": true, "matchKeys": [ "1433417005" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Haus", "isImportant": false, "isOpen": true, "matchKeys": [ "-632070065" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Untangle", "isImportant": false, "isOpen": true, "matchKeys": [ "1103599349" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shenzhen coship electronics co.", "isImportant": false, "isOpen": true, "matchKeys": [ "224536051" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (router/network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1038500535" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-355305208" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-267431135" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-759754862" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "-1200737715" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "75230260" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kibana", "isImportant": false, "isOpen": true, "matchKeys": [ "1668183286" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "283740897" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Icecast Streaming Media Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1424295654" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NEC WebPro", "isImportant": false, "isOpen": true, "matchKeys": [ "1922032523" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vivotek (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1654229048" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microsoft IIS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1414475558" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Univention Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "-1697334194" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Portainer (Docker Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1424036600" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NOS Router", "isImportant": false, "isOpen": true, "matchKeys": [ "-831826827" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tongda", "isImportant": false, "isOpen": true, "matchKeys": [ "-759108386" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CrushFTP", "isImportant": false, "isOpen": true, "matchKeys": [ "-1022206565" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Endian Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-1225484776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Control Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-631002664" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ferozo Panel", "isImportant": false, "isOpen": true, "matchKeys": [ "2072198544" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kerio Control Firewall", "isImportant": false, "isOpen": true, "matchKeys": [ "-466504476" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Cafe24 (Korea)", "isImportant": false, "isOpen": true, "matchKeys": [ "1251810433" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mautic (Open Source Marketing Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "1273982002" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NETIASPOT (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-978656757" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Multilaser", "isImportant": false, "isOpen": true, "matchKeys": [ "916642917" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Canvas LMS (Learning Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "575613323" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBM Server", "isImportant": false, "isOpen": true, "matchKeys": [ "1726027799" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ADB Broadband S.p.A. (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-587741716" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ARRIS (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-360566773" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-884776764" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WAMPSERVER", "isImportant": false, "isOpen": true, "matchKeys": [ "929825723" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Seagate Technology (NAS)", "isImportant": false, "isOpen": true, "matchKeys": [ "240136437" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "UPC Ceska Republica (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1911253822" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Flussonic (Video Streaming)", "isImportant": false, "isOpen": true, "matchKeys": [ "-393788031" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Joomla", "isImportant": false, "isOpen": true, "matchKeys": [ "366524387" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WAMPSERVER", "isImportant": false, "isOpen": true, "matchKeys": [ "443944613" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metabase", "isImportant": false, "isOpen": true, "matchKeys": [ "1953726032" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2031183903" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "545827989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "967636089" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "362091310" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron", "isImportant": false, "isOpen": true, "matchKeys": [ "2086228042" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CommuniGate", "isImportant": false, "isOpen": true, "matchKeys": [ "-1588746893" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZTE (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1427976651" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "InfiNet Wireless | WANFleX (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1648531157" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Mersive Solstice", "isImportant": false, "isOpen": true, "matchKeys": [ "938616453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Université Toulouse 1 Capitole", "isImportant": false, "isOpen": true, "matchKeys": [ "1632780968" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Digium (Switchvox)", "isImportant": false, "isOpen": true, "matchKeys": [ "2068154487" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PowerMTA monitoring", "isImportant": false, "isOpen": true, "matchKeys": [ "-1788112745" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SmartLAN/G", "isImportant": false, "isOpen": true, "matchKeys": [ "-644617577" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Checkpoint (Gaia)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1822098181" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "УТМ (Federal Service for Alcohol Market Regulation | Russia)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1131689409" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MailWizz", "isImportant": false, "isOpen": true, "matchKeys": [ "2127152956" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "1064742722" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RabbitMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015107330" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "openmediavault (NAS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-693082538" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "openWRT Luci", "isImportant": false, "isOpen": true, "matchKeys": [ "1941381095" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Honeywell", "isImportant": false, "isOpen": true, "matchKeys": [ "903086190" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "BOMGAR Support Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "829321644" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nuxt JS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1442789563" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "RoundCube Webmail", "isImportant": false, "isOpen": true, "matchKeys": [ "-2140379067" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1897829998" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netgear (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1047213685" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SonarQube", "isImportant": false, "isOpen": true, "matchKeys": [ "1485257654" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lupus Electronics XT", "isImportant": false, "isOpen": true, "matchKeys": [ "-299324825" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Vanderbilt SPC", "isImportant": false, "isOpen": true, "matchKeys": [ "-1162730477" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VZPP Plesk", "isImportant": false, "isOpen": true, "matchKeys": [ "-1268095485" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Baidu", "isImportant": false, "isOpen": true, "matchKeys": [ "1118684072" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ownCloud", "isImportant": false, "isOpen": true, "matchKeys": [ "-1616115760" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sentora", "isImportant": false, "isOpen": true, "matchKeys": [ "-2054889066" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Alfresco", "isImportant": false, "isOpen": true, "matchKeys": [ "1333537166" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Digital Keystone (DK)", "isImportant": false, "isOpen": true, "matchKeys": [ "-373674173" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WISPR (Airlan)", "isImportant": false, "isOpen": true, "matchKeys": [ "-106646451" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Synology VPN Plus", "isImportant": false, "isOpen": true, "matchKeys": [ "1235070469" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sentry", "isImportant": false, "isOpen": true, "matchKeys": [ "2063428236" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WatchGuard", "isImportant": false, "isOpen": true, "matchKeys": [ "15831193" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Web Client Pro", "isImportant": false, "isOpen": true, "matchKeys": [ "-956471263" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tecvoz", "isImportant": false, "isOpen": true, "matchKeys": [ "-1452159623" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MDaemon Remote Administration", "isImportant": false, "isOpen": true, "matchKeys": [ "99432374" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Paradox IP Module", "isImportant": false, "isOpen": true, "matchKeys": [ "727253975" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DokuWiki", "isImportant": false, "isOpen": true, "matchKeys": [ "-630493013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sails", "isImportant": false, "isOpen": true, "matchKeys": [ "552597979" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FastPanel Hosting", "isImportant": false, "isOpen": true, "matchKeys": [ "774252049" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "C-Lodop", "isImportant": false, "isOpen": true, "matchKeys": [ "-329747115" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jamf Pro Login", "isImportant": false, "isOpen": true, "matchKeys": [ "1262005940" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "StruxureWare (Schneider Electric)", "isImportant": false, "isOpen": true, "matchKeys": [ "979634648" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Axcient Replibit Management Server", "isImportant": false, "isOpen": true, "matchKeys": [ "475379699" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Twonky Server (Media Streaming)", "isImportant": false, "isOpen": true, "matchKeys": [ "-878891718" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Windows Azure", "isImportant": false, "isOpen": true, "matchKeys": [ "-2125083197" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ISP Manager (Web Hosting Panel)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1151675028" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JupyterHub", "isImportant": false, "isOpen": true, "matchKeys": [ "1248917303" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CenturyLink Modem GUI Login (eg: Technicolor)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1908556829" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tecvoz", "isImportant": false, "isOpen": true, "matchKeys": [ "1059329877" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OPNsense", "isImportant": false, "isOpen": true, "matchKeys": [ "-1148190371" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ligowave (network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1467395679" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Rumpus", "isImportant": false, "isOpen": true, "matchKeys": [ "-1528414776" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spiceworks (panel)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2117390767" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TeamCity", "isImportant": false, "isOpen": true, "matchKeys": [ "-1944119648" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "INSTAR Full-HD IP-Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "-1748763891" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GPON Home Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "251106693" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Alienvault", "isImportant": false, "isOpen": true, "matchKeys": [ "-1779611449" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Arbor Networks", "isImportant": false, "isOpen": true, "matchKeys": [ "-1745552996" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Accrisoft", "isImportant": false, "isOpen": true, "matchKeys": [ "-1275148624" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Yasni", "isImportant": false, "isOpen": true, "matchKeys": [ "-178685903" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Slack", "isImportant": false, "isOpen": true, "matchKeys": [ "-43161126" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "innovaphone", "isImportant": false, "isOpen": true, "matchKeys": [ "671221099" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Shinobi (CCTV)", "isImportant": false, "isOpen": true, "matchKeys": [ "-10974981" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TP-LINK (Network Device)", "isImportant": false, "isOpen": true, "matchKeys": [ "1274078387" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Siemens OZW772", "isImportant": false, "isOpen": true, "matchKeys": [ "-336242473" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lantronix (Spider)", "isImportant": false, "isOpen": true, "matchKeys": [ "882208493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ClaimTime (Ramsell Public Health & Safety)", "isImportant": false, "isOpen": true, "matchKeys": [ "-687783882" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Surfilter SSL VPN Portal", "isImportant": false, "isOpen": true, "matchKeys": [ "-590892202" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kyocera (Printer)", "isImportant": false, "isOpen": true, "matchKeys": [ "-50306417" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lucee!", "isImportant": false, "isOpen": true, "matchKeys": [ "784872924" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ricoh", "isImportant": false, "isOpen": true, "matchKeys": [ "1135165421" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Handle Proxy", "isImportant": false, "isOpen": true, "matchKeys": [ "926501571" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metasploit", "isImportant": false, "isOpen": true, "matchKeys": [ "579239725" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-689902428" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-600508822" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "656868270" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-2056503929" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-1656695885" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "331870709" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "1241049726" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "998138196" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "322531336" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-401934945" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iomega NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "-613216179" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Chef Automate", "isImportant": false, "isOpen": true, "matchKeys": [ "-276759139" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gargoyle Router Management Utility", "isImportant": false, "isOpen": true, "matchKeys": [ "1862132268" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KeepItSafe Management Console", "isImportant": false, "isOpen": true, "matchKeys": [ "-1738727418" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Entronix Energy Management Platform", "isImportant": false, "isOpen": true, "matchKeys": [ "-368490461" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenProject", "isImportant": false, "isOpen": true, "matchKeys": [ "1836828108" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Unified Management Console (Polycom)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1775553655" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Moxapass ioLogik Remote Ethernet I/O Server ", "isImportant": false, "isOpen": true, "matchKeys": [ "381100274" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HFS (HTTP File Server)", "isImportant": false, "isOpen": true, "matchKeys": [ "2124459909" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HFS (HTTP File Server)", "isImportant": false, "isOpen": true, "matchKeys": [ "731374291" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Traccar GPS tracking", "isImportant": false, "isOpen": true, "matchKeys": [ "-335153896" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IW", "isImportant": false, "isOpen": true, "matchKeys": [ "896412703" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Wordpress Under Construction Icon", "isImportant": false, "isOpen": true, "matchKeys": [ "191654058" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Combivox", "isImportant": false, "isOpen": true, "matchKeys": [ "-342262483" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NetComWireless (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "5542029" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Elastic (Database)", "isImportant": false, "isOpen": true, "matchKeys": [ "1552860581" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "1174841451" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "truVision (NVR)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1093172228" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SpamExperts", "isImportant": false, "isOpen": true, "matchKeys": [ "-1688698891" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Sonatype Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-1546574541" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iDirect Canada (Network Management)", "isImportant": false, "isOpen": true, "matchKeys": [ "-256828986" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenERP (now known as Odoo)", "isImportant": false, "isOpen": true, "matchKeys": [ "1966198264" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PKP (OpenJournalSystems) Public Knowledge Project", "isImportant": false, "isOpen": true, "matchKeys": [ "2099342476" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LiquidFiles", "isImportant": false, "isOpen": true, "matchKeys": [ "541087742" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ZyXEL (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "-882760066" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Universal Devices (UD)", "isImportant": false, "isOpen": true, "matchKeys": [ "16202868" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "987967490" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitea", "isImportant": false, "isOpen": true, "matchKeys": [ "1969970750" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TC-Group", "isImportant": false, "isOpen": true, "matchKeys": [ "-1734573358" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Deluge Web UI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1589842876" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AMH 云主机面板", "isImportant": false, "isOpen": true, "matchKeys": [ "1822002133" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OTRS (Open Ticket Request System)", "isImportant": false, "isOpen": true, "matchKeys": [ "-2006308185" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Bosch Security Systems (Camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1702769256" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Node-RED", "isImportant": false, "isOpen": true, "matchKeys": [ "321591353" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "motionEye (camera)", "isImportant": false, "isOpen": true, "matchKeys": [ "-923693877" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Saia Burgess Controls – PCD", "isImportant": false, "isOpen": true, "matchKeys": [ "-1547576879" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Arcadyan o2 box (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1479202414" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "D-Link (Network)", "isImportant": false, "isOpen": true, "matchKeys": [ "1081719753" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Abilis (Network/Automation)", "isImportant": false, "isOpen": true, "matchKeys": [ "-166151761" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Ghost (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1231681737" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "321909464" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "-1153873472" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "1095915848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "788771792" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Airwatch", "isImportant": false, "isOpen": true, "matchKeys": [ "-1863663974" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KeyHelp (Keyweb AG)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1267819858" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KeyHelp (Keyweb AG)", "isImportant": false, "isOpen": true, "matchKeys": [ "726817668" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GLPI", "isImportant": false, "isOpen": true, "matchKeys": [ "-1474875778" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Netcom Technology", "isImportant": false, "isOpen": true, "matchKeys": [ "5471989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CradlePoint", "isImportant": false, "isOpen": true, "matchKeys": [ "-1457536113" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MyASP", "isImportant": false, "isOpen": true, "matchKeys": [ "-736276076" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Intelbras SA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1343070146" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Lenel", "isImportant": false, "isOpen": true, "matchKeys": [ "538585915" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OkoFEN Pellematic", "isImportant": false, "isOpen": true, "matchKeys": [ "-625364318" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SimpleHelp (Remote Support)", "isImportant": false, "isOpen": true, "matchKeys": [ "1117165781" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GraphQL", "isImportant": false, "isOpen": true, "matchKeys": [ "-1067420240" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DNN (CMS)", "isImportant": false, "isOpen": true, "matchKeys": [ "-1465479343" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "1232159009" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "1382324298" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apple", "isImportant": false, "isOpen": true, "matchKeys": [ "-1498185948" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ISPConfig", "isImportant": false, "isOpen": true, "matchKeys": [ "483383992" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Microsoft Outlook", "isImportant": false, "isOpen": true, "matchKeys": [ "-1249852061" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hikvision IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "999357577" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IP Camera", "isImportant": false, "isOpen": true, "matchKeys": [ "492290497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AfterLogicWebMail系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-194791768" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "B2Bbuilder", "isImportant": false, "isOpen": true, "matchKeys": [ "492941040" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服下一代防火墙管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "123821839" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服WEB防篡改管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "WEB防篡改", "cgi-bin/tamper_admin.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "YApi 可视化接口管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "YApi", "id=\"yapi\"", "prd", "可视化接口管理平台" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JumpServer 堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "-1162630024" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WeiPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "weiphp.css", "weiphp", "Public/static" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nagios XI", "isImportant": false, "isOpen": true, "matchKeys": [ "Nagios XI", "nagiosxi", "Nagios" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ShowDoc", "isImportant": false, "isOpen": true, "matchKeys": [ "1969934080" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "群晖 NAS", "isImportant": false, "isOpen": true, "matchKeys": [ "DiskStation", "webman/modules", "NAS" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "协达OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1850889691" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "山石网科 防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "Hillstone", "licenseAggrement", "GLOBAL_CONFIG.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "360天堤新一代智慧防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "360天堤", "360", "360防火墙" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "360网神防火墙系统", "isImportant": false, "isOpen": true, "matchKeys": [ "resources/image/logo_header.png", "360", "网神防火墙系统" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网神SecGate 3600防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "网神SecGate", "3600防火墙", "css/lsec/login.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "蓝盾防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "蓝盾", "Bluedon", "default/js/act/login.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LanProxy", "isImportant": false, "isOpen": true, "matchKeys": [ "LanProxy", "password", "lanproxy-config" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ManageEngine ADManager Plus", "isImportant": false, "isOpen": true, "matchKeys": [ "ADManager", "Hashtable.js", "ManageEngine" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpshe 商城系统", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by phpshe", "include/js/global.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "骑士 74CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "74cms", "qscms.root", "index.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache2 Debian 默认页", "isImportant": false, "isOpen": true, "matchKeys": [ "Apache2 Debian Default", "It works!", "Debian Logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Grafana", "isImportant": false, "isOpen": true, "matchKeys": [ "Grafana", "login", "grafana-app" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Canal Admin", "isImportant": false, "isOpen": true, "matchKeys": [ "Canal Admin", "js/app" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBOS酷办公OA系统", "isImportant": false, "isOpen": true, "matchKeys": [ "IBOS", "login-panel", "loginsubmit" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "若依(RuoYi)-管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "ry-ui", "username", "rememberme" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中新金盾信息安全管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "中新金盾信息安全管理系统", "login", "useusbkey" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中成科信 综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "1632964065" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware vCenter", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware", "ID_VISDK", "download" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AWS S3 Bucket", "isImportant": false, "isOpen": true, "matchKeys": [ "InvalidBucketName", "aliyuncs" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网心云设备", "isImportant": false, "isOpen": true, "matchKeys": [ "网心云设备", "favicon.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服 NGAF", "isImportant": false, "isOpen": true, "matchKeys": [ "SANGFOR", "NGAF", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IBM HTTP Server", "isImportant": false, "isOpen": true, "matchKeys": [ "IBM HTTP Server", "Support" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "nps", "isImportant": false, "isOpen": true, "matchKeys": [ "nps", "ehang", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Webmin", "isImportant": false, "isOpen": true, "matchKeys": [ "Webmin", "session_login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "群晖 DiskStation", "isImportant": false, "isOpen": true, "matchKeys": [ "DiskStation", "文件服务器", "modules" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "SSLVPN", "rjweb", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "蜂网企业流控云路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "ifw8", "企业级流控云路由器", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网御 安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "安全系统", "网御星云", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Citrix Access Gateway", "isImportant": false, "isOpen": true, "matchKeys": [ "Citrix Access Gateway", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深信服安全感知平台", "isImportant": false, "isOpen": true, "matchKeys": [ "安全感知平台", "login.js", "apps" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache2 Ubuntu 默认页", "isImportant": false, "isOpen": true, "matchKeys": [ "Apache2 Ubuntu Default Page", "ubuntu-logo.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "帆软报表-FineReport", "isImportant": false, "isOpen": true, "matchKeys": [ "ReportServer", "=fs" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CAS 单点登录", "isImportant": false, "isOpen": true, "matchKeys": [ "Central Authentication Service", "cas/login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视 流媒体管理服务器", "isImportant": false, "isOpen": true, "matchKeys": [ "流媒体管理服务器", "MSHTML", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "noVNC 远程访问", "isImportant": false, "isOpen": true, "matchKeys": [ "noVNC", "no", "host" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MessageSolution Enterprise Email Archiving (EEA)", "isImportant": false, "isOpen": true, "matchKeys": [ "MessageSolution", "index.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "阿里巴巴otter manager", "isImportant": false, "isOpen": true, "matchKeys": [ "Otter Manager", "channelList" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware vRealize Operations Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "vRealize", "VMware", "Identity Manager" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C-ER3200 路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "ER3200", "home.asp", "h3c.com" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安恒云堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "DBAPPSecurity", "安恒云堡垒机" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安恒明御安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "明御安全网关" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Citrix 虚拟桌面", "isImportant": false, "isOpen": true, "matchKeys": [ "-1272756243" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SeaweedFS", "isImportant": false, "isOpen": true, "matchKeys": [ "1210969935" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FreeRDP 远程RDP工具", "isImportant": false, "isOpen": true, "matchKeys": [ "-2052468252" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache ActiveMQ", "isImportant": false, "isOpen": true, "matchKeys": [ "1766699363" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache-Skywalking", "isImportant": false, "isOpen": true, "matchKeys": [ "1929532064" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Parallels Default page", "isImportant": false, "isOpen": true, "matchKeys": [ "-1050786453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Plesk 面板", "isImportant": false, "isOpen": true, "matchKeys": [ "-134375033" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "DzzOffice 开源办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1961736892" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网康科技网关/防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "5471989" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ThinkPHP", "isImportant": false, "isOpen": true, "matchKeys": [ "ThinkPHP" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SuperMap iServer Web Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "1740191553" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "协众OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-1466673461" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jellyfin", "isImportant": false, "isOpen": true, "matchKeys": [ "-2069226242" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "孚盟云 CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "1533124028" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "协众OA", "isImportant": false, "isOpen": true, "matchKeys": [ "scripts/cnoa.extra.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FastAdmin 框架", "isImportant": false, "isOpen": true, "matchKeys": [ "assets/img/favicon.ico", "bootstrap.min.css", "navbar-toggle" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FastAdmin 框架", "isImportant": false, "isOpen": true, "matchKeys": [ "ajax\\/upload", "assets/img/favicon.ico", "fastadmin" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "imo云办公室", "isImportant": false, "isOpen": true, "matchKeys": [ "永中文档在线预览DCS", "www.yozodcs.com" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "帆软数据决策系统", "isImportant": false, "isOpen": true, "matchKeys": [ ">数据决策系统", "ReportServer?op" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金山TimeOn云杀毒", "isImportant": false, "isOpen": true, "matchKeys": [ "TimeOn", "iepngfix/iepngfix_tilebg.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金山终端安全", "isImportant": false, "isOpen": true, "matchKeys": [ "终端安全系统", "setup/kanclient.exe", "iepngfix/iepngfix_tilebg.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "YzmCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "YzmCMS", "yzm-common.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "微擎 - 公众平台自助引擎", "isImportant": false, "isOpen": true, "matchKeys": [ "微擎 - 公众平台自助引擎", "www.w7.cc", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jspxcms", "isImportant": false, "isOpen": true, "matchKeys": [ "- Powered by Jspxcms", "template/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WordPress", "isImportant": false, "isOpen": true, "matchKeys": [ "wp-admin", "wp-content/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WordPress", "isImportant": false, "isOpen": true, "matchKeys": [ "wp-", "wp-content/themes/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金合OA", "isImportant": false, "isOpen": true, "matchKeys": [ "Jhsoft.Web.login", "PassWord.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "好视通视频会议系统", "isImportant": false, "isOpen": true, "matchKeys": [ "用户登录", "resources/commonImage/favicon.ico", "login/createQRCode.do" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LANMP 默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>LANMP", "<strong>恭喜", "wdlinux.cn", "本页可删除" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CentOS 默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>Welcome to CentOS", "img/centos-logo.png", "centos.org" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百度 ueditor编辑器", "isImportant": false, "isOpen": true, "matchKeys": [ "ueditor.all.js", "UE.getEditor" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpinfo", "isImportant": false, "isOpen": true, "matchKeys": [ "phpinfo", "Virtual Directory Support" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kyan 监控设备", "isImportant": false, "isOpen": true, "matchKeys": [ "login_files", "platform", "欢迎登陆系统" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Hue 大数据框架", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to Hue", "Query. Explore.", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "亿邮邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "eYou", "q=login", "tpl/user" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "亿邮邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "eYou", "q=help", "tpl/user" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "XAMPP 默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "Welcome to XAMPP" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网神下一代极速防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "网神信息技术", "login", "防火墙" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中腾OA", "isImportant": false, "isOpen": true, "matchKeys": [ "systemAction", "zt_webframe", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "新软科技-极通EWEBS", "isImportant": false, "isOpen": true, "matchKeys": [ "N-soft", "ClientDownload.xgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Igenus邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "iGENUS", "login.php", "language" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "图创图书馆集群管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "interlib/common/", "self.location.href" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JEECMS", "isImportant": false, "isOpen": true, "matchKeys": [ "/r/cms/www", "shortcut icon" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache Hadoop", "isImportant": false, "isOpen": true, "matchKeys": [ "static/hadoop-st.png", "Cluster" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TamronOS IPTV系统", "isImportant": false, "isOpen": true, "matchKeys": [ "TamronOS", "loginbox", "tamronos.com" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 RG-EW1200G", "isImportant": false, "isOpen": true, "matchKeys": [ "锐捷", "/static/img/title.ico", "/js/app" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C Web网管", "isImportant": false, "isOpen": true, "matchKeys": [ "webui", "Web网管用户登录", "china_logo.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C ER6300G2", "isImportant": false, "isOpen": true, "matchKeys": [ "ER6300G2", "h3c.com", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C ER3100", "isImportant": false, "isOpen": true, "matchKeys": [ "ER3100", "h3c.com", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SDCMS神盾内容管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "sdcms", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "SSLVPN", "rjsslvpn_encookie", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天迈科技网络视频监控系统", "isImportant": false, "isOpen": true, "matchKeys": [ "jsessionid", "天迈科技", "网络视频监控系统" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WIFISKY-7层流控路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "WIFISKY", "adminusr", "深圳市领空技术" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "后台", "isImportant": false, "isOpen": true, "matchKeys": [ "后台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MinIO", "isImportant": false, "isOpen": true, "matchKeys": [ "MinIO Browser" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TVT 公司产品", "isImportant": false, "isOpen": true, "matchKeys": [ "492290497" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "资产灯塔系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1708240621" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 NBR 路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "738520282" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "二级域名分发系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-2055778861" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "景云网络防病毒系统", "isImportant": false, "isOpen": true, "matchKeys": [ "styles/images/logo.png", "login_form", "防病毒" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VA 虚拟应用管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "Res/Images/logo_va.png", "panel_login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GitBook", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"GitBook", "gitbook" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Outlook", "isImportant": false, "isOpen": true, "matchKeys": [ "owa/auth", "Outlook", "logonDiv" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视联网网关", "isImportant": false, "isOpen": true, "matchKeys": [ "独立运行(无平台)", "login_form" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "阿姆瑞特智能DNS", "isImportant": false, "isOpen": true, "matchKeys": [ "DNS", "main.php?mod=member", "DNS_" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PHPOA 协同办公软件", "isImportant": false, "isOpen": true, "matchKeys": [ "login.php", "提示信息", "showMsg" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "明致 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1591287747" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JBoss EAP", "isImportant": false, "isOpen": true, "matchKeys": [ "title>EAP", "eap.css", "JBoss" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "若依", "isImportant": false, "isOpen": true, "matchKeys": [ "ruoyi", "若依", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "全息AI弱电网络综合运维平台", "isImportant": false, "isOpen": true, "matchKeys": [ "全息AI", "g_is_hk", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "易瑞授权访问系统", "isImportant": false, "isOpen": true, "matchKeys": [ "易瑞授权访问系统" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "E-Tiller", "isImportant": false, "isOpen": true, "matchKeys": [ "北京勤云", "reader/view_abstract.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FangMail", "isImportant": false, "isOpen": true, "matchKeys": [ "fangmail/default/css/em_css.css", "fangmail/cgi/index.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tencent-Exmail", "isImportant": false, "isOpen": true, "matchKeys": [ "ssl_edition=mail.qq.com" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Tencent-Exmail", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/getinvestigate?flowid=", "cgi-bin/bizmail_portal" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Jira", "isImportant": false, "isOpen": true, "matchKeys": [ "jira.webresources", "com.atlassian.plugins" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FishEye", "isImportant": false, "isOpen": true, "matchKeys": [ "FESESSIONID=" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天玥网络安全审计系统", "isImportant": false, "isOpen": true, "matchKeys": [ "天玥", "venustech", "func_login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金航网上阅卷系统", "isImportant": false, "isOpen": true, "matchKeys": [ "金航", "jsyj", "衡水金航" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "科脉·蛙笑在线商业管理软件", "isImportant": false, "isOpen": true, "matchKeys": [ "Kemai", "Login.aspx", "科脉" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "朗拓健康医院管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "static/mq/yaoxun_pbm_im.js", "js/app." ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "品德科技医学在线考试系统", "isImportant": false, "isOpen": true, "matchKeys": [ "考试系统", "品德", "login.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "SPON IP网络对讲广播系统", "isImportant": false, "isOpen": true, "matchKeys": [ "spon_base64.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NVS3000综合视频监控平台", "isImportant": false, "isOpen": true, "matchKeys": [ "视频监控", "NVS3000综合", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "银达汇智 智慧综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "miniui", "Help ?", "main.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "云信通短信运营管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "短信", "Simpla", "chklogin.aspx" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "AceNet 驰崴防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "Technology", "login_commit.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teleport 堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "TELEPORT", "teleport.js", "login-account" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Yii框架", "isImportant": false, "isOpen": true, "matchKeys": [ "yii.js", "yii." ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "WPS 部署可视化平台", "isImportant": false, "isOpen": true, "matchKeys": [ "WPS 部署可视化平台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "phpstydy Windows", "isImportant": false, "isOpen": true, "matchKeys": [ "phpstudy for windows" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "epoint政务服务系统", "isImportant": false, "isOpen": true, "matchKeys": [ "epoint-web-zwdt" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "奥联通讯管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-1356973161" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百傲瑞达", "isImportant": false, "isOpen": true, "matchKeys": [ "-1169502834" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天智智慧医院综合质量监管平台", "isImportant": false, "isOpen": true, "matchKeys": [ "1986460035" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Minio Browser", "isImportant": false, "isOpen": true, "matchKeys": [ "Minio Browser" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "管理后台登录", "isImportant": false, "isOpen": true, "matchKeys": [ "管理员", "登录" ], "location": "title", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "360天擎", "isImportant": false, "isOpen": true, "matchKeys": [ "360天擎" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "博华网龙信息安全一体机", "isImportant": false, "isOpen": true, "matchKeys": [ "博华网龙信息安全一体机" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "LNMP一键安装包默认页面", "isImportant": false, "isOpen": true, "matchKeys": [ "LNMP一键安装包" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "HDWiki", "isImportant": false, "isOpen": true, "matchKeys": [ "hd_sid=" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "深圳锐明行驶记录仪", "isImportant": false, "isOpen": true, "matchKeys": [ "登录您的MDVR" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Drupal", "isImportant": false, "isOpen": true, "matchKeys": [ "drupal" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Huawei user-login", "isImportant": false, "isOpen": true, "matchKeys": [ "Huawei Auth-Http" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Prometheus Server", "isImportant": false, "isOpen": true, "matchKeys": [ "Prometheus Time Series Collection and Processing Server" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Kubernetes", "isImportant": false, "isOpen": true, "matchKeys": [ "Kubernetes Dashboard" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "easypanel", "isImportant": false, "isOpen": true, "matchKeys": [ "easypanel", "vhost", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware", "ui-page", "portal/favicon" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "VMware Horizon" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迪普VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "dptech_ssl", "sslvpn", "loginAPI.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "OpenShift Web Console", "isImportant": false, "isOpen": true, "matchKeys": [ "OpenShift Web Console" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "好视通", "isImportant": false, "isOpen": true, "matchKeys": [ "fsmeeting", "loginCheck.do", "app.result" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "碧海云盒", "isImportant": false, "isOpen": true, "matchKeys": [ "碧海云盒", "mt_login", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "PhpWind", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"phpwind" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CmsEasy", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"CmsEasy" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "EmpireCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by EmpireCMS" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Emlog", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"emlog\"" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ECShop", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"ECSHOP" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "大汉版通-Hanweb-system", "isImportant": false, "isOpen": true, "matchKeys": [ "大汉版通", "大汉网络", "hanweb.com' style='display:none'" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ESPCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "powered by espcms" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KesionCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "ks_inc/common.js", "KesionCMS" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "东营金石软件", "isImportant": false, "isOpen": true, "matchKeys": [ "aspNetHidden", "loginselect", "txtLoginName" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "皓峰防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "皓峰防火墙系统登录" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "CMSTop", "isImportant": false, "isOpen": true, "matchKeys": [ "css/cmstop-common.css", "js/cmstop-common.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华域Reporter", "isImportant": false, "isOpen": true, "matchKeys": [ "reporter", "login", "action.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "智邦国际-企业管理软件", "isImportant": false, "isOpen": true, "matchKeys": [ "index2.asp", "update/exec.asp", "images/full.gif" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "电信网关配置管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "<TITLE>系统登录", "login.php", "img/login_bg3.png", "360.cn" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "方配在线考试系统(FPExam)", "isImportant": false, "isOpen": true, "matchKeys": [ "exam/logo/favicon.ico", "fangpage" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Spring Eureka", "isImportant": false, "isOpen": true, "matchKeys": [ "<title>Eureka", "eureka" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迪普 SSLVPN", "isImportant": false, "isOpen": true, "matchKeys": [ "DPSSLVPN", "SSL VPN Service", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Grafana", "isImportant": false, "isOpen": true, "matchKeys": [ "Grafana" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百卓byzoro-安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "北京百卓", "PatrolFlow", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ENESYS", "isImportant": false, "isOpen": true, "matchKeys": [ "dwr/interface/WebContextUtil.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "KVM_创梦云计算管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "KVM_创梦云计算管理系统" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "任我行-管家婆分销ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "分销ERP", "txt_DbName", "DownloadDriver.asp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "小黄豆CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "xhdcrm", "JS/XHD.js", "login.check.xhd" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nnetgear 路由器", "isImportant": false, "isOpen": true, "matchKeys": [ "NETGEAR" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Metabase", "isImportant": false, "isOpen": true, "matchKeys": [ "Metabase" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "4images", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered by 4images", "4homepages" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Finecms", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"FineCMS" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NUUO 摄像头", "isImportant": false, "isOpen": true, "matchKeys": [ "Network Video Recorder Login" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache ShenYu", "isImportant": false, "isOpen": true, "matchKeys": [ "id=\"httpPath", "th:text=\"${domain}" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Solar 网络管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1871496583" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "畅捷CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "-1068428644" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "悟空CRM", "isImportant": false, "isOpen": true, "matchKeys": [ "872805507" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "e-cology 运维管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-384583337" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "瑞友天翼-应用虚拟化系统", "isImportant": false, "isOpen": true, "matchKeys": [ "DownLoad.XGI", "realor.cn", "dvLogin" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C SecPath 运维审计系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1776863739" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "信呼 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "1652488516" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MeterSphere", "isImportant": false, "isOpen": true, "matchKeys": [ "1023469568" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H2 Database Console", "isImportant": false, "isOpen": true, "matchKeys": [ "-525659379" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧林ICP/iP备案系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-556918553" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "飞鱼星路由器/行为管理", "isImportant": false, "isOpen": true, "matchKeys": [ "content=\"0.2;", "/home/login.html" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "化视私云CDN直播加速服务器", "isImportant": false, "isOpen": true, "matchKeys": [ "img/dl.gif", "华视美达", "login.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "冰峰网络 iceflow", "isImportant": false, "isOpen": true, "matchKeys": [ "Web 配置中心", "/images/splash.jpg" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华夏 ERP", "isImportant": false, "isOpen": true, "matchKeys": [ "jshERP-boot", "platformConfig" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "78 OA", "isImportant": false, "isOpen": true, "matchKeys": [ "/resource/javascript/system/runtime.min.js", "password" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "EnterCRM", "isImportant": false, "isOpen": true, "matchKeys": [ "杭州恩软", "Ent.base.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "ITC-CMS", "isImportant": false, "isOpen": true, "matchKeys": [ "/mt_res_v3/js/common/common.js", "CMS" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Panabit-Panalog", "isImportant": false, "isOpen": true, "matchKeys": [ "img/logo.gif", "Maintain", "unamexx", "img/12.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华为AR Web管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "Huawei", "simple/style/default/image/login.png", "simple/view/ossn.html" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "铭飞 MCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "ms.js", "ms.http.js", "plugins" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "向日葵-SunLogin", "isImportant": false, "isOpen": true, "matchKeys": [ "{\"success\":false,\"msg\":\"Verification failure\"}" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "GROWATT 系统", "isImportant": false, "isOpen": true, "matchKeys": [ "login", "v3/js/odm/odm.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷防火墙", "isImportant": false, "isOpen": true, "matchKeys": [ "下一代防火墙", "锐捷网络" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧林信息安全管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "用户管理登录", "login", "images/zh-CN/login_03.gif" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华为云桌面", "isImportant": false, "isOpen": true, "matchKeys": [ "Desktop@FusionAccess", "/webui/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "齐治堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "fp_download", "login.php", "logo-icon-ico72.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "TurboMail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "TurboMail", "mailmain?type=login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安恒数据大脑API网关", "isImportant": false, "isOpen": true, "matchKeys": [ "mssp-fe", "/static/imgs/logo.png" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "山石网科云数据库审计与防护系统", "isImportant": false, "isOpen": true, "matchKeys": [ "#!/dbSummary", "/lib/colResizable/" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "青年软件OA", "isImportant": false, "isOpen": true, "matchKeys": [ "/Content/qrlib/ligerUI/skins/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金山终端安全管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "iepngfix/iepngfix_tilebg.js", "mysqlStat" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "多媒体信息发布系统", "isImportant": false, "isOpen": true, "matchKeys": [ "HowFor Web" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "百卓 Smart 多业务安全网关", "isImportant": false, "isOpen": true, "matchKeys": [ "writeCustomBgImg.jsp", "baseajax", "LoginLogo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "中远麒麟堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "admin.php", "controller=admin_index&action=login" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "移动云&绿盟日志审计系统-log4j", "isImportant": false, "isOpen": true, "matchKeys": [ "/pisces/login/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Apache APISIX", "isImportant": false, "isOpen": true, "matchKeys": [ "{\"error_msg\":\"404 Route Not Found\"}" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网康科技·互联网控制网关", "isImportant": false, "isOpen": true, "matchKeys": [ "网康科技·互联网控制网关" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "飞思网巡 IT运维系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1622043013" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Richmail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "RichMail" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Richmail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "0;url=/webmail/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Richmail 邮件系统", "isImportant": false, "isOpen": true, "matchKeys": [ "richmail.config.js", "login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "字节数联云桌面系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1142582922" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "智跃HR人力资源管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "images/ZY.LOGO.64.png" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "启迪国信 UEM管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "#commonTip", "css/icomoon", "login", "wwLogin" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金万维异速联", "isImportant": false, "isOpen": true, "matchKeys": [ "GNRemote.dll?GNFunction=" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "JieLink+智能终端操作平台", "isImportant": false, "isOpen": true, "matchKeys": [ "JieLink<sup>+</sup>" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "禾匠点企来客服系统", "isImportant": false, "isOpen": true, "matchKeys": [ "const _scriptUrl", "login_logo" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iXCache", "isImportant": false, "isOpen": true, "matchKeys": [ "iXCache", "/login/userverify.cgi" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "爱信诺开票服务器", "isImportant": false, "isOpen": true, "matchKeys": [ "aisino.kps.console" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "税控服务器管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "sys/login.do", "resources/css/login_yzm.css" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "天擎", "isImportant": false, "isOpen": true, "matchKeys": [ "index/logo", "天擎" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "小鱼易连云视讯管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "font_1957344_lqkodjqdbl.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "小鱼易连云视讯管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "static_source/localcdn/webrtc/web/favicon.ico" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "厦门快普", "isImportant": false, "isOpen": true, "matchKeys": [ "jKPM6", "WebResource.axd" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "iDste融合系统支撑平台", "isImportant": false, "isOpen": true, "matchKeys": [ "iDste融合系统支撑平台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "大华安防 DSS", "isImportant": false, "isOpen": true, "matchKeys": [ "User", "" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "NSFOCUS 绿盟安全设备", "isImportant": false, "isOpen": true, "matchKeys": [ "NSFOCUS" ], "location": "header", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迪浪云OA", "isImportant": false, "isOpen": true, "matchKeys": [ "-179985729" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Nexus Repository Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "1323738809" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金睛云华高级威胁检测系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1747722638" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Workspace ONE Access", "isImportant": false, "isOpen": true, "matchKeys": [ "-1250474341" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "网防G01", "isImportant": false, "isOpen": true, "matchKeys": [ "-968234332" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Gitblit", "isImportant": false, "isOpen": true, "matchKeys": [ "gitblt-favicon.png", "gitblit" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C ER8300G2-X", "isImportant": false, "isOpen": true, "matchKeys": [ "H3C", "vld.bmp", "dis_login", "ER8300G2" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷交换机-睿易", "isImportant": false, "isOpen": true, "matchKeys": [ "cgi-bin/luci", "#f47f3e" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "H3C/安博通/任子行/OEM系列安全产品", "isImportant": false, "isOpen": true, "matchKeys": [ "webui/js/jquerylib/jquery-1.7.2.min.js" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "IP-guard", "isImportant": false, "isOpen": true, "matchKeys": [ "IP-guard", "sign/login" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "宁盾一体化安全认证平台", "isImportant": false, "isOpen": true, "matchKeys": [ "am/ndkey.ico", "zhLanguagePng" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "东华医疗协同办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "extcomponent/security/login.jsp", "login_dhc" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "安宁电子邮件系统 AnyMacro Mail", "isImportant": false, "isOpen": true, "matchKeys": [ "anymacro", "passre.php" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视综合安防平台", "isImportant": false, "isOpen": true, "matchKeys": [ "dist/jquery.js", "home/locationIndex.action" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海纳CMS-HituxCMS", "isImportant": false, "isOpen": true, "matchKeys": [ "Powered By HituxCMS", "ServiceCenter.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "酒店智慧营销IPTV系统", "isImportant": false, "isOpen": true, "matchKeys": [ "xsiptvp", "IPTV" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "朗驰欣创-视频监控", "isImportant": false, "isOpen": true, "matchKeys": [ "Installplug.exe", "NVSID" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "大华-智能物联综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "static/qwebchannel.js", "moment" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "方正翔宇", "isImportant": false, "isOpen": true, "matchKeys": [ "e5style/login1.css", "e5workspace/security/captcha.do" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金蝶 EAS", "isImportant": false, "isOpen": true, "matchKeys": [ "eassso", "portalClientHelper.jsp" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "极通 EWEBS 应用虚拟化", "isImportant": false, "isOpen": true, "matchKeys": [ "NewSoft", "xajax05/xajax_js/xajax_core.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "时空智友", "isImportant": false, "isOpen": true, "matchKeys": [ "login.jsp?login", "登录" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "康通电子云广播系统", "isImportant": false, "isOpen": true, "matchKeys": [ "static/download/JSET99Setup.exe" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "xxl-job", "isImportant": false, "isOpen": true, "matchKeys": [ "/static/adminlte/dist/css/AdminLTE.min.css", "bower_components/PACE/pace.min.js" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康综合安防管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "综合安防管理平台" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "53BK数字报刊系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/Comja/" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "慧点科技 OA 协同办公系统", "isImportant": false, "isOpen": true, "matchKeys": [ "/dojo/smartdot/css/dojo_smartdot.css" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Teleport 堡垒机", "isImportant": false, "isOpen": true, "matchKeys": [ "teleport.js", "login-type-oath", "bind-oath" ], "location": "body", "matchType": "all_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "V2 Conference 视频会议系统", "isImportant": false, "isOpen": true, "matchKeys": [ "window.location.href=\"/Conf/index.jsp\"" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "和欣控制(Hysine) Webtalk 系统", "isImportant": false, "isOpen": true, "matchKeys": [ "_webtalk/_cur/loginA.php", "WEBTALK" ], "location": "body", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Analytics Cloud 分析云", "isImportant": false, "isOpen": true, "matchKeys": [ "410106848" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "明源云MIP集成平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-834208471" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MapGIS Server Manager", "isImportant": false, "isOpen": true, "matchKeys": [ "-252149748" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "金钟集团智能物流管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-364449966" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "海康威视综合安防管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-808437027" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "即会通企业版(LiveUC)|视频会议", "isImportant": false, "isOpen": true, "matchKeys": [ "-637931821" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "锐捷 SSL VPN", "isImportant": false, "isOpen": true, "matchKeys": [ "-1525950034" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "华测监测预警系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-628229493" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "35企业邮箱系统", "isImportant": false, "isOpen": true, "matchKeys": [ "1676919780" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "指挥调度平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-1971504131" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "FE业务协作平台", "isImportant": false, "isOpen": true, "matchKeys": [ "-391577146" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "Elib 图书馆集群管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "478149598" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "VMware Horizon", "isImportant": false, "isOpen": true, "matchKeys": [ "1182206475" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "银达汇智智慧综合管理平台", "isImportant": false, "isOpen": true, "matchKeys": [ "1170487960" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "迈普多业务融合网关", "isImportant": false, "isOpen": true, "matchKeys": [ "-1234665500" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "红海eHR人力资源管理系统", "isImportant": false, "isOpen": true, "matchKeys": [ "-1015496453" ], "location": "icon_hash", "matchType": "any_keywords", "type": "Web应用" }, { "accuracy": "lower", "describe": "MobileIron --Log4j", "isImportant": false, "isOpen": true, "matchKeys": [ "MobileIron User Portal: Sign In" ], "location": "title", "matchType": "any_keywords", "type": "Web应用" } ] }