前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码审计之PHPWIND

代码审计之PHPWIND

作者头像
天钧
发布2019-07-25 10:22:38
3.6K0
发布2019-07-25 10:22:38
举报
文章被收录于专栏:渗透云笔记

0x01后台getshell

漏洞分析

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

图1

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

图2

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

图3

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

图4

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

图5

图6

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

/PwApplicationHelper.php

图7

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

图8

getConfig解析manifest的配置信息

图9

图10

图11

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

图11

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

复现

构造payload

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

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

0x02任意目录/文件删除

版本:phpwind先进版v 9.0.2

漏洞分析

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

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

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

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

复现

任意目录删除

任意文件删除

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01后台getshell
    • 漏洞分析
      • 复现
      • 0x02任意目录/文件删除
        • 漏洞分析
          • 复现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档