CYH博客CYH博客

天行健,
君子以自强不息。

代码审计之PHPwind

版本:9.0.2

0x01后台getshell

漏洞分析

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

代码审计之PHPwind(图1)

图1

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

代码审计之PHPwind(图2)

图2

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

图3

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

图4

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

图5

图6

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

/PwApplicationHelper.php

图7

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

代码审计之PHPwind(图3)

图8

getConfig解析manifest的配置信息

代码审计之PHPwind(图4)

图9

代码审计之PHPwind(图5)

图10

代码审计之PHPwind(图6)

图11

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

图11

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

复现

构造payload

代码审计之PHPwind(图7)

代码审计之PHPwind(图8)

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

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

代码审计之PHPwind(图9)

0x02任意目录/文件删除

版本:phpwind先进版v 9.0.2

漏洞分析

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

代码审计之PHPwind(图10)

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

代码审计之PHPwind(图11)

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

代码审计之PHPwind(图12)

此函数的功能是根据之前&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直接可控。

复现

任意目录删除

代码审计之PHPwind(图13)

代码审计之PHPwind(图14)

任意文件删除

代码审计之PHPwind(图15)


未经允许不得转载:CYH博客 » 代码审计之PHPwind
分享到: 更多 (0)

CYH博客 带给你想要内容

联系我们