文章总结: 文章记录学员通过代码审计挖掘某CMS后台getenv未过滤缺陷,利用HTTP头注入参数绕过黑名单正则,成功实现任意命令执行并获CNVD证书,核心技巧是避开三种PHP危险模式检测,将函数名藏入头字段完成动态调用,过程附版本截图与回显验证,再次印证正则绕过思路对证书申请的价值 综合评分: 71 文章分类: 代码审计,漏洞分析,安全培训,实战经验,漏洞预警
记一次学员审计拿下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证书流程-第二弹》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论