phpems7.0代码执行漏洞


前言
今天拿到一篇某前辈发的代码审计文章,就复盘了一下,目前暂时没看到升级版,或者是补丁,目前也处
于0day状态
参考文章https://mp.weixin.qq.com/s/DD0lJD_COKLzF-HBPYvIwQ
环境搭建
本机环境:

  1. apeche2.4.39
  2. ftp0.9.60
  3. mysql5.7.26

代码审计分析

  1. app/content/cls/api.cls.php

phpems7.0代码执行漏洞
此处可以看到当blocktype==4的时候执行以下代码
可以看到eval中存在变量$tp
phpems7.0代码执行漏洞
发现其调用函数fetchContent
全文追踪此函数

  1. /lib/tpl.cls.php

phpems7.0代码执行漏洞

进一步追踪compileContentTpl函数

phpems7.0代码执行漏洞

对其中函数进行全部追踪发现再此处仅仅只是做了无关紧要的正则过滤并不影响我们的输入与输出
回到位置继续追踪$tp的值:

phpems7.0代码执行漏洞

html_entity_decode函数的作用将html实体编码的值转化为字符
追踪stripSlashes函数方法:

  1. lib/ev.cls.php

phpems7.0代码执行漏洞

发现此处操作为将sql注入的转义的/去除

phpems7.0代码执行漏洞

phpems7.0代码执行漏洞

且此处发现blocktype的值
分析此段代码得结论,那么就是需要控制blocktype的值为4和blockcontent的值为我们想要使用的php
代码那么就可以造成代码执行漏洞

  1. /app/content/cls/api.cls.php

看到产生漏洞的函数方法parseBlock
phpems7.0代码执行漏洞

可以看出函数中blocktype的值由getBlockById($blockid)此处控制
定位此函数方法的函数

  1. /app/content/cls/block.cls.php

phpems7.0代码执行漏洞

根据框架预先定义好的数据库查询方法可以得知此处为数据库增加查询语句,查询blockid表中的数据查
询条件为$blockid值,
函数eval在传入$tp值并没有加入有效的过滤,那么此处只要我们可以控制数据表中的内容和blocktype
的值,并且可以控制传参那么此代码执行就生效

根据上诉代码可以得到存在调用/app/content/cls/block.cls.php getBlockById方法就可能存在代码执行
漏洞
phpems7.0代码执行漏洞

  1. /app/content/controller/blocks.master.php

此处modify方法调用getBlockById
phpems7.0代码执行漏洞
get指的是通过get方法获取,stripSlashes对$block['blockcontent']进行了html实体化,和sql注入的过

由于再我们发现漏洞处的位置,代码对传入的值进行去html和删除转义字符的处理从而导致漏洞的存在


2022HVV POC合集

私服通用0Day复现getshell

获取更多资讯请加入交流群


    协助本站SEO优化一下,谢谢!
    关键词不能为空
评 论
更换验证码