专题 web网站渗透 第 3 / 4 篇

漏洞确认了,然后呢

清酒 8 分钟 46 次读过

漏洞利用

声明

本文涉及的所有操作均在本地靶场环境中进行,用于理解漏洞原理与防御思路,请勿用于未授权的目标。

上一阶段我们已经完成了在WordPress的后台放一个管理员账号,这个账号可以在后台成功登录。

但是上阶段的演示只是证明这个漏洞能够有运行的条件,这次的漏洞利用不同的地方在于,在证明有运行条件之后我们要怎么留下一个有用的东西,

这次使用的工具也换了一档。上次使用的脚本只是针对于一个漏洞写死的,用完就基本没什么作用了,这一阶段讲的是框架。一个框架装着几千个模块,如果换了目标就直接换模块就可以。

一、这一阶段要做什么?

漏洞利用在渗透流程中位于信息收集、威胁建模与漏洞分析之后。前面两个回答了有什么和能否利用,这一步要回答的是能否直接拿到手。

失败也算产出。报告里写的已验证不可利用和未验证是两个意思。前者能验证不可达,后者不行。

漏洞利用阶段结束的标志

能拿到某种形式的控制权。

二、框架长什么样

讲这个阶段绕不开Metasploit。它是主流的利用框架,而且Kali自带,开源免费。

它的思路是模块化,能把一次渗透拆成六类,各干各的事。

模块 干什么 对应哪个阶段
Auxiliary 辅助 扫描、识别、爆破,只探测不攻击 信息收集
Exploits 利用 每个模块对应的具体漏洞 漏洞利用
Payloads 载荷 打进去了之后要跑的那段代码 漏洞利用
Post 后渗透 提权、搜集信息、横向移动 后渗透
Encoders 编码 让载荷做变形以绕过特征匹配 辅助
Nops 空指令 生成填充指令,能够稳定利用 辅助

几千个模块我怎么找到我要用的?可以用内置的search。用软件名或者漏洞类型去搜索,辅助模块和利用模块会一起列出来。

比如说我要搜2026年为披露日期的漏洞可以用:search cve:2026

image

结果框里有一列叫做Rank,它的作用是告诉你这个模块稳不稳。

Rank那一栏的字符都是什么意思?

结果列表里面有一个Rank,这个表示的是模块稳不稳。excellent这一档基本不会把目标服务器搞崩,SQL注入和命令执行基本都在这一档,往下就是great和good,有默认目标、覆盖常见情况。再往下的话就到average、low了,成功率就不敢保证,manual基本等于把服务打挂。如果想要挑模块的话就先看这一列,至少比看名字猜靠谱。

框架有个好处就是它会跟着新漏洞走,只要CVE披露了对应的模块一般很快就会有人提交,不需要自己写利用代码。单洞脚本相比于这个就有很大的局限性,因为它永远停在作者写完的时候。

三、钥匙和进门后应该做的事情

很多人都会搞混的一组概念是Exploit和Payload。

Exploit是打开门的钥匙。它只限于利用漏洞的本身,把代码送进目标的固定执行流程。送进去的是什么他不管。

Payload是进门后要干的事情,进去之后会做什么由它决定。

Exploit Payload
谁决定 目标有什么漏洞 想要拿到的目标
什么时候定 动手之前就有固定的流程 什么时候都能改
换它意味着什么 换了个漏洞 同一个漏洞换一个目的

如果一个漏洞有不同的载荷,那它的结果就会完全不一样:

配一个执行单条命令的看一眼就会退出,命令跑完后连接也就断了。

配一个完整的控制端可以开长期会话,把这个机器当做跳板继续走。Meterpreter属于这一类,它跑在内存里,并不会在磁盘里留文件。

这一类的连接叫做反弹

方向是相反的:由目标机器主动连接攻击机交出控制权

目标往往藏在防火墙或者在内网里,外部的连接一般进不去,但是它的外联基本没什么人拦。所以在LHOST的位置一般填自己的地址,让他按照地址连过来。

image

框架之所以把他们拆开是因为他们的决策时机各不相同

四、确认了,但是为什么有时候还是打不穿

上一个阶段结束后,WordPress的后台就多了一个管理员,很多人的理解是到这里就算是拿下了。但其实还差得远,如果要实现在后台才做的话,离服务器进行任意命令执行还有三道门槛:

