<
代码审计之PHPWind
>
上一篇

SRC逻辑漏洞挖掘浅谈
下一篇

python动态爬虫

版本:9.0.2

0x01后台getshell

漏洞分析

漏洞位置出现在插件模板上传安装位置对应的源码位置为applications/appcenter/admin/AppController.php

img

图1

跟踪代码执行当本地上传时会进入uploadAction函数,先进行了用户验证然后新建一个文件上传的PwApplicationUpload类开始执行上传

img

图2

跟进PwApplicationUpload此类的主要作用为队上传文件先进行文件类型(后缀)校验上传的文件是否为zip,并根据时间戳生死临时目录和hash后生成一个临时文件名返回保存

img

图3

上传后执行本地应该安装时进入doinstallAction

img

图4

根据时间戳获取到刚刚上传的文件信息进行解压,跟进extractPackage

img

图5

img

图6

phpwind_9.0.2_utf8/upload/src/applications/appcenter/admin/

/PwApplicationHelper.php

img

图7

解压后进行初始化安装包信息校验manifest

img

图8

getConfig解析manifest的配置信息

img

图9

img

图10

img

图11

最后执行安装,若安装过程出现错误进行回滚。具体代码如下

img

图11

通过以上整个上传及解压流程可知,在对安装包的校验时主要在第三步此过程中主要校验了manifest的配置信息,只要压缩包中存在manifest.xml文件且配置信息中的alias名称不和之前重复即可解压安装成功,因此攻击者可以伪造包含manifest.xml文件的zip包,zip包除了伪造的manifest.xml还包含php后面文件,安装成功后木马即存在自解压的模板目录下,直接getshell。

复现

构造payload

img

img

img

img

img

根据分析安装成功后的目录名为alias名称,最后访问a.php getshell

http://192.168.86.232/phpwind/src/extensions/test211/a.php

img

0x02任意目录/文件删除

版本:phpwind先进版v 9.0.2

漏洞分析

在程序代码位置phpwind/src/applications/appcenter/admin/AppController.php删除目录处代码194行处可以看到delFolderAction的对应功能为删除应用目录,先通过getInput方法获取了前台post的目录名,查看下此函数

img

直接获取&name并返回了&value,比较简单然后将返回的值直接给了$folder,接着连带$folder调用了clearRecur目录删除函数,

img

跟踪到此函数的定义在代码位置/phpwind/wind/utility/WindFolder.php 77行

img

此函数的功能是根据之前&folder值递归删除,整个删除过程folder并未进行任何过滤,直接造成任意目录删除。

再来看

​ * 删除已上传压缩包

​ */

​ public function delFileAction() {

​ $file = $this->getInput(‘file’, ‘post’);

​ if ($file && file_exists(ATTACH_PATH . $file)) {

​ WindFile::del(ATTACH_PATH . $file);

​ }

​ $this->showMessage(‘success’);

​ }

很明显File直接可控。

复现

任意目录删除

img

img

任意文件删除

img

Top
Foot