终极Recog XML指纹编写指南从模式定义到参数提取【免费下载链接】recogPattern recognition for hosts, services, and content项目地址: https://gitcode.com/gh_mirrors/re/recogRecog是一个强大的模式识别框架专为识别主机、服务和内容而设计。这个开源项目通过XML指纹文件来匹配网络服务返回的各种数据帮助安全研究人员和网络管理员快速识别目标系统的软件版本、操作系统和设备类型。在本篇完整指南中我将带您深入了解如何编写高质量的Recog XML指纹从基础模式定义到高级参数提取技巧。 Recog指纹基础结构每个Recog XML指纹文件都遵循特定的结构规范位于项目的xml/目录中。让我们从一个简单的示例开始?xml version1.0 encodingUTF-8? fingerprints matcheshttp_header.server protocolhttp database_typeservice preference0.90 fingerprint pattern^Apache/([\d.]) descriptionApache HTTP Server/description example service.version2.4.38Apache/2.4.38/example param pos0 nameservice.vendor valueApache/ param pos0 nameservice.product valueHTTPD/ param pos0 nameservice.family valueApache/ param pos1 nameservice.version/ /fingerprint /fingerprints 核心元素解析fingerprints根元素matches属性标识指纹数据库类型如http_header.serverprotocol属性指定协议名称如http、ssh、ftpdatabase_type属性定义数据库类型常用值有service和util.ospreference属性优先级设置范围0.0-1.0fingerprint元素pattern属性正则表达式模式用于匹配目标数据flags属性可选正则表达式标志位description元素提供人类可读的指纹描述信息example元素包含测试用例验证指纹匹配是否正确可添加属性来验证参数提取结果param元素pos属性捕获组位置0表示静态值name属性参数名称value属性参数值支持变量插值 正则表达式模式编写技巧基础模式匹配Recog使用正则表达式进行模式匹配以下是一些实用技巧!-- 简单字符串匹配 -- fingerprint pattern^nginx$ descriptionnginx web server/description examplenginx/example param pos0 nameservice.product valuenginx/ /fingerprint !-- 版本号提取 -- fingerprint pattern^nginx/([\d.])$ descriptionnginx with version/description example service.version1.18.0nginx/1.18.0/example param pos0 nameservice.product valuenginx/ param pos1 nameservice.version/ /fingerprint !-- 复杂模式匹配 -- fingerprint pattern^Microsoft-IIS/([\d.]) \(([^)])\)$ descriptionMicrosoft IIS with OS info/description example service.version10.0 os.productWindowsMicrosoft-IIS/10.0 (Windows)/example param pos0 nameservice.vendor valueMicrosoft/ param pos0 nameservice.product valueIIS/ param pos1 nameservice.version/ param pos2 nameos.product/ /fingerprint常用正则表达式模式模式描述示例^...$精确匹配整行^Apache$([\d.])匹配版本号1.2.3,4.5([A-Za-z])匹配字母Apache,nginx([^)])匹配非右括号字符Windows NT(?:...)非捕获分组优化性能 参数提取与变量插值基础参数提取fingerprint pattern^OpenSSH_([\d.])(?:p\d)? descriptionOpenSSH server/description example service.version8.4OpenSSH_8.4/example example service.version7.9OpenSSH_7.9p1/example param pos0 nameservice.vendor valueOpenBSD/ param pos0 nameservice.product valueOpenSSH/ param pos1 nameservice.version/ /fingerprint高级变量插值Recog支持在参数值中使用变量插值这在处理复杂的产品名称时特别有用fingerprint pattern^Eltex (TAU-\d[A-Z]*(?:\.IP)?)$ descriptionEltex TAU model VoIP gateway/description example hw.productTAU-72Eltex TAU-72/example example hw.productTAU-1.IPEltex TAU-1.IP/example param pos0 nameos.vendor valueEltex/ param pos0 nameos.product value{hw.product} Firmware/ param pos0 nameos.device valueVoIP Gateway/ param pos0 namehw.vendor valueEltex/ param pos1 namehw.product/ param pos0 namehw.device valueVoIP Gateway/ /fingerprint临时变量使用使用_tmp.前缀创建临时变量这些变量不会出现在最终输出中fingerprint pattern^foo baz switchThing-(\d{4})$ descriptionNetCorp NX series switches/description example hw.productNX8200foo baz switchThing-8200/example param pos0 namehw.vendor valueNetCorp/ param pos0 namehw.product valueNX{_tmp.001}/ param pos1 name_tmp.001/ /fingerprint 测试用例编写最佳实践基本测试用例fingerprint pattern^MySQL Community Server - GPL \(([\d.])\)$ descriptionMySQL Community Server/description !-- 简单测试用例 -- exampleMySQL Community Server - GPL (5.7.32)/example !-- 带验证属性的测试用例 -- example service.version5.7.32MySQL Community Server - GPL (5.7.32)/example !-- 多个测试用例 -- example service.version8.0.23MySQL Community Server - GPL (8.0.23)/example param pos0 nameservice.vendor valueOracle/ param pos0 nameservice.product valueMySQL/ param pos1 nameservice.version/ /fingerprintBase64编码测试用例对于包含不可打印字符的测试数据可以使用Base64编码fingerprint pattern^\x00\x00.* descriptionBinary protocol example/description example _encodingbase64 dGllczGEAAAAlQQWMS4yLjg0MC4xMTM1NTYuMS40LjgwMAQuZGF0YS5yZW1vdmVkLjCEAAAAK AQdZG9tYWluQ29udHJvbGxlckZ1bmN0aW9uYWxpdHkxhAAAAAMEATc /example /fingerprint外部文件测试用例对于较长的测试数据可以使用外部文件fingerprint pattern^HTTP/1\.1 200 OK.*Server: Apache.*$ descriptionApache full HTTP response/description example _filenameapache_response.txt/ /fingerprint文件结构xml/ http_servers.xml http_servers/ apache_response.txt 指纹文件组织与管理文件命名规范Recog项目中的指纹文件按照协议和功能进行组织文件路径描述xml/http_servers.xmlHTTP服务器头识别xml/ssh_banners.xmlSSH横幅识别xml/ftp_banners.xmlFTP横幅识别xml/mysql_banners.xmlMySQL横幅识别xml/snmp_sysdescr.xmlSNMP系统描述识别数据库类型选择在fingerprints根元素中设置合适的database_type!-- 服务识别 -- fingerprints matchesssh.banner protocolssh database_typeservice preference0.85 !-- 操作系统识别 -- fingerprints matchesutil.os protocoltcp database_typeutil.os preference0.50️ 实用工具与验证使用recog_match测试指纹# 测试单个指纹匹配 echo -n Apache/2.4.38 | bin/recog_match xml/http_servers.xml - # 批量测试 cat test_banners.txt | bin/recog_match xml/http_servers.xml -指纹验证工具Recog提供了recog_verify工具来验证指纹文件的正确性# 验证单个指纹文件 bin/recog_verify xml/http_servers.xml # 验证所有指纹文件 find xml -name *.xml -exec bin/recog_verify {} \;常见验证错误XML语法错误确保XML格式正确正则表达式错误测试正则表达式是否有效参数引用错误检查变量插值是否正确测试用例不匹配确保example能匹配pattern 高级技巧与最佳实践1. 优先级设置策略!-- 高优先级常见且精确的指纹 -- fingerprints matcheshttp_header.server preference0.90 !-- 中优先级一般指纹 -- fingerprints matchesftp_banners preference0.75 !-- 低优先级备用或实验性指纹 -- fingerprints matchesexperimental preference0.202. CPE标识符生成Recog支持自动生成CPE标识符fingerprint pattern^Apache/([\d.]) descriptionApache HTTP Server/description example service.version2.4.38Apache/2.4.38/example param pos0 nameservice.vendor valueApache/ param pos0 nameservice.product valueHTTPD/ param pos0 nameservice.family valueApache/ param pos1 nameservice.version/ param pos0 nameservice.cpe23 valuecpe:/a:apache:http_server:{service.version}/ /fingerprint3. 多协议支持!-- 支持多个协议的通用指纹 -- fingerprints matchesgeneric.banner protocoltcp database_typeservice fingerprint pattern^Product: ([\w\s]) v([\d.])$ descriptionGeneric product banner/description example service.productMyApp service.version1.0Product: MyApp v1.0/example param pos1 nameservice.product/ param pos2 nameservice.version/ /fingerprint /fingerprints 性能优化建议1. 正则表达式优化!-- 优化前低效的正则 -- fingerprint pattern^.*Apache.*/([\d.]).*$ !-- 优化后高效的正则 -- fingerprint pattern^Apache/([\d.])2. 避免过度匹配!-- 不推荐过于宽泛 -- fingerprint pattern^.*server.*$ !-- 推荐精确匹配 -- fingerprint pattern^Apache.*Server.*$3. 合理分组测试用例为每个指纹提供2-3个代表性的测试用例覆盖不同版本和变体。 实战示例编写完整的指纹文件让我们创建一个完整的HTTP服务器指纹文件?xml version1.0 encodingUTF-8? fingerprints matcheshttp_header.custom protocolhttp database_typeservice preference0.80 !-- 自定义Web框架识别 -- fingerprint pattern^MyFramework/([\d.]) \(Python/([\d.])\)$ descriptionMyFramework Python web framework/description example service.version1.2.0 os.productPython/3.8.5MyFramework/1.2.0 (Python/3.8.5)/example example service.version2.0.1 os.productPython/3.9.0MyFramework/2.0.1 (Python/3.9.0)/example param pos0 nameservice.vendor valueMyCompany/ param pos0 nameservice.product valueMyFramework/ param pos1 nameservice.version/ param pos2 nameos.product/ /fingerprint !-- 嵌入式设备识别 -- fingerprint pattern^Embedded-Web-Server v([\d.]) on ([\w\s])$ descriptionEmbedded web server on specific hardware/description example service.version3.1 hw.productRaspberry Pi 4Embedded-Web-Server v3.1 on Raspberry Pi 4/example param pos0 nameservice.product valueEmbedded-Web-Server/ param pos1 nameservice.version/ param pos2 namehw.product/ param pos0 namehw.device valueEmbedded Device/ /fingerprint /fingerprints 总结与下一步通过本指南您已经掌握了Recog XML指纹编写的核心技能。从基础的模式匹配到高级的参数提取从简单的测试用例到复杂的变量插值您现在可以✅ 创建规范的XML指纹文件✅ 编写高效的正则表达式模式✅ 提取和转换匹配参数✅ 添加全面的测试用例✅ 优化指纹性能和准确性要深入了解Recog的更多功能请查看项目中的其他指纹文件作为参考特别是xml/http_servers.xml和xml/ssh_banners.xml这两个文件包含了丰富的实际示例。记住好的指纹应该 精确匹配目标数据 提取有用的信息 包含充分的测试用例⚡ 保持高性能 易于维护和更新现在就开始为您的项目创建自定义指纹吧通过实践这些技巧您将能够构建强大的识别系统准确识别网络中的各种服务和设备。【免费下载链接】recogPattern recognition for hosts, services, and content项目地址: https://gitcode.com/gh_mirrors/re/recog创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考