第一道:插件安装策略

从后台的管理员到执行代码之间还缺少安装插件这一步。

WordPress里面有一个常量叫做DISALLOW_FILE_MODS,可以在配置文件里面把它设置为true,然后它后台的安装、更新、删除插件功能会全部关闭。

第二道:文件系统权限

后台允许装插件还不够,文件如果没有写入的权限的话也没用,很多站点在加固的时候会把代码目录设置为只读,这样就算插件可以上传但是也无法运行。

第三道:主机层面

代码跑起来后是以Web服务的用户身份运行,这个用户有什么权限,能不能sudo、容器是否为只读,决定了能造成多大的影响。

三道门槛的强度决定了攻击者能到达哪一步。

Facilitated

还有一种打不穿的情况,原因在于漏洞本身。就比如60137的官方标题带着Facilitated的修饰,这种属于促成型注入。这个参数是目标用户有插件或者主题主动把不可信的数据喂进去了。

上几章也讲过,版本是另一个变量。

CVE-2026-60137是WordPress里的SQL注入,影响从6.8.0到7.01;CVE-2026-63030是REST API的路由混淆,漏洞影响从6.9.0到7.0.1这两个版本。

两个漏洞的区间可能并不重合

6.8的站点只有一个,缺了吧请求送进去的入口,缺少能把请求送出去的入口,链路能不能走到底。7.9和7.0两个都在,这完整的路径才能成立。

五、打完了,拿到哪算哪

同一个利用成功,实际上拿到的东西能够分为三挡。

档位 能做什么 危害到了哪个位置
证明能打 发无害探测,确认是否可以利用 排除误报,报告上写已验证
拿到数据 读文件、查过数据库、下载配置 数据泄露,但是系统本质归别人管
拿到执行的权限 跑命令、装东西、长期待着 一次质变,拿到服务器

这一条链路能说明分档的意义。60137单独存在时只能停在拿到数据,权限只停留在读库但不能推动代码执行,官方只给了5.9分,但是再加上63030的入口,这一条路就能走到拿到执行权限,整体攻击链能达到9.8分。

同一个洞不同的档位

同一个洞,在不同的版本上停在不同的档位。这就是上一个阶段说的:版本对了不一定能跑通

在报告编写时这三挡也要分开写,一档和三挡能差几个量级,这些内容混在一起在后面的修复中排优先级会很麻烦。

六、咋防

WordPress这一条链路的修法的要点是,别让攻击者走到第三档。

措施 挡住什么 挡不住什么
打补丁 整条连,这是根 已经进来了的后门和账号
DISALLOW_FILE_MODS 后台装插件的那条路 已有了的管理员账号
WAF栏batch/v1端点 免认证的入口 从内网发送的请求
目录只读和最小权限 落地写文件、往主机层走 读数据这一档

打补丁听着很简单,但是落地很容易出问题,升到哪是有讲究的:6.8分支一般升到6.8.6就够了,6.9和7.0必须升到6.9.5和7.0.2,少升一个版本就会有一个洞开着。

常量执行起来可能比较麻烦,每次升级插件都要去走命令行或者去部署流程。对于不需要频繁改动的站点这还是很划算的,因为它可以把攻击者卡在能进后台和能执行代码中间.

配置也是一个变量。Cloudflare在分析中提到,这条链要触及受影响的代码路径,前提是站点没有启用持久化对象缓存。同样的版本,配置不同的话结论也不一样。

补丁不是万能的

光靠一个补丁解决不了所有的问题。在打完补丁后还要再检查一遍:后台有没有不认识的管理员,最近有没有新装的插件、PHP文件有没有被动过

七、最后

回到一开始的问题:漏洞确认了然后呢?

答案是真动手试一次,并且要确定自己能拿到哪一档。确认漏洞的存在只是知道门在哪,利用是把门推开待下来。

这两件事的差距很大。知道有漏洞的人很多,但是能真正利用漏洞实现拿到控制权的人少一截,能说明自己拿到哪一档的人更少。

在确认漏洞后,先让自己明白这三个问题:这个洞有没有现成的利用模块、搭配什么载荷,打完之后的算拿到了哪一档。

有牛 写于 2026.10.08