记一次学员审计拿下CNVD证书流程-第二弹

admin 2026-01-21 23:54:45 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章记录学员通过代码审计挖掘某CMS后台getenv未过滤缺陷,利用HTTP头注入参数绕过黑名单正则,成功实现任意命令执行并获CNVD证书,核心技巧是避开三种PHP危险模式检测,将函数名藏入头字段完成动态调用,过程附版本截图与回显验证,再次印证正则绕过思路对证书申请的价值 综合评分: 71 文章分类: 代码审计,漏洞分析,安全培训,实战经验,漏洞预警


cover_image

记一次学员审计拿下CNVD证书流程-第二弹

原创

学员投稿 学员投稿

进击安全

2026年1月21日 19:42 北京

免责申明

本文章仅用于信息安全防御技术分享,因用于其他用途而产生不良后果,作者不承担任何法律责任,请严格遵循中华人民共和国相关法律法规,禁止做一切违法犯罪行为。

一、前言

    再来更新一期学员通过代码审计来获取CNVD证书的一次流程,还是我们的老朋友CMS系统,来混对应的一本CNVD证书。

熟悉的系统不熟悉的人物。

学员投稿,公众号:进击安全记一次学员审计拿下CNVD证书流程

二、代码审计

        这里版本证明。

        存在漏洞位置:

        dede/file_manage_control.php

        代码28行,过滤传递过来$str参数,移除PHP的多行注释 (/* … */),防止攻击者通过注释隐藏恶意代码,代码31-32行中定义了一个包含多个危险函数和超级全局变量的黑名单,该黑名单不仅包含常见的危险函数,还包含各种执行函数,文件操作函数,代码执行函数,超级全局变量。代码33-39行中,遍历黑名单,使用正则表达式检查$str中是否包含黑名单中的函数调用,如果发现匹配,会将$str转义并终止脚本。

        代码41-52行中,检查内容是否包含PHP代码标签(<?php、<?=),如果包含PHP代码,进一步检查三种危险模式:变量函数调用匹配如 $func(…); 的动态函数调用;抑制错误的函数调用,匹配如 @$func(…) 的错误抑制符+函数调用;反引号命令执行,匹配反引号中的命令执行。

        当$fmdo=edit时,代码109行对$str参数进行去除反斜杠转义,然后110-112行,就进行写入文件操作。

        在上述的代码过滤中,代码31-32行中定义了一个包含多个危险函数和超级全局变量的黑名单中,但没有过滤getenv()函数,同时在代码41-52行中,检查php的三种危险模式,只要不包含那三种危险模式,攻击者可以构造php代码执行命令,具体代码如下所示:

| | | — | | <?php getenv(‘HTTP_E’)(‘whoami’); |

        getenv() 是 PHP 中用于获取环境变量值的函数,它可以获取HTTP头里面的值,我们把命令执行的函数放到HTTP头里面就可以绕过代码中对敏感函数的检查,即可执行任意命令。

        getenv函数会获取请求头中E的值然后拼接执行函数

        具体代码:

| | | — | | <?php getenv(‘HTTP_E’)(‘whoami’); |

            访问后门文件,执行whoami ,执行成功

            修改为dir继续执行。

        其实这里的漏洞本质就像尊师之前CNVD专项课程里面所说的一样,本质就是一直在绕这款CMS的过滤,这款CMS一直所使用的正则表达式来进行过滤,所以只要能够吧正则表达式去绕过去,那么也就能够混到属于自己的一本证书。

(祝看到文章的师傅们证书满满)

广告区域

目前第四期进阶课程已经开始,课表如下:

同时报名第四期基础课程同样可看,课表如下:

同时具备内部资料以及靶场相关福利,想要了解的师傅可以冲了。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:进击安全 学员投稿 学员投稿《记一次学员审计拿下CNVD证书流程-第二弹》

评论:0   参与:  